]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
media: rcar-csi2: update stream start for V3M
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Thu, 26 Jul 2018 22:36:57 +0000 (18:36 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Fri, 27 Jul 2018 13:01:07 +0000 (09:01 -0400)
Latest errata document updates the start procedure for V3M. This change
in addition to adhering to the datasheet update fixes capture on early
revisions of V3M.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/platform/rcar-vin/rcar-csi2.c

index daef72d410a3425df745eb0da4d92a972159e857..dc5ae8025832ab6e629557b1fa860731a5dfd796 100644 (file)
@@ -339,6 +339,7 @@ enum rcar_csi2_pads {
 
 struct rcar_csi2_info {
        int (*init_phtw)(struct rcar_csi2 *priv, unsigned int mbps);
+       int (*confirm_start)(struct rcar_csi2 *priv);
        const struct rcsi2_mbps_reg *hsfreqrange;
        unsigned int csi0clkfreqrange;
        bool clear_ulps;
@@ -545,6 +546,13 @@ static int rcsi2_start(struct rcar_csi2 *priv)
        if (ret)
                return ret;
 
+       /* Confirm start */
+       if (priv->info->confirm_start) {
+               ret = priv->info->confirm_start(priv);
+               if (ret)
+                       return ret;
+       }
+
        /* Clear Ultra Low Power interrupt. */
        if (priv->info->clear_ulps)
                rcsi2_write(priv, INTSTATE_REG,
@@ -880,6 +888,11 @@ static int rcsi2_init_phtw_h3_v3h_m3n(struct rcar_csi2 *priv, unsigned int mbps)
 }
 
 static int rcsi2_init_phtw_v3m_e3(struct rcar_csi2 *priv, unsigned int mbps)
+{
+       return rcsi2_phtw_write_mbps(priv, mbps, phtw_mbps_v3m_e3, 0x44);
+}
+
+static int rcsi2_confirm_start_v3m_e3(struct rcar_csi2 *priv)
 {
        static const struct phtw_value step1[] = {
                { .data = 0xed, .code = 0x34 },
@@ -890,12 +903,6 @@ static int rcsi2_init_phtw_v3m_e3(struct rcar_csi2 *priv, unsigned int mbps)
                { /* sentinel */ },
        };
 
-       int ret;
-
-       ret = rcsi2_phtw_write_mbps(priv, mbps, phtw_mbps_v3m_e3, 0x44);
-       if (ret)
-               return ret;
-
        return rcsi2_phtw_write_array(priv, step1);
 }
 
@@ -949,6 +956,7 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a77965 = {
 
 static const struct rcar_csi2_info rcar_csi2_info_r8a77970 = {
        .init_phtw = rcsi2_init_phtw_v3m_e3,
+       .confirm_start = rcsi2_confirm_start_v3m_e3,
 };
 
 static const struct of_device_id rcar_csi2_of_table[] = {