usb: gadget: pch_udc: Initialize device pointer before use
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 23 Mar 2021 15:36:25 +0000 (17:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 23 Mar 2021 15:53:30 +0000 (16:53 +0100)
During conversion to use GPIO descriptors the device pointer,
which is applied to devm_gpiod_get(), is not yet initialized.

Move initialization in the ->probe() in order to have it set before use.

Fixes: e20849a8c883 ("usb: gadget: pch_udc: Convert to use GPIO descriptors")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20210323153626.54908-6-andriy.shevchenko@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/udc/pch_udc.c

index 58cea8d..07199fd 100644 (file)
@@ -1370,6 +1370,7 @@ static irqreturn_t pch_vbus_gpio_irq(int irq, void *data)
  */
 static int pch_vbus_gpio_init(struct pch_udc_dev *dev)
 {
+       struct device *d = &dev->pdev->dev;
        int err;
        int irq_num = 0;
        struct gpio_desc *gpiod;
@@ -1378,7 +1379,7 @@ static int pch_vbus_gpio_init(struct pch_udc_dev *dev)
        dev->vbus_gpio.intr = 0;
 
        /* Retrieve the GPIO line from the USB gadget device */
-       gpiod = devm_gpiod_get(dev->gadget.dev.parent, NULL, GPIOD_IN);
+       gpiod = devm_gpiod_get(d, NULL, GPIOD_IN);
        if (IS_ERR(gpiod))
                return PTR_ERR(gpiod);
        gpiod_set_consumer_name(gpiod, "pch_vbus");
@@ -3081,6 +3082,7 @@ static int pch_udc_probe(struct pci_dev *pdev,
        if (retval)
                return retval;
 
+       dev->pdev = pdev;
        pci_set_drvdata(pdev, dev);
 
        /* Determine BAR based on PCI ID */
@@ -3122,7 +3124,6 @@ static int pch_udc_probe(struct pci_dev *pdev,
 
        /* device struct setup */
        spin_lock_init(&dev->lock);
-       dev->pdev = pdev;
        dev->gadget.ops = &pch_udc_ops;
 
        retval = init_dma_pools(dev);