Bug about changing I2C clock rate at runtime

There is a bug that causes the following error when in fact the clock rate has been set successfully.

Output of dmesg:
Screenshot from 2024-12-25 11-11-57

Fix:

diff --git a/kernel/kernel-5.10/drivers/i2c/busses/i2c-tegra.c b/kernel/kernel-5.10/drivers/i2c/busses/i2c-tegra.c
index 22672c53c..092b35ae7 100644
--- a/kernel/kernel-5.10/drivers/i2c/busses/i2c-tegra.c
+++ b/kernel/kernel-5.10/drivers/i2c/busses/i2c-tegra.c
@@ -1738,12 +1738,12 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
 
        if (adap->bus_clk_rate != i2c_dev->bus_clk_rate) {
                i2c_dev->bus_clk_rate = adap->bus_clk_rate;
-                tegra_i2c_change_clock_rate(i2c_dev);
-                if (ret) {
-                        dev_err(i2c_dev->dev,
-                                        "failed changing clock rate: %d\n", ret);
-                        return ret;
-                }
+               ret = tegra_i2c_change_clock_rate(i2c_dev);
+               if (ret) {
+                       dev_err(i2c_dev->dev,
+                                       "failed changing clock rate: %d\n", ret);
+                       return ret;
+               }
        }

Edit:
Should puts i2c_dev->bus_clk_rate = adap->bus_clk_rate; before ret = tegra_i2c_change_clock_rate(i2c_dev);

And should we save the old clock rate so we can restore it if failed to change?

Thanks for the reporting.
Will check it.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.