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")
Signed-off-by: Junhui Liu <[email protected]>
---
 drivers/i2c/k1_i2c.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/i2c/k1_i2c.c b/drivers/i2c/k1_i2c.c
index a08ff15803d0..2c7a1e0d3775 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;
 }
 

-- 
2.55.0

Reply via email to