]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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>
Fri, 14 May 2021 08:49:40 +0000 (10:49 +0200)
[ Upstream commit 971d080212be4ce2b91047d25a657f46d3e39635 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/gadget/udc/pch_udc.c

index 29e89ed6aad5549b6f26988843c5d3e38b9eab40..a39122f01cdbef7d087abba4cf0d27c846a6473c 100644 (file)
@@ -1369,6 +1369,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;
@@ -1377,7 +1378,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");
@@ -3080,6 +3081,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 */
@@ -3121,7 +3123,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);