aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/i2c/smiapp-pll.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/i2c/smiapp-pll.c')
-rw-r--r--drivers/media/i2c/smiapp-pll.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/media/i2c/smiapp-pll.c b/drivers/media/i2c/smiapp-pll.c
index d7e347594e19..d3243602c77a 100644
--- a/drivers/media/i2c/smiapp-pll.c
+++ b/drivers/media/i2c/smiapp-pll.c
@@ -371,7 +371,7 @@ int smiapp_pll_calculate(struct device *dev, struct smiapp_pll_limits *limits,
371 int rval = -EINVAL; 371 int rval = -EINVAL;
372 372
373 if (pll->flags & SMIAPP_PLL_FLAG_OP_PIX_CLOCK_PER_LANE) 373 if (pll->flags & SMIAPP_PLL_FLAG_OP_PIX_CLOCK_PER_LANE)
374 lane_op_clock_ratio = pll->lanes; 374 lane_op_clock_ratio = pll->csi2.lanes;
375 else 375 else
376 lane_op_clock_ratio = 1; 376 lane_op_clock_ratio = 1;
377 dev_dbg(dev, "lane_op_clock_ratio: %d\n", lane_op_clock_ratio); 377 dev_dbg(dev, "lane_op_clock_ratio: %d\n", lane_op_clock_ratio);
@@ -379,9 +379,20 @@ int smiapp_pll_calculate(struct device *dev, struct smiapp_pll_limits *limits,
379 dev_dbg(dev, "binning: %dx%d\n", pll->binning_horizontal, 379 dev_dbg(dev, "binning: %dx%d\n", pll->binning_horizontal,
380 pll->binning_vertical); 380 pll->binning_vertical);
381 381
382 /* CSI transfers 2 bits per clock per lane; thus times 2 */ 382 switch (pll->bus_type) {
383 pll->pll_op_clk_freq_hz = pll->link_freq * 2 383 case SMIAPP_PLL_BUS_TYPE_CSI2:
384 * (pll->lanes / lane_op_clock_ratio); 384 /* CSI transfers 2 bits per clock per lane; thus times 2 */
385 pll->pll_op_clk_freq_hz = pll->link_freq * 2
386 * (pll->csi2.lanes / lane_op_clock_ratio);
387 break;
388 case SMIAPP_PLL_BUS_TYPE_PARALLEL:
389 pll->pll_op_clk_freq_hz = pll->link_freq * pll->bits_per_pixel
390 / DIV_ROUND_UP(pll->bits_per_pixel,
391 pll->parallel.bus_width);
392 break;
393 default:
394 return -EINVAL;
395 }
385 396
386 /* Figure out limits for pre-pll divider based on extclk */ 397 /* Figure out limits for pre-pll divider based on extclk */
387 dev_dbg(dev, "min / max pre_pll_clk_div: %d / %d\n", 398 dev_dbg(dev, "min / max pre_pll_clk_div: %d / %d\n",