Message ID | 20240513160324.3761564-1-marc.ferland@sonatest.com |
---|---|
State | New |
Headers | show |
Series | [v2] i2c: xiic: improve error message when transfer fails to start | expand |
On 5/13/24 18:03, marc.ferland@gmail.com wrote: > From: Marc Ferland <marc.ferland@sonatest.com> > > xiic_start_xfer can fail for different reasons: > > - EBUSY: bus is busy or i2c messages still in tx_msg or rx_msg > - ETIMEDOUT: timed-out trying to clear the RX fifo > - EINVAL: wrong clock settings > > Both EINVAL and ETIMEDOUT will currently print a specific error > message followed by a generic one, for example: > > Failed to clear rx fifo > Error xiic_start_xfer > > however EBUSY will simply output the generic message: > > Error xiic_start_xfer > > which is not really helpful. > > This commit adds a new error message when a busy condition is detected > and also removes the generic message since it does not provide any > relevant information to the user. > > Signed-off-by: Marc Ferland <marc.ferland@sonatest.com> > --- > Changes in v2: > - add a message where the error actually occurs (suggested by > Andi Shyti) > - remove the generic message completely (Andi Shyti) > > drivers/i2c/busses/i2c-xiic.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c > index b9ad935d7ff3..afb242be456d 100644 > --- a/drivers/i2c/busses/i2c-xiic.c > +++ b/drivers/i2c/busses/i2c-xiic.c > @@ -1114,8 +1114,11 @@ static int xiic_start_xfer(struct xiic_i2c *i2c, struct i2c_msg *msgs, int num) > mutex_lock(&i2c->lock); > > ret = xiic_busy(i2c); > - if (ret) > + if (ret) { > + dev_err(i2c->adap.dev.parent, > + "cannot start a transfer while busy\n"); > goto out; > + } > > i2c->tx_msg = msgs; > i2c->rx_msg = NULL; > @@ -1173,10 +1176,8 @@ static int xiic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) > return err; > > err = xiic_start_xfer(i2c, msgs, num); > - if (err < 0) { > - dev_err(adap->dev.parent, "Error xiic_start_xfer\n"); > + if (err < 0) > goto out; > - } > > err = wait_for_completion_timeout(&i2c->completion, XIIC_XFER_TIMEOUT); > mutex_lock(&i2c->lock); Acked-by: Michal Simek <michal.simek@amd.com> Thanks, Michal
diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c index b9ad935d7ff3..afb242be456d 100644 --- a/drivers/i2c/busses/i2c-xiic.c +++ b/drivers/i2c/busses/i2c-xiic.c @@ -1114,8 +1114,11 @@ static int xiic_start_xfer(struct xiic_i2c *i2c, struct i2c_msg *msgs, int num) mutex_lock(&i2c->lock); ret = xiic_busy(i2c); - if (ret) + if (ret) { + dev_err(i2c->adap.dev.parent, + "cannot start a transfer while busy\n"); goto out; + } i2c->tx_msg = msgs; i2c->rx_msg = NULL; @@ -1173,10 +1176,8 @@ static int xiic_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) return err; err = xiic_start_xfer(i2c, msgs, num); - if (err < 0) { - dev_err(adap->dev.parent, "Error xiic_start_xfer\n"); + if (err < 0) goto out; - } err = wait_for_completion_timeout(&i2c->completion, XIIC_XFER_TIMEOUT); mutex_lock(&i2c->lock);