]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: camss: csid: Configure data type and decode format properly
authorTodor Tomov <todor.tomov@linaro.org>
Wed, 25 Jul 2018 16:38:20 +0000 (12:38 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 2 Aug 2018 10:13:30 +0000 (06:13 -0400)
The CSID decodes the input data stream. When the input comes from
the Test Generator the format of the stream is set on the source
media pad. When the input comes from the CSIPHY the format is the
one on the sink media pad. Use the proper format for each case.

Signed-off-by: Todor Tomov <todor.tomov@linaro.org>
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/qcom/camss/camss-csid.c

index c0fef1787ad489bbce15cf5f21cc708a618c5177..3cde07e44af611324a224f938882fe6db717784b 100644 (file)
@@ -384,9 +384,6 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
                    !media_entity_remote_pad(&csid->pads[MSM_CSID_PAD_SINK]))
                        return -ENOLINK;
 
-               dt = csid_get_fmt_entry(csid->fmt[MSM_CSID_PAD_SRC].code)->
-                                                               data_type;
-
                if (tg->enabled) {
                        /* Config Test Generator */
                        struct v4l2_mbus_framefmt *f =
@@ -408,6 +405,9 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
                        writel_relaxed(val, csid->base +
                                       CAMSS_CSID_TG_DT_n_CGG_0(0));
 
+                       dt = csid_get_fmt_entry(
+                               csid->fmt[MSM_CSID_PAD_SRC].code)->data_type;
+
                        /* 5:0 data type */
                        val = dt;
                        writel_relaxed(val, csid->base +
@@ -417,6 +417,9 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
                        val = tg->payload_mode;
                        writel_relaxed(val, csid->base +
                                       CAMSS_CSID_TG_DT_n_CGG_2(0));
+
+                       df = csid_get_fmt_entry(
+                               csid->fmt[MSM_CSID_PAD_SRC].code)->decode_format;
                } else {
                        struct csid_phy_config *phy = &csid->phy;
 
@@ -431,13 +434,16 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
 
                        writel_relaxed(val,
                                       csid->base + CAMSS_CSID_CORE_CTRL_1);
+
+                       dt = csid_get_fmt_entry(
+                               csid->fmt[MSM_CSID_PAD_SINK].code)->data_type;
+                       df = csid_get_fmt_entry(
+                               csid->fmt[MSM_CSID_PAD_SINK].code)->decode_format;
                }
 
                /* Config LUT */
 
                dt_shift = (cid % 4) * 8;
-               df = csid_get_fmt_entry(csid->fmt[MSM_CSID_PAD_SINK].code)->
-                                                               decode_format;
 
                val = readl_relaxed(csid->base + CAMSS_CSID_CID_LUT_VC_n(vc));
                val &= ~(0xff << dt_shift);