|
@@ -68,23 +68,23 @@ static void print_pll(struct device *dev, struct smiapp_pll *pll)
|
|
|
dev_dbg(dev, "pre_pll_clk_div\t%u\n", pll->pre_pll_clk_div);
|
|
|
dev_dbg(dev, "pll_multiplier \t%u\n", pll->pll_multiplier);
|
|
|
if (!(pll->flags & SMIAPP_PLL_FLAG_NO_OP_CLOCKS)) {
|
|
|
- dev_dbg(dev, "op_sys_clk_div \t%u\n", pll->op_sys_clk_div);
|
|
|
- dev_dbg(dev, "op_pix_clk_div \t%u\n", pll->op_pix_clk_div);
|
|
|
+ dev_dbg(dev, "op_sys_clk_div \t%u\n", pll->op.sys_clk_div);
|
|
|
+ dev_dbg(dev, "op_pix_clk_div \t%u\n", pll->op.pix_clk_div);
|
|
|
}
|
|
|
- dev_dbg(dev, "vt_sys_clk_div \t%u\n", pll->vt_sys_clk_div);
|
|
|
- dev_dbg(dev, "vt_pix_clk_div \t%u\n", pll->vt_pix_clk_div);
|
|
|
+ dev_dbg(dev, "vt_sys_clk_div \t%u\n", pll->vt.sys_clk_div);
|
|
|
+ dev_dbg(dev, "vt_pix_clk_div \t%u\n", pll->vt.pix_clk_div);
|
|
|
|
|
|
dev_dbg(dev, "ext_clk_freq_hz \t%u\n", pll->ext_clk_freq_hz);
|
|
|
dev_dbg(dev, "pll_ip_clk_freq_hz \t%u\n", pll->pll_ip_clk_freq_hz);
|
|
|
dev_dbg(dev, "pll_op_clk_freq_hz \t%u\n", pll->pll_op_clk_freq_hz);
|
|
|
if (!(pll->flags & SMIAPP_PLL_FLAG_NO_OP_CLOCKS)) {
|
|
|
dev_dbg(dev, "op_sys_clk_freq_hz \t%u\n",
|
|
|
- pll->op_sys_clk_freq_hz);
|
|
|
+ pll->op.sys_clk_freq_hz);
|
|
|
dev_dbg(dev, "op_pix_clk_freq_hz \t%u\n",
|
|
|
- pll->op_pix_clk_freq_hz);
|
|
|
+ pll->op.pix_clk_freq_hz);
|
|
|
}
|
|
|
- dev_dbg(dev, "vt_sys_clk_freq_hz \t%u\n", pll->vt_sys_clk_freq_hz);
|
|
|
- dev_dbg(dev, "vt_pix_clk_freq_hz \t%u\n", pll->vt_pix_clk_freq_hz);
|
|
|
+ dev_dbg(dev, "vt_sys_clk_freq_hz \t%u\n", pll->vt.sys_clk_freq_hz);
|
|
|
+ dev_dbg(dev, "vt_pix_clk_freq_hz \t%u\n", pll->vt.pix_clk_freq_hz);
|
|
|
}
|
|
|
|
|
|
static int check_all_bounds(struct device *dev,
|
|
@@ -109,35 +109,35 @@ static int check_all_bounds(struct device *dev,
|
|
|
"pll_op_clk_freq_hz");
|
|
|
if (!rval)
|
|
|
rval = bounds_check(
|
|
|
- dev, pll->op_sys_clk_div,
|
|
|
+ dev, pll->op.sys_clk_div,
|
|
|
limits->op.min_sys_clk_div, limits->op.max_sys_clk_div,
|
|
|
"op_sys_clk_div");
|
|
|
if (!rval)
|
|
|
rval = bounds_check(
|
|
|
- dev, pll->op_pix_clk_div,
|
|
|
+ dev, pll->op.pix_clk_div,
|
|
|
limits->op.min_pix_clk_div, limits->op.max_pix_clk_div,
|
|
|
"op_pix_clk_div");
|
|
|
if (!rval)
|
|
|
rval = bounds_check(
|
|
|
- dev, pll->op_sys_clk_freq_hz,
|
|
|
+ dev, pll->op.sys_clk_freq_hz,
|
|
|
limits->op.min_sys_clk_freq_hz,
|
|
|
limits->op.max_sys_clk_freq_hz,
|
|
|
"op_sys_clk_freq_hz");
|
|
|
if (!rval)
|
|
|
rval = bounds_check(
|
|
|
- dev, pll->op_pix_clk_freq_hz,
|
|
|
+ dev, pll->op.pix_clk_freq_hz,
|
|
|
limits->op.min_pix_clk_freq_hz,
|
|
|
limits->op.max_pix_clk_freq_hz,
|
|
|
"op_pix_clk_freq_hz");
|
|
|
if (!rval)
|
|
|
rval = bounds_check(
|
|
|
- dev, pll->vt_sys_clk_freq_hz,
|
|
|
+ dev, pll->vt.sys_clk_freq_hz,
|
|
|
limits->vt.min_sys_clk_freq_hz,
|
|
|
limits->vt.max_sys_clk_freq_hz,
|
|
|
"vt_sys_clk_freq_hz");
|
|
|
if (!rval)
|
|
|
rval = bounds_check(
|
|
|
- dev, pll->vt_pix_clk_freq_hz,
|
|
|
+ dev, pll->vt.pix_clk_freq_hz,
|
|
|
limits->vt.min_pix_clk_freq_hz,
|
|
|
limits->vt.max_pix_clk_freq_hz,
|
|
|
"vt_pix_clk_freq_hz");
|
|
@@ -240,8 +240,8 @@ static int __smiapp_pll_calculate(struct device *dev,
|
|
|
}
|
|
|
|
|
|
pll->pll_multiplier = mul * i;
|
|
|
- pll->op_sys_clk_div = div * i / pll->pre_pll_clk_div;
|
|
|
- dev_dbg(dev, "op_sys_clk_div: %u\n", pll->op_sys_clk_div);
|
|
|
+ pll->op.sys_clk_div = div * i / pll->pre_pll_clk_div;
|
|
|
+ dev_dbg(dev, "op_sys_clk_div: %u\n", pll->op.sys_clk_div);
|
|
|
|
|
|
pll->pll_ip_clk_freq_hz = pll->ext_clk_freq_hz
|
|
|
/ pll->pre_pll_clk_div;
|
|
@@ -250,14 +250,14 @@ static int __smiapp_pll_calculate(struct device *dev,
|
|
|
* pll->pll_multiplier;
|
|
|
|
|
|
/* Derive pll_op_clk_freq_hz. */
|
|
|
- pll->op_sys_clk_freq_hz =
|
|
|
- pll->pll_op_clk_freq_hz / pll->op_sys_clk_div;
|
|
|
+ pll->op.sys_clk_freq_hz =
|
|
|
+ pll->pll_op_clk_freq_hz / pll->op.sys_clk_div;
|
|
|
|
|
|
- pll->op_pix_clk_div = pll->bits_per_pixel;
|
|
|
- dev_dbg(dev, "op_pix_clk_div: %u\n", pll->op_pix_clk_div);
|
|
|
+ pll->op.pix_clk_div = pll->bits_per_pixel;
|
|
|
+ dev_dbg(dev, "op_pix_clk_div: %u\n", pll->op.pix_clk_div);
|
|
|
|
|
|
- pll->op_pix_clk_freq_hz =
|
|
|
- pll->op_sys_clk_freq_hz / pll->op_pix_clk_div;
|
|
|
+ pll->op.pix_clk_freq_hz =
|
|
|
+ pll->op.sys_clk_freq_hz / pll->op.pix_clk_div;
|
|
|
|
|
|
/*
|
|
|
* Some sensors perform analogue binning and some do this
|
|
@@ -285,7 +285,7 @@ static int __smiapp_pll_calculate(struct device *dev,
|
|
|
* Find absolute limits for the factor of vt divider.
|
|
|
*/
|
|
|
dev_dbg(dev, "scale_m: %u\n", pll->scale_m);
|
|
|
- min_vt_div = DIV_ROUND_UP(pll->op_pix_clk_div * pll->op_sys_clk_div
|
|
|
+ min_vt_div = DIV_ROUND_UP(pll->op.pix_clk_div * pll->op.sys_clk_div
|
|
|
* pll->scale_n,
|
|
|
lane_op_clock_ratio * vt_op_binning_div
|
|
|
* pll->scale_m);
|
|
@@ -369,16 +369,16 @@ static int __smiapp_pll_calculate(struct device *dev,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- pll->vt_sys_clk_div = DIV_ROUND_UP(min_vt_div, best_pix_div);
|
|
|
- pll->vt_pix_clk_div = best_pix_div;
|
|
|
+ pll->vt.sys_clk_div = DIV_ROUND_UP(min_vt_div, best_pix_div);
|
|
|
+ pll->vt.pix_clk_div = best_pix_div;
|
|
|
|
|
|
- pll->vt_sys_clk_freq_hz =
|
|
|
- pll->pll_op_clk_freq_hz / pll->vt_sys_clk_div;
|
|
|
- pll->vt_pix_clk_freq_hz =
|
|
|
- pll->vt_sys_clk_freq_hz / pll->vt_pix_clk_div;
|
|
|
+ pll->vt.sys_clk_freq_hz =
|
|
|
+ pll->pll_op_clk_freq_hz / pll->vt.sys_clk_div;
|
|
|
+ pll->vt.pix_clk_freq_hz =
|
|
|
+ pll->vt.sys_clk_freq_hz / pll->vt.pix_clk_div;
|
|
|
|
|
|
pll->pixel_rate_csi =
|
|
|
- pll->op_pix_clk_freq_hz * lane_op_clock_ratio;
|
|
|
+ pll->op.pix_clk_freq_hz * lane_op_clock_ratio;
|
|
|
|
|
|
return check_all_bounds(dev, limits, pll);
|
|
|
}
|