4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Todor Tomov <[email protected]>

[ Upstream commit c628e78899ff8006b5f9d8206da54ed3bb994342 ]

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 <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/media/platform/qcom/camss-8x16/camss-csid.c |   16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

--- a/drivers/media/platform/qcom/camss-8x16/camss-csid.c
+++ b/drivers/media/platform/qcom/camss-8x16/camss-csid.c
@@ -392,9 +392,6 @@ static int csid_set_stream(struct v4l2_s
                    !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 =
@@ -416,6 +413,9 @@ static int csid_set_stream(struct v4l2_s
                        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 +
@@ -425,6 +425,9 @@ static int csid_set_stream(struct v4l2_s
                        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;
 
@@ -439,13 +442,16 @@ static int csid_set_stream(struct v4l2_s
 
                        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);


Reply via email to