| From 3ba76256fc4e2a0d7fb26cc95459041ea0e88972 Mon Sep 17 00:00:00 2001 |
| From: Jun Li <jun.li@nxp.com> |
| Date: Mon, 20 Jan 2020 06:43:19 +0000 |
| Subject: usb: typec: tcpci: mask event interrupts when remove driver |
| |
| From: Jun Li <jun.li@nxp.com> |
| |
| commit 3ba76256fc4e2a0d7fb26cc95459041ea0e88972 upstream. |
| |
| This is to prevent any possible events generated while unregister |
| tpcm port. |
| |
| Fixes: 74e656d6b055 ("staging: typec: Type-C Port Controller Interface driver (tcpci)") |
| Signed-off-by: Li Jun <jun.li@nxp.com> |
| Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> |
| Reviewed-by: Guenter Roeck <linux@roeck-us.net> |
| Link: https://lore.kernel.org/r/1579502333-4145-1-git-send-email-jun.li@nxp.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/typec/tcpm/tcpci.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/drivers/usb/typec/tcpm/tcpci.c |
| +++ b/drivers/usb/typec/tcpm/tcpci.c |
| @@ -591,6 +591,12 @@ static int tcpci_probe(struct i2c_client |
| static int tcpci_remove(struct i2c_client *client) |
| { |
| struct tcpci_chip *chip = i2c_get_clientdata(client); |
| + int err; |
| + |
| + /* Disable chip interrupts before unregistering port */ |
| + err = tcpci_write16(chip->tcpci, TCPC_ALERT_MASK, 0); |
| + if (err < 0) |
| + return err; |
| |
| tcpci_unregister_port(chip->tcpci); |
| |