Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da9c99fc authored by Arnaud Patard's avatar Arnaud Patard Committed by Ben Dooks
Browse files

i2c-imx: fix error handling



- Return -ETIMEDOUT on bus busy error
- Fix timeout test "time_after(jiffies, orig_jiffies + HZ / 1000)" :
  By default, HZ=100 on arm. This means that this test has no chances to
  work and may result in a dead loop. Set timeout to 500ms.
- Don't try to send a new message if we failed to transmit
  previous one. This was preventing to recover from error on my system

Signed-off-by: default avatarArnaud Patard <apatard@mandriva.com>
Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent 01bf0b64
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -146,10 +146,10 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy)
				"<%s> I2C Interrupted\n", __func__);
			return -EINTR;
		}
		if (time_after(jiffies, orig_jiffies + HZ / 1000)) {
		if (time_after(jiffies, orig_jiffies + msecs_to_jiffies(500))) {
			dev_dbg(&i2c_imx->adapter.dev,
				"<%s> I2C bus is busy\n", __func__);
			return -EIO;
			return -ETIMEDOUT;
		}
		schedule();
	}
@@ -444,6 +444,8 @@ static int i2c_imx_xfer(struct i2c_adapter *adapter,
			result = i2c_imx_read(i2c_imx, &msgs[i]);
		else
			result = i2c_imx_write(i2c_imx, &msgs[i]);
		if (result)
			goto fail0;
	}

fail0: