#clock-cells = <1>;
clocks = <&clkgen JH7110_ISP_TOP_CLK_DVP>,
<&clkgen JH7110_ISP_TOP_CLK_ISPCORE_2X>,
- <&clkgen JH7110_ISP_TOP_CLK_ISP_AXI>;
+ <&clkgen JH7110_ISP_TOP_CLK_ISP_AXI>,
+ <&clkgen JH7110_NOC_BUS_CLK_ISP_AXI>;
clock-names = "u0_dom_isp_top_clk_dom_isp_top_clk_dvp",
"u0_dom_isp_top_clk_dom_isp_top_clk_ispcore_2x",
- "u0_dom_isp_top_clk_dom_isp_top_clk_isp_axi";
+ "u0_dom_isp_top_clk_dom_isp_top_clk_isp_axi",
+ "u0_sft7110_noc_bus_clk_isp_axi";
resets = <&rstgen RSTN_U0_DOM_ISP_TOP_N>,
- <&rstgen RSTN_U0_DOM_ISP_TOP_AXI>;
- reset-names = "rst_isp_top_n", "rst_isp_top_axi";
+ <&rstgen RSTN_U0_DOM_ISP_TOP_AXI>,
+ <&rstgen RSTN_U0_NOC_BUS_ISP_AXI_N>;
+ reset-names = "rst_isp_top_n", "rst_isp_top_axi",
+ "rst_isp_noc_bus_n";
status = "disabled";
};
{
struct jh7110_clk_priv *priv;
unsigned int idx;
+ struct clk *clk_isp_noc_bus;
struct clk *clk_isp_2x;
struct clk *clk_isp_axi;
+ struct reset_control *rst_isp_noc_bus;
struct reset_control *rst_isp_n;
struct reset_control *rst_isp_axi;
int ret = 0;
starfive_power_domain_set(POWER_DOMAIN_ISP, 1);
+ clk_isp_noc_bus = devm_clk_get(priv->dev,
+ "u0_sft7110_noc_bus_clk_isp_axi");
+ if (!IS_ERR(clk_isp_noc_bus)){
+ ret = clk_prepare_enable(clk_isp_noc_bus);
+ if(ret){
+ dev_err(priv->dev, "clk_isp_noc_bus enable failed\n");
+ goto clk_noc_enable_failed;
+ }
+ }else{
+ dev_err(priv->dev, "clk_isp_noc_bus get failed\n");
+ return PTR_ERR(clk_isp_noc_bus);
+ }
+
+ rst_isp_noc_bus = devm_reset_control_get_exclusive(
+ priv->dev, "rst_isp_noc_bus_n");
+ if (!IS_ERR(rst_isp_noc_bus)) {
+ ret = reset_control_deassert(rst_isp_noc_bus);
+ if(ret){
+ dev_err(priv->dev, "rst_isp_noc_bus deassert failed.\n");
+ goto rst_noc_deassert_failed;
+ }
+ }else{
+ dev_err(priv->dev, "rst_isp_noc_bus get failed.\n");
+ ret = PTR_ERR(rst_isp_noc_bus);
+ goto rst_noc_get_failed;
+ }
+
clk_isp_2x = devm_clk_get(priv->dev,
"u0_dom_isp_top_clk_dom_isp_top_clk_ispcore_2x");
if (!IS_ERR(clk_isp_2x)){
ret = clk_prepare_enable(clk_isp_2x);
if(ret){
dev_err(priv->dev, "clk_isp_2x enable failed\n");
- return ret;
+ goto clk_2x_enable_failed;
}
}else{
dev_err(priv->dev, "clk_isp_2x get failed\n");
- return PTR_ERR(clk_isp_2x);
+ ret = PTR_ERR(clk_isp_2x);
+ goto clk_2x_get_failed;
}
clk_isp_axi = devm_clk_get(priv->dev,
ret = clk_prepare_enable(clk_isp_axi);
if(ret){
dev_err(priv->dev, "clk_isp_axi enable failed\n");
- return ret;
+ goto clk_axi_enable_failed;
}
}else{
dev_err(priv->dev, "clk_isp_axi get failed\n");
- return PTR_ERR(clk_isp_axi);
+ ret = PTR_ERR(clk_isp_axi);
+ goto clk_axi_get_failed;
}
rst_isp_n = devm_reset_control_get_exclusive(
ret = reset_control_deassert(rst_isp_n);
if(ret){
dev_err(priv->dev, "rst_isp_n deassert failed.\n");
- return ret;
+ goto rst_n_deassert_failed;
}
}else{
dev_err(priv->dev, "rst_isp_n get failed.\n");
- return PTR_ERR(rst_isp_n);
+ ret = PTR_ERR(rst_isp_n);
+ goto rst_n_get_failed;
}
rst_isp_axi = devm_reset_control_get_exclusive(
ret = reset_control_deassert(rst_isp_axi);
if(ret){
dev_err(priv->dev, "rst_isp_axi deassert failed.\n");
- return ret;
+ goto rst_axi_deassert_failed;
}
}else{
dev_err(priv->dev, "rst_isp_axi get failed.\n");
- return PTR_ERR(rst_isp_axi);
+ ret = PTR_ERR(rst_isp_axi);
+ goto rst_axi_get_failed;
}
priv->pll[PLL_OFI(JH7110_U3_PCLK_MUX_FUNC_PCLK)] =
if (ret)
return ret;
+ reset_control_put(rst_isp_axi);
+ reset_control_put(rst_isp_n);
+ reset_control_put(rst_isp_noc_bus);
+ devm_clk_put(priv->dev, clk_isp_axi);
+ devm_clk_put(priv->dev, clk_isp_2x);
+ devm_clk_put(priv->dev, clk_isp_noc_bus);
+
dev_info(&pdev->dev,"starfive JH7110 clk_isp init successfully.");
return 0;
+
+rst_axi_deassert_failed:
+ reset_control_put(rst_isp_axi);
+rst_axi_get_failed:
+ reset_control_assert(rst_isp_n);
+rst_n_deassert_failed:
+ reset_control_put(rst_isp_n);
+rst_n_get_failed:
+ clk_disable_unprepare(clk_isp_axi);
+clk_axi_enable_failed:
+ devm_clk_put(priv->dev, clk_isp_axi);
+clk_axi_get_failed:
+ clk_disable_unprepare(clk_isp_2x);
+clk_2x_enable_failed:
+ devm_clk_put(priv->dev, clk_isp_2x);
+clk_2x_get_failed:
+rst_noc_deassert_failed:
+ reset_control_put(rst_isp_noc_bus);
+rst_noc_get_failed:
+clk_noc_enable_failed:
+ devm_clk_put(priv->dev, clk_isp_noc_bus);
+
+ return ret;
+
}
static const struct of_device_id clk_starfive_jh7110_isp_match[] = {