Message ID | 20200903005300.7894-6-digetx@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | Improvements for Tegra I2C driver | expand |
On Thu, Sep 3, 2020 at 3:53 AM Dmitry Osipenko <digetx@gmail.com> wrote: > > Use a single reset_control_reset() instead of assert/deasset couple in > order to make code cleaner a tad. > Note that the reset_control_reset() > uses 1 microsecond delay instead of 2 that was used previously, but this > shouldn't matter. What datasheet says about this delay? > In addition don't ignore potential error of the reset. > > Reviewed-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> > Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
03.09.2020 14:11, Andy Shevchenko пишет: > On Thu, Sep 3, 2020 at 3:53 AM Dmitry Osipenko <digetx@gmail.com> wrote: >> >> Use a single reset_control_reset() instead of assert/deasset couple in >> order to make code cleaner a tad. > >> Note that the reset_control_reset() >> uses 1 microsecond delay instead of 2 that was used previously, but this >> shouldn't matter. > > What datasheet says about this delay? The public datasheet doesn't say anything specific about the I2C controller reset time. IIUC, controller logic runs at 200/400 MHz, so 1us should be enough for the reset. I'm sure that somebody from NVIDIA should know the exact answer and will correct me if I'm wrong. I CC'd Peter De Schrijver who is a maintainer of the Tegra's clock-and-reset driver.
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index b912a7153e3b..22f6020e79aa 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -800,9 +800,9 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev, bool clk_reinit) u32 tsu_thd; u8 tlow, thigh; - reset_control_assert(i2c_dev->rst); - udelay(2); - reset_control_deassert(i2c_dev->rst); + err = reset_control_reset(i2c_dev->rst); + if (WARN_ON_ONCE(err)) + return err; if (i2c_dev->is_dvc) tegra_dvc_init(i2c_dev);