On Sun, Jul 1, 2018 at 11:41 AM, Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> wrote: > On Sun, Jul 01, 2018 at 01:43:33PM +0530, Manivannan Sadhasivam wrote: >> On Sun, Jul 01, 2018 at 12:11:00AM +0300, Andy Shevchenko wrote: >> > On Sat, Jun 30, 2018 at 4:33 PM, Manivannan Sadhasivam >> > <manivannan.sadhasivam@xxxxxxxxxx> wrote: >> > > Add Actions Semiconductor Owl family S900 I2C driver. >> > > +static int owl_i2c_reset(struct owl_i2c_dev *i2c_dev) >> > > +{ >> > >> > > + mdelay(1); >> > >> > But now, since it's not used in atomic context, we may switch to >> > usleep_range() / msleep() instead. >> > >> >> okay, will use msleep() >> > > Just realised, I have to use spinlock for the entire owl_i2c_master_xfer > function, so can't use sleep* for delay. > >> > > + owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_CTL, >> > > + OWL_I2C_CTL_EN, true); >> > > + >> > >> > > + /* Wait 50ms for FIFO reset complete */ >> > > + do { >> > >> > > + mdelay(1); >> > >> > Especially in this case it's very important. >> > >> >> Okay. > > Same here, but I'm not sure about the latency. What is your suggestion? Look at other i2c bus drivers, check with data sheet you have, try to refactor / redesign code that wouldn't need to sleep so long in atomic context. -- With Best Regards, Andy Shevchenko