gpio-exar/8250-exar: Fix passing in of parent PCI device
authorJan Kiszka <jan.kiszka@siemens.com>
Fri, 9 Jun 2017 18:33:10 +0000 (20:33 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 20 Jun 2017 08:12:39 +0000 (10:12 +0200)
This fixes reloading of the GPIO driver for the same platform device
instance as created by the exar UART driver: First of all, the driver
sets drvdata to its own value during probing and does not restore the
original value on exit. But this won't help anyway as the core clears
drvdata after the driver left.

Set the platform device parent instead.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-exar.c
drivers/tty/serial/8250/8250_exar.c

index 08107677121708b806bf4cbe80f5e84392efa0e5..85bf031d9772f2908ee7f19f58cb5ab899055717 100644 (file)
@@ -119,7 +119,7 @@ static int exar_direction_input(struct gpio_chip *chip, unsigned int offset)
 
 static int gpio_exar_probe(struct platform_device *pdev)
 {
-       struct pci_dev *pcidev = platform_get_drvdata(pdev);
+       struct pci_dev *pcidev = to_pci_dev(pdev->dev.parent);
        struct exar_gpio_chip *exar_gpio;
        void __iomem *p;
        int index, ret;
index 1270ff163f637bf5c61f7cbf3ad3ff51c69366b9..2adc0f1a2196f339c121cad9b3b8a2ce891a3203 100644 (file)
@@ -196,7 +196,8 @@ xr17v35x_register_gpio(struct pci_dev *pcidev)
        if (!pdev)
                return NULL;
 
-       platform_set_drvdata(pdev, pcidev);
+       pdev->dev.parent = &pcidev->dev;
+
        if (platform_device_add(pdev) < 0) {
                platform_device_put(pdev);
                return NULL;