Bläddra i källkod

i2c:desigware-snps: add i2c clock config

add clock config for i2c2 and i2c5
update the i2c driver clock config

Signed-off-by:keith.zhao<keith.zhao@statfivetech.com>
keith.zhao 1 år sedan
förälder
incheckning
83dd874556
3 ändrade filer med 28 tillägg och 5 borttagningar
  1. 18 0
      drivers/clk/starfive/clk-jh7110.c
  2. 9 5
      drivers/i2c/designware_i2c.c
  3. 1 0
      drivers/i2c/designware_i2c.h

+ 18 - 0
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;
 }
 

+ 9 - 5
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);

+ 1 - 0
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;
 };