On 1 October 2018 at 13:49, Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx> wrote: > There are platforms which don't provide input clock rate but provide > I2C timing parameters. Commit 3bd4f277274b ("i2c: designware: Call > i2c_dw_clk_rate() only once in i2c_dw_init_master()") causes needless > warning during probe on those platforms since i2c_dw_clk_rate(), which > causes the warning when input clock is unknown, is called even when > there is no need to calculate timing parameters. > > Fixes: 3bd4f277274b ("i2c: designware: Call i2c_dw_clk_rate() only once in i2c_dw_init_master()") > Reported-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> # 4.19 > Signed-off-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx> Tested-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> Thanks! > --- > for current 4.19-rc6. I Cc'ed stable just in case this doesn't hit the > v4.19. > --- > drivers/i2c/busses/i2c-designware-master.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c > index 94d94b4a9a0d..18cc324f3ca9 100644 > --- a/drivers/i2c/busses/i2c-designware-master.c > +++ b/drivers/i2c/busses/i2c-designware-master.c > @@ -34,11 +34,11 @@ static void i2c_dw_configure_fifo_master(struct dw_i2c_dev *dev) > > static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev) > { > - u32 ic_clk = i2c_dw_clk_rate(dev); > const char *mode_str, *fp_str = ""; > u32 comp_param1; > u32 sda_falling_time, scl_falling_time; > struct i2c_timings *t = &dev->timings; > + u32 ic_clk; > int ret; > > ret = i2c_dw_acquire_lock(dev); > @@ -53,6 +53,7 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev) > > /* Calculate SCL timing parameters for standard mode if not set */ > if (!dev->ss_hcnt || !dev->ss_lcnt) { > + ic_clk = i2c_dw_clk_rate(dev); > dev->ss_hcnt = > i2c_dw_scl_hcnt(ic_clk, > 4000, /* tHD;STA = tHIGH = 4.0 us */ > @@ -89,6 +90,7 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev) > * needed also in high speed mode. > */ > if (!dev->fs_hcnt || !dev->fs_lcnt) { > + ic_clk = i2c_dw_clk_rate(dev); > dev->fs_hcnt = > i2c_dw_scl_hcnt(ic_clk, > 600, /* tHD;STA = tHIGH = 0.6 us */ > -- > 2.19.0 >