media: ccs: Add support for DDR OP SYS and OP PIX clocks
authorSakari Ailus <sakari.ailus@linux.intel.com>
Wed, 23 Sep 2020 10:22:52 +0000 (12:22 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 7 Dec 2020 16:04:17 +0000 (17:04 +0100)
Support dual data rate operational system and pixel clocks by conveying
the flags to the PLL calculator and updating how the link rate is
calculated.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/ccs/ccs-core.c

index 580166b..205d44c 100644 (file)
@@ -387,7 +387,8 @@ static int ccs_pll_configure(struct ccs_sensor *sensor)
                         DIV_ROUND_UP(pll->op_bk.sys_clk_freq_hz,
                                      1000000 / 256 / 256) *
                         (pll->flags & CCS_PLL_FLAG_LANE_SPEED_MODEL ?
-                         sensor->pll.csi2.lanes : 1));
+                         sensor->pll.csi2.lanes : 1) <<
+                        (pll->flags & CCS_PLL_FLAG_OP_SYS_DDR ? 1 : 0));
        if (rval < 0 || sensor->pll.flags & CCS_PLL_FLAG_NO_OP_CLOCKS)
                return rval;
 
@@ -3273,6 +3274,12 @@ static int ccs_probe(struct i2c_client *client)
                } else {
                        sensor->pll.flags |= CCS_PLL_FLAG_DUAL_PLL;
                }
+               if (CCS_LIM(sensor, CLOCK_CALCULATION) &
+                   CCS_CLOCK_CALCULATION_DUAL_PLL_OP_SYS_DDR)
+                       sensor->pll.flags |= CCS_PLL_FLAG_OP_SYS_DDR;
+               if (CCS_LIM(sensor, CLOCK_CALCULATION) &
+                   CCS_CLOCK_CALCULATION_DUAL_PLL_OP_PIX_DDR)
+                       sensor->pll.flags |= CCS_PLL_FLAG_OP_PIX_DDR;
        }
        sensor->pll.op_bits_per_lane = CCS_LIM(sensor, OP_BITS_PER_LANE);
        sensor->pll.ext_clk_freq_hz = sensor->hwcfg.ext_clk;