mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
i2c: i801: Don't clear status flags twice in interrupt mode
In interrupt mode we clear the status flags twice, in the interrupt handler and in i801_check_post(). Remove clearing the status flags from i801_check_post() and handle polling mode by using the SMBus unlocking write to also clear the status flags if still set. To be precise: One could still argue that the status flags are cleared twice in interrupt mode, but it comes for free. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Jean Delvare <jdelvare@suse.de> Tested-by: Jean Delvare <jdelvare@suse.de> Signed-off-by: Wolfram Sang <wsa@kernel.org>
This commit is contained in:
parent
8c7a89678f
commit
4f7275fc7e
|
|
@ -356,11 +356,6 @@ static int i801_check_pre(struct i801_priv *priv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the status register to an error code, and clear it.
|
||||
* Note that status only contains the bits we want to clear, not the
|
||||
* actual register value.
|
||||
*/
|
||||
static int i801_check_post(struct i801_priv *priv, int status)
|
||||
{
|
||||
int result = 0;
|
||||
|
|
@ -385,7 +380,6 @@ static int i801_check_post(struct i801_priv *priv, int status)
|
|||
!(status & SMBHSTSTS_FAILED))
|
||||
dev_err(&priv->pci_dev->dev,
|
||||
"Failed terminating the transaction\n");
|
||||
outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
|
|
@ -424,9 +418,6 @@ static int i801_check_post(struct i801_priv *priv, int status)
|
|||
dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
|
||||
}
|
||||
|
||||
/* Clear status flags except BYTE_DONE, to be cleared by caller */
|
||||
outb_p(status, SMBHSTSTS(priv));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -923,8 +914,11 @@ static s32 i801_access(struct i2c_adapter *adap, u16 addr,
|
|||
}
|
||||
|
||||
out:
|
||||
/* Unlock the SMBus device for use by BIOS/ACPI */
|
||||
outb_p(SMBHSTSTS_INUSE_STS, SMBHSTSTS(priv));
|
||||
/*
|
||||
* Unlock the SMBus device for use by BIOS/ACPI,
|
||||
* and clear status flags if not done already.
|
||||
*/
|
||||
outb_p(SMBHSTSTS_INUSE_STS | STATUS_FLAGS, SMBHSTSTS(priv));
|
||||
|
||||
pm_runtime_mark_last_busy(&priv->pci_dev->dev);
|
||||
pm_runtime_put_autosuspend(&priv->pci_dev->dev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user