diff options
-rw-r--r-- | drivers/clk/starfive/clk-jh7110.c | 18 | ||||
-rw-r--r-- | drivers/i2c/designware_i2c.c | 14 | ||||
-rw-r--r-- | drivers/i2c/designware_i2c.h | 1 |
3 files changed, 28 insertions, 5 deletions
diff --git a/drivers/clk/starfive/clk-jh7110.c b/drivers/clk/starfive/clk-jh7110.c index ec14a91f68..581d8b62cd 100644 --- a/drivers/clk/starfive/clk-jh7110.c +++ b/drivers/clk/starfive/clk-jh7110.c @@ -690,6 +690,24 @@ static int jh7110_clk_init(struct udevice *dev) "u0_dom_vout_top_clk_mipiphy_ref", "osc", SYS_OFFSET(JH7110_MCLK_INNER), 2)); + /*i2c5*/ + clk_dm(JH7110_I2C5_CLK_APB, + starfive_clk_gate(priv->sys, + "u5_dw_i2c_clk_apb", "apb0", + SYS_OFFSET(JH7110_I2C5_CLK_APB))); + clk_dm(JH7110_I2C5_CLK_CORE, + starfive_clk_fix_factor(priv->sys, + "u5_dw_i2c_clk_core", "u5_dw_i2c_clk_apb", 1, 1)); + + /*i2c2*/ + clk_dm(JH7110_I2C2_CLK_APB, + starfive_clk_gate(priv->sys, + "u2_dw_i2c_clk_apb", "apb0", + SYS_OFFSET(JH7110_I2C2_CLK_APB))); + clk_dm(JH7110_I2C2_CLK_CORE, + starfive_clk_fix_factor(priv->sys, + "u2_dw_i2c_clk_core", "u2_dw_i2c_clk_apb", 1, 1)); + return 0; } diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index e57eed0f6c..c1b3df9600 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -775,10 +775,14 @@ int designware_i2c_of_to_plat(struct udevice *bus) if (ret) return ret; - ret = clk_enable(&priv->clk); + ret = clk_get_bulk(bus, &priv->clks); + if (ret) + return ret; + + ret = clk_enable_bulk(&priv->clks); if (ret && ret != -ENOSYS && ret != -ENOTSUPP) { - clk_free(&priv->clk); - dev_err(bus, "failed to enable clock\n"); + clk_release_bulk(&priv->clks); + dev_err(bus, "failed to enable bulk clock\n"); return ret; } #endif @@ -809,8 +813,8 @@ int designware_i2c_remove(struct udevice *dev) struct dw_i2c *priv = dev_get_priv(dev); #if CONFIG_IS_ENABLED(CLK) - clk_disable(&priv->clk); - clk_free(&priv->clk); + clk_disable_bulk(&priv->clks); + clk_release_bulk(&priv->clks); #endif return reset_release_bulk(&priv->resets); diff --git a/drivers/i2c/designware_i2c.h b/drivers/i2c/designware_i2c.h index 9b2349a0a2..d5aaef1d79 100644 --- a/drivers/i2c/designware_i2c.h +++ b/drivers/i2c/designware_i2c.h @@ -204,6 +204,7 @@ struct dw_i2c { bool has_spk_cnt; #if CONFIG_IS_ENABLED(CLK) struct clk clk; + struct clk_bulk clks; #endif struct dw_i2c_speed_config config; }; |