RK3399 7.1 Camera IMX307 mclk 37.125M補丁
阿新 • • 發佈:2020-12-23
參考rk3288 7.1IMX307 cif clk out37.125M補丁,移植過來,rk3399還是無法分出37.125M
RK3399預設cif clk預設選擇的是GPLL 800M作為母時鐘,無法分出37.125M,RK3399預設時鐘樹裡沒有594M母時鐘
只有選擇最接近594M NPLL(NPLL預設600M),驅動程式碼也需要修改,否則無法設定成37.125M,
cat ./sys/kernel/debug/clk/clk_summary |grep cif
clk_cifout_src 0 3 594000000 0 0
完整補丁如下:
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-d20pro.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3399-d20pro.dts index eb60280..2481f1d 100755 --- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-d20pro.dts +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-d20pro.dts @@ -955,10 +955,22 @@ &isp0 { status = "okay"; + + // start for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add + assigned-clocks = <&cru PLL_NPLL>, <&cru SCLK_CIF_OUT_SRC>, <&cru SCLK_CIF_OUT>; + assigned-clock-parents = <&cru PLL_NPLL>; + assigned-clock-rates = <594000000>, <594000000>, <37125000>; + // end for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add }; &isp1 { status = "okay"; + + // start for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add + assigned-clocks = <&cru PLL_NPLL>, <&cru SCLK_CIF_OUT_SRC>, <&cru SCLK_CIF_OUT>; + assigned-clock-parents = <&cru PLL_NPLL>; + assigned-clock-rates = <594000000>, <594000000>, <37125000>; + // end for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add }; &isp0_mmu { diff --git a/kernel/drivers/media/video/rk_camsys/camsys_cif.c b/kernel/drivers/media/video/rk_camsys/camsys_cif.c old mode 100644 new mode 100755 index fce0784..a597ea6 --- a/kernel/drivers/media/video/rk_camsys/camsys_cif.c +++ b/kernel/drivers/media/video/rk_camsys/camsys_cif.c @@ -148,7 +148,9 @@ static int camsys_cif_clkout_cb(void *ptr, unsigned int on, unsigned int clkin) spin_lock(&clk->lock); if (on && (clk->out_on != on)) { clk_prepare_enable(clk->cif_clk_out); - clk_set_rate(clk->cif_clk_out, clkin); + //start for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add + //clk_set_rate(clk->cif_clk_out, clkin); + //end for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add clk->out_on = on; camsys_trace(1, "%s clock out(rate: %dHz) turn on", diff --git a/kernel/drivers/media/video/rk_camsys/camsys_marvin.c b/kernel/drivers/media/video/rk_camsys/camsys_marvin.c old mode 100644 new mode 100755 index 0f849a8..1a713ff --- a/kernel/drivers/media/video/rk_camsys/camsys_marvin.c +++ b/kernel/drivers/media/video/rk_camsys/camsys_marvin.c @@ -566,6 +566,7 @@ static int camsys_mrv_clkin_cb(void *ptr, unsigned int on) clk_prepare_enable(clk->pclk_dphytxrx); clk_prepare_enable(clk->pclkin_isp); + clk_prepare_enable(clk->cif_clk_out); } else { clk_set_rate(clk->clk_isp0, isp_clk); clk_prepare_enable(clk->hclk_isp0_noc); @@ -682,7 +683,9 @@ static int camsys_mrv_clkout_cb(void *ptr, unsigned int on, unsigned int inclk) mutex_lock(&clk->lock); if (on && (clk->out_on != on)) { - clk_set_rate(clk->cif_clk_out, inclk); + //start for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add + //clk_set_rate(clk->cif_clk_out, inclk); + //end for camera IMX307 mclk "sclk_vip_out" set 37.125M by lpz add clk_prepare_enable(clk->cif_clk_out); clk->out_on = on; camsys_trace(1, "%s clock out(rate: %dHz) turn on", @@ -691,7 +694,9 @@ static int camsys_mrv_clkout_cb(void *ptr, unsigned int on, unsigned int inclk) } else if (!on && clk->out_on) { if (!IS_ERR_OR_NULL(clk->cif_clk_pll)) { /* just for closing clk which base on XIN24M */ - clk_set_rate(clk->cif_clk_out, 36000000); + //clk_set_rate(clk->cif_clk_out, 36000000); + clk_set_parent(clk->cif_clk_out, + clk->cif_clk_pll); } else { camsys_warn("%s clock out may be not off!", dev_name(camsys_dev->miscdev.this_device)); (END)