Skip to contentSkip to conversation

i2c: meson: Fix wrong speed use from probe

PATCH Applied Lucas Tanure 3 participants 3 messages Mar 1, 2022 – Mar 19, 2022

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 i2c: meson: Fix wrong speed use from probe

Having meson_i2c_set_clk_div after i2c_add_adapter causes issues for client drivers that try to use the bus before the requested speed is applied.

The bus can be used just after i2c_add_adapter, so move i2c_add_adapter to the final step as meson_i2c_set_clk_div needs to be called before the bus is used.

---
 drivers/i2c/busses/i2c-meson.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/i2c/busses/i2c-meson.c +6 -6
index ef73a42577cc..07eb819072c4 100644
@@ -465,18 +465,18 @@ static int meson_i2c_probe(struct platform_device *pdev)
 	 */
 	meson_i2c_set_mask(i2c, REG_CTRL, REG_CTRL_START, 0);
 
-	ret = i2c_add_adapter(&i2c->adap);
-	if (ret < 0) {
-		clk_disable_unprepare(i2c->clk);
-		return ret;
-	}
-
 	/* Disable filtering */
 	meson_i2c_set_mask(i2c, REG_SLAVE_ADDR,
 			   REG_SLV_SDA_FILTER | REG_SLV_SCL_FILTER, 0);
 
 	meson_i2c_set_clk_div(i2c, timings.bus_freq_hz);
 
+	ret = i2c_add_adapter(&i2c->adap);
+	if (ret < 0) {
+		clk_disable_unprepare(i2c->clk);
+		return ret;
+	}
+
 	return 0;
 }
 
Signature · 1 line
2.35.1
Reviewed-by on v1 1/1
#1 lore raw
Quoted 33 lines · Lucas Tanure

Having meson_i2c_set_clk_div after i2c_add_adapter causes issues for client drivers that try to use the bus before the requested speed is applied.

The bus can be used just after i2c_add_adapter, so move i2c_add_adapter to the final step as meson_i2c_set_clk_div needs to be called before the bus is used.

---
  drivers/i2c/busses/i2c-meson.c | 12 ++++++------
  1 file changed, 6 insertions(+), 6 deletions(-)
drivers/i2c/busses/i2c-meson.c +0 -6
index ef73a42577cc..07eb819072c4 100644
@@ -465,18 +465,18 @@ static int meson_i2c_probe(struct platform_device *pdev)
  	 */
  	meson_i2c_set_mask(i2c, REG_CTRL, REG_CTRL_START, 0);
 
-	ret = i2c_add_adapter(&i2c->adap);
-	if (ret < 0) {
-		clk_disable_unprepare(i2c->clk);
-		return ret;
-	}
-
  	/* Disable filtering */
  	meson_i2c_set_mask(i2c, REG_SLAVE_ADDR,
  			   REG_SLV_SDA_FILTER | REG_SLV_SCL_FILTER, 0);
 
  	meson_i2c_set_clk_div(i2c, timings.bus_freq_hz);

drivers/i2c/busses/i2c-meson.c static int meson_i2c_probe(struct platform_device *pdev) · line 482

Quoted 10 lines
drivers/i2c/busses/i2c-meson.c +6 -0
 
+	ret = i2c_add_adapter(&i2c->adap);
+	if (ret < 0) {
+		clk_disable_unprepare(i2c->clk);
+		return ret;
+	}
+
  	return 0;
  }
 
Applied
#2 lore raw
In reply to Lucas Tanure
Quoted 10 lines · Lucas Tanure

Having meson_i2c_set_clk_div after i2c_add_adapter causes issues for client drivers that try to use the bus before the requested speed is applied.

The bus can be used just after i2c_add_adapter, so move i2c_add_adapter to the final step as meson_i2c_set_clk_div needs to be called before the bus is used.

Applied to for-next with a Fixes tag added, thanks!