Hi!
Grygorii.Strashko@... <grygorii.strashko@...> writes:
> > +/*
> > + * Wait until specific bit in status register has particular value
> > + * Function returns 0 if condition was met,
> > + * -ETIMEDOUT in case of timeout.
> > + */
> > +static int i2c_davinci_wait_status_change(struct davinci_i2c_dev *dev,
u16 mask,
> > + u16 val)
>
> do we really need it as separate function? (even if it looks good:)
Initially I had a patch for "recover" function also, but I've dropped it and
I'm going to test your series. It might be re-used in case if we want to
wait for something in the recover...
> > +{
> > + unsigned long timeout = jiffies + dev->adapter.timeout;
> > +
> > + while ((davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & mask) !=
val) {
> > + if (time_after(jiffies, timeout))
> > + return -ETIMEDOUT;
> > + set_current_state(TASK_UNINTERRUPTIBLE);
> > + schedule_timeout(1);
>
> schedule_timeout_uninterruptible()
Will do in v2...
[...]
> > + if (i2c_davinci_wait_status_change(dev, DAVINCI_I2C_STR_BB, 0)) {
> > + dev_warn(dev->dev, "timeout waiting for bus ready\n");
> > + davinci_i2c_recover_bus(dev);
> > + i2c_davinci_init(dev);
> > + /*
> > + * the bus should not be busy after init, otherwise
something
> > + * is badly broken
> > + */
>
> I think you should recheck BB and return error if it's still detected.
Good idea! Will do in v2...
> > }
> >
> > return 0;
> > <at> <at> -449,7 +456,7 <at> <at> i2c_davinci_xfer(struct
i2c_adapter *adap, struct i2c_msg msgs[], int num)
> >
> > dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num);
> >
> > - ret = i2c_davinci_wait_bus_not_busy(dev, 1);
> > + ret = i2c_davinci_wait_bus_not_busy(dev);
> > if (ret < 0) {
> > dev_warn(dev->dev, "timeout waiting for bus ready\n");
> > return ret;
Alex.
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html