static int i2c_ssbi_transfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { int ret = 0; int rem = num; unsigned long flags; struct i2c_ssbi_dev *ssbi = i2c_get_adapdata(adap); remote_spin_lock_irqsave(&ssbi->rspin_lock, flags); while (rem) { if (msgs->flags & I2C_M_RD) { ret = i2c_ssbi_read_bytes(ssbi, msgs); if (ret) goto transfer_failed; } else { ret = i2c_ssbi_write_bytes(ssbi, msgs); if (ret) goto transfer_failed; } msgs++; rem--; } remote_spin_unlock_irqrestore(&ssbi->rspin_lock, flags); return num; transfer_failed: remote_spin_unlock_irqrestore(&ssbi->rspin_lock, flags); return ret; }
static int i2c_ssbi_transfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num) { int ret = 0; int rem = num; struct i2c_ssbi_dev *ssbi = i2c_get_adapdata(adap); if (ssbi->suspended) return -EBUSY; while (rem) { if (msgs->flags & I2C_M_RD) { ret = i2c_ssbi_read_bytes(ssbi, msgs); if (ret) goto transfer_failed; } else { ret = i2c_ssbi_write_bytes(ssbi, msgs); if (ret) goto transfer_failed; } msgs++; rem--; } return num; transfer_failed: return ret; }