linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] i801_smbus: clear SMBALERT status bit and disable SMBALERT interrupt
@ 2019-08-12  2:40 lingyxu
  2019-08-14 16:15 ` Wolfram Sang
  2019-08-28 13:58 ` Jean Delvare
  0 siblings, 2 replies; 9+ messages in thread
From: lingyxu @ 2019-08-12  2:40 UTC (permalink / raw)
  To: Jean Delvare
  Cc: linux-i2c, linux-kernel, Wladislav Wiebe, Krzysztof Adamski, Lingyan Xu

From: Lingyan Xu <lingyan.xu@nokia-sbell.com>

In current i801 driver, SMBALERT interrupt is allowed
(Slave Command Register bit2 is 0).
But these is no handler for SMBALERT interrupt in i801_isr,
if there is SMBALERT interrupt asserted and deasserted,
i801 will have an irq flood for the related status bit is setted.

So SMBALERT interrupt handler is needed, and also, SMBALERT interrupt
will be generated from time to time if slave chip have some fault.
So disable SMBALERT interrupt is also needed.

About the solution,
please see http://www.farnell.com/datasheets/1581967.pdf
Page632 P640 for more.

Signed-off-by: Lingyan Xu <lingyan.xu@nokia-sbell.com>
---
 drivers/i2c/busses/i2c-i801.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index f295693..033bafe 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -661,9 +661,11 @@ static irqreturn_t i801_isr(int irq, void *dev_id)
 	 * Clear irq sources and report transaction result.
 	 * ->status must be cleared before the next transaction is started.
 	 */
+
+	outb_p(status, SMBHSTSTS(priv));
+
 	status &= SMBHSTSTS_INTR | STATUS_ERROR_FLAGS;
 	if (status) {
-		outb_p(status, SMBHSTSTS(priv));
 		priv->status = status;
 		wake_up(&priv->waitq);
 	}
@@ -1810,6 +1812,9 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	/* Default timeout in interrupt mode: 200 ms */
 	priv->adapter.timeout = HZ / 5;
 
+	/* Disable SMBALERT interrupt */
+	outb_p(inb_p(SMBSLVCMD(priv)) | BIT(2), SMBSLVCMD(priv));
+
 	if (dev->irq == IRQ_NOTCONNECTED)
 		priv->features &= ~FEATURE_IRQ;
 
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-09-17 11:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-12  2:40 [PATCH] i801_smbus: clear SMBALERT status bit and disable SMBALERT interrupt lingyxu
2019-08-14 16:15 ` Wolfram Sang
2019-08-28 13:58 ` Jean Delvare
2019-09-03  2:15   ` Xu, Lingyan (NSB - CN/Hangzhou)
2019-09-05  9:15     ` Xu, Lingyan (NSB - CN/Hangzhou)
2019-09-05 12:57     ` Jean Delvare
2019-09-16  8:52       ` Sverdlin, Alexander (Nokia - DE/Ulm)
2019-09-16  9:29       ` Sverdlin, Alexander (Nokia - DE/Ulm)
2019-09-17 11:37       ` Sverdlin, Alexander (Nokia - DE/Ulm)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).