Patch "USB: bcma: Make GPIO explicitly optional" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    USB: bcma: Make GPIO explicitly optional

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     usb-bcma-make-gpio-explicitly-optional.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit fc6503b10494eb9d7c522ee466f06a34e9868e76
Author: Linus Walleij <linus.walleij@xxxxxxxxxx>
Date:   Mon Nov 7 10:07:53 2022 +0100

    USB: bcma: Make GPIO explicitly optional
    
    [ Upstream commit cd136706b4f925aa5d316642543babac90d45910 ]
    
    What the code does is to not check the return value from
    devm_gpiod_get() and then avoid using an erroneous GPIO descriptor
    with IS_ERR_OR_NULL().
    
    This will miss real errors from the GPIO core that should not be
    ignored, such as probe deferral.
    
    Instead request the GPIO as explicitly optional, which means that
    if it doesn't exist, the descriptor returned will be NULL.
    
    Then we can add error handling and also avoid just doing this on
    the device tree path, and simplify the site where the optional
    GPIO descriptor is used.
    
    There were some problems with cleaning up this GPIO descriptor
    use in the past, but this is the proper way to deal with it.
    
    Cc: Rafał Miłecki <rafal@xxxxxxxxxx>
    Cc: Chuhong Yuan <hslester96@xxxxxxxxx>
    Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
    Cc: stable <stable@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221107090753.1404679-1-linus.walleij@xxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
index 2400a826397a..d8f2af8fb89d 100644
--- a/drivers/usb/host/bcma-hcd.c
+++ b/drivers/usb/host/bcma-hcd.c
@@ -285,7 +285,7 @@ static void bcma_hci_platform_power_gpio(struct bcma_device *dev, bool val)
 {
 	struct bcma_hcd_device *usb_dev = bcma_get_drvdata(dev);
 
-	if (IS_ERR_OR_NULL(usb_dev->gpio_desc))
+	if (!usb_dev->gpio_desc)
 		return;
 
 	gpiod_set_value(usb_dev->gpio_desc, val);
@@ -406,9 +406,11 @@ static int bcma_hcd_probe(struct bcma_device *core)
 		return -ENOMEM;
 	usb_dev->core = core;
 
-	if (core->dev.of_node)
-		usb_dev->gpio_desc = devm_gpiod_get(&core->dev, "vcc",
-						    GPIOD_OUT_HIGH);
+	usb_dev->gpio_desc = devm_gpiod_get_optional(&core->dev, "vcc",
+						     GPIOD_OUT_HIGH);
+	if (IS_ERR(usb_dev->gpio_desc))
+		return dev_err_probe(&core->dev, PTR_ERR(usb_dev->gpio_desc),
+				     "error obtaining VCC GPIO");
 
 	switch (core->id.id) {
 	case BCMA_CORE_USB20_HOST:



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux