diff options
| author | Junhui Liu <junhui.liu@pigmoral.tech> | 2026-08-15 11:40:21 +0800 |
|---|---|---|
| committer | Heiko Schocher <hs@nabladev.com> | 2026-08-25 08:22:24 +0200 |
| commit | cfe0012e12d7e3889b5d245f14b4ed3bf73f033a (patch) | |
| tree | f294978c1a4eb0da096b29d8c36e49764b1d7b0d | |
| parent | 2d379a529c257606946831a6dac1c37de6a3f8c0 (diff) | |
| download | u-boot-cfe0012e12d7e3889b5d245f14b4ed3bf73f033a.tar.gz u-boot-cfe0012e12d7e3889b5d245f14b4ed3bf73f033a.zip | |
i2c: k1: fix wrong bus speed setting
The controller bus mode should be selected according to the requested
I2C bus speed. However, the driver currently passes the functional clock
rate to k1_i2c_set_bus_speed(), so the selected mode does not reflect
the requested bus speed.
Fix this by reading the clock-frequency property from the Device Tree,
defaulting to standard speed, and drop the unused clk_rate field.
Fixes: 271546fb8e54 ("i2c: k1: add I2C driver support")
Reviewed-by: Heiko Schocher <hs@nabladev.com>
Reviewed-by: Yao Zi <me@ziyao.cc>
Signed-off-by: Junhui Liu <junhui.liu@pigmoral.tech>
| -rw-r--r-- | drivers/i2c/k1_i2c.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/i2c/k1_i2c.c b/drivers/i2c/k1_i2c.c index a08ff15803d..2c7a1e0d377 100644 --- a/drivers/i2c/k1_i2c.c +++ b/drivers/i2c/k1_i2c.c @@ -52,7 +52,6 @@ struct k1_i2c_priv { int id; void __iomem *base; struct clk clk; - u32 clk_rate; }; /* @@ -466,6 +465,7 @@ static int k1_i2c_probe(struct udevice *bus) { struct k1_i2c_priv *priv = dev_get_priv(bus); struct reset_ctl reset; + u32 speed; int ret; priv->id = dev_seq(bus); @@ -496,10 +496,13 @@ static int k1_i2c_probe(struct udevice *bus) debug("%s: failed to enable clock\n", __func__); return ret; } - priv->clk_rate = clk_get_rate(&priv->clk); priv->base = (void *)devfdt_get_addr_ptr(bus); - k1_i2c_set_bus_speed(bus, priv->clk_rate); + + speed = dev_read_u32_default(bus, "clock-frequency", + I2C_SPEED_STANDARD_RATE); + k1_i2c_set_bus_speed(bus, speed); + return 0; } |
