diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index cf981d6c5d5b..f272630149cd 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -978,6 +978,8 @@ static int __maybe_unused rkisp_runtime_resume(struct device *dev) rkisp_update_sensor_info(isp_dev) >= 0) _set_pipeline_default_fmt(isp_dev, false); + if (isp_dev->hw_dev->is_assigned_clk) + rkisp_clk_dbg = true; isp_dev->cap_dev.wait_line = rkisp_wait_line; isp_dev->cap_dev.wrap_line = rkisp_wrap_line; isp_dev->is_rdbk_auto = rkisp_rdbk_auto; diff --git a/drivers/media/platform/rockchip/isp/hw.c b/drivers/media/platform/rockchip/isp/hw.c index e6e4d9a716fe..e892f7340e2b 100644 --- a/drivers/media/platform/rockchip/isp/hw.c +++ b/drivers/media/platform/rockchip/isp/hw.c @@ -786,10 +786,12 @@ static int enable_sys_clk(struct rkisp_hw_dev *dev) } } - rate = dev->clk_rate_tbl[0].clk_rate * 1000000UL; - rkisp_set_clk_rate(dev->clks[0], rate); - if (dev->is_unite) - rkisp_set_clk_rate(dev->clks[5], rate); + if (!dev->is_assigned_clk) { + rate = dev->clk_rate_tbl[0].clk_rate * 1000000UL; + rkisp_set_clk_rate(dev->clks[0], rate); + if (dev->is_unite) + rkisp_set_clk_rate(dev->clks[5], rate); + } rkisp_soft_reset(dev, false); isp_config_clk(dev, true); return 0; @@ -848,6 +850,7 @@ static int rkisp_hw_probe(struct platform_device *pdev) struct resource *res; int i, ret; bool is_mem_reserved = true; + u32 clk_rate = 0; match = of_match_node(rkisp_hw_of_match, node); if (IS_ERR(match)) @@ -941,6 +944,11 @@ static int rkisp_hw_probe(struct platform_device *pdev) hw_dev->clk_rate_tbl = match_data->clk_rate_tbl; hw_dev->num_clk_rate_tbl = match_data->num_clk_rate_tbl; + hw_dev->is_assigned_clk = false; + ret = of_property_read_u32(node, "assigned-clock-rates", &clk_rate); + if (!ret && clk_rate) + hw_dev->is_assigned_clk = true; + hw_dev->reset = devm_reset_control_array_get(dev, false, false); if (IS_ERR(hw_dev->reset)) { dev_dbg(dev, "failed to get reset\n"); diff --git a/drivers/media/platform/rockchip/isp/hw.h b/drivers/media/platform/rockchip/isp/hw.h index 04dedc22921c..ce57aef2fbc6 100644 --- a/drivers/media/platform/rockchip/isp/hw.h +++ b/drivers/media/platform/rockchip/isp/hw.h @@ -104,6 +104,7 @@ struct rkisp_hw_dev { bool is_runing; bool is_frm_buf; bool is_dvfs; + bool is_assigned_clk; }; int rkisp_register_irq(struct rkisp_hw_dev *dev);