* [PATCH] serial: mfd: fix bug in serial_hsu_remove()
@ 2010-09-06 12:41 Alan Cox
0 siblings, 0 replies; only message in thread
From: Alan Cox @ 2010-09-06 12:41 UTC (permalink / raw)
To: greg, linux-serial
From: Feng Tang <feng.tang@intel.com>
Medfield HSU driver deal with 4 pci devices(3 uart ports + 1 dma controller),
so in pci remove func, we need handle them differently
Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
---
drivers/serial/mfd.c | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/serial/mfd.c b/drivers/serial/mfd.c
index 5aa25e5..af83135 100644
--- a/drivers/serial/mfd.c
+++ b/drivers/serial/mfd.c
@@ -1429,7 +1429,6 @@ static void hsu_global_init(void)
}
phsu = hsu;
-
hsu_debugfs_init(hsu);
return;
@@ -1441,18 +1440,20 @@ err_free_region:
static void serial_hsu_remove(struct pci_dev *pdev)
{
- struct hsu_port *hsu;
- int i;
+ void *priv = pci_get_drvdata(pdev);
+ struct uart_hsu_port *up;
- hsu = pci_get_drvdata(pdev);
- if (!hsu)
+ if (!priv)
return;
- for (i = 0; i < 3; i++)
- uart_remove_one_port(&serial_hsu_reg, &hsu->port[i].port);
+ /* For port 0/1/2, priv is the address of uart_hsu_port */
+ if (pdev->device != 0x081E) {
+ up = priv;
+ uart_remove_one_port(&serial_hsu_reg, &up->port);
+ }
pci_set_drvdata(pdev, NULL);
- free_irq(hsu->irq, hsu);
+ free_irq(pdev->irq, priv);
pci_disable_device(pdev);
}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2010-09-06 13:23 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-06 12:41 [PATCH] serial: mfd: fix bug in serial_hsu_remove() Alan Cox
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).