i2c: rk3x: handle dynamic clock rate changes correctly
authorMax Schwarz <max.schwarz@online.de>
Thu, 20 Nov 2014 09:26:50 +0000 (10:26 +0100)
committerWolfram Sang <wsa@the-dreams.de>
Sun, 23 Nov 2014 16:27:46 +0000 (17:27 +0100)
commit249051f49907e7d147228a7d27a8ec37da1ea0fa
treea21bd2db97db21b85fe9614f6ea21f1e88b37331
parent727f9c2dad9dd3e9aff4f64e92df577f1409a768
i2c: rk3x: handle dynamic clock rate changes correctly

The i2c input clock can change dynamically, e.g. on the RK3066 where
pclk_i2c0 and pclk_i2c1 are connected to the armclk, which changes
rate on cpu frequency scaling.

Until now, we incorrectly called clk_get_rate() while holding the
i2c->lock in rk3x_i2c_xfer() to adapt to clock rate changes.
Thanks to Huang Tao for reporting this issue.

Do it properly now using the clk notifier framework. The callback
logic was taken from i2c-cadence.c.

Also rename all misleading "i2c_rate" variables to "clk_rate", as they
describe the *input* clk rate.

Signed-off-by: Max Schwarz <max.schwarz@online.de>
Tested-by: Doug Anderson <dianders@chromium.org> on RK3288
Reviewed-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-rk3x.c