diff options
Diffstat (limited to 'drivers/serial/mfd.c')
| -rw-r--r-- | drivers/serial/mfd.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/serial/mfd.c b/drivers/serial/mfd.c index 6703f3e802a..dc0967fb9ea 100644 --- a/drivers/serial/mfd.c +++ b/drivers/serial/mfd.c @@ -27,6 +27,7 @@  #include <linux/init.h>  #include <linux/console.h>  #include <linux/sysrq.h> +#include <linux/slab.h>  #include <linux/serial_reg.h>  #include <linux/circ_buf.h>  #include <linux/delay.h> @@ -1425,7 +1426,6 @@ static void hsu_global_init(void)  	}  	phsu = hsu; -  	hsu_debugfs_init(hsu);  	return; @@ -1437,18 +1437,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);  }  |