diff options
Diffstat (limited to 'drivers/media/i2c/smiapp-pll.c')
-rw-r--r-- | drivers/media/i2c/smiapp-pll.c | 19 |
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", |