i2c: core: remove level of indentation in i2c_transfer

Using the common kernel pattern to bail out at the beginning if some
conditions are not met, we can save a level of indentation. No
functional change.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Acked-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
Wolfram Sang 2018-09-20 18:14:21 +02:00 committed by Wolfram Sang
parent a7163dc213
commit cc52612ec0
1 changed files with 16 additions and 17 deletions

View File

@ -1922,6 +1922,11 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
{ {
int ret; int ret;
if (!adap->algo->master_xfer) {
dev_dbg(&adap->dev, "I2C level transfers not supported\n");
return -EOPNOTSUPP;
}
/* REVISIT the fault reporting model here is weak: /* REVISIT the fault reporting model here is weak:
* *
* - When we get an error after receiving N bytes from a slave, * - When we get an error after receiving N bytes from a slave,
@ -1938,25 +1943,19 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
* one (discarding status on the second message) or errno * one (discarding status on the second message) or errno
* (discarding status on the first one). * (discarding status on the first one).
*/ */
if (in_atomic() || irqs_disabled()) {
if (adap->algo->master_xfer) { ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT);
if (in_atomic() || irqs_disabled()) { if (!ret)
ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT); /* I2C activity is ongoing. */
if (!ret) return -EAGAIN;
/* I2C activity is ongoing. */
return -EAGAIN;
} else {
i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
}
ret = __i2c_transfer(adap, msgs, num);
i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
return ret;
} else { } else {
dev_dbg(&adap->dev, "I2C level transfers not supported\n"); i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
return -EOPNOTSUPP;
} }
ret = __i2c_transfer(adap, msgs, num);
i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
return ret;
} }
EXPORT_SYMBOL(i2c_transfer); EXPORT_SYMBOL(i2c_transfer);