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

Commit be8a1f7c authored by Olof Johansson's avatar Olof Johansson Committed by Jean Delvare
Browse files

i2c-pasemi: Fix NACK detection



Turns out we don't actually check the status to see if there was a
device out there to talk to, just if we had a timeout when doing so.

Add the proper check, so we don't falsly think there are devices
on the bus that are not there, etc.

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
parent ff23f3ea
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ struct pasemi_smbus {
#define MRXFIFO_DATA_M	0x000000ff
#define MRXFIFO_DATA_M	0x000000ff


#define SMSTA_XEN	0x08000000
#define SMSTA_XEN	0x08000000
#define SMSTA_MTN	0x00200000


#define CTL_MRR		0x00000400
#define CTL_MRR		0x00000400
#define CTL_MTR		0x00000200
#define CTL_MTR		0x00000200
@@ -98,6 +99,10 @@ static unsigned int pasemi_smb_waitready(struct pasemi_smbus *smbus)
		status = reg_read(smbus, REG_SMSTA);
		status = reg_read(smbus, REG_SMSTA);
	}
	}


	/* Got NACK? */
	if (status & SMSTA_MTN)
		return -ENXIO;

	if (timeout < 0) {
	if (timeout < 0) {
		dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status);
		dev_warn(&smbus->dev->dev, "Timeout, status 0x%08x\n", status);
		reg_write(smbus, REG_SMSTA, status);
		reg_write(smbus, REG_SMSTA, status);