patch "usb: usb251xb: fix regulator probe and error handling" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
usb: usb251xb: fix regulator probe and error handling
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From f06947f275f1838586792c17b6ab70da82ed7b43 Mon Sep 17 00:00:00 2001
From: Marco Felsch <[email protected]>
Date: Wed, 26 Feb 2020 08:26:44 +0100
Subject: usb: usb251xb: fix regulator probe and error handling
Commit 4d7201cda226 ("usb: usb251xb: add vdd supply support") didn't covered the non-DT use-case and so the regualtor_enable() call during probe will fail on those platforms. Also the commit didn't handled the error case correctly.
Move devm_regulator_get() out of usb251xb_get_ofdata() to address the 1st issue. This can be done without worries because devm_regulator_get() handles the non-DT use-case too. Add devm_add_action_or_reset() to address the 2nd bug.
--- drivers/usb/misc/usb251xb.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)
drivers/usb/misc/usb251xb.c +16 -4
@@ -424,10 +424,6 @@ static int usb251xb_get_ofdata(struct usb251xb *hub,return err; } - hub->vdd =devm_regulator_get (dev,"vdd" ); -if (IS_ERR (hub->vdd)) -return PTR_ERR (hub->vdd); -if (of_property_read_u16_array (np,"vendor-id" , &hub->vendor_id,1 )) hub->vendor_id =USB251XB_DEF_VENDOR_ID ;
@@ -640,6 +636,13 @@ static int usb251xb_get_ofdata(struct usb251xb *hub, }#endif /* CONFIG_OF */ +static void usb251xb_regulator_disable_action (void *data) +{ +struct usb251xb *hub = data; + +regulator_disable (hub->vdd); +} +static int usb251xb_probe (struct usb251xb *hub) {struct device *dev = hub->dev;
@@ -676,10 +679,19 @@ static int usb251xb_probe(struct usb251xb *hub)if (err)return err; + hub->vdd =devm_regulator_get (dev,"vdd" ); +if (IS_ERR (hub->vdd)) +return PTR_ERR (hub->vdd); + err =regulator_enable (hub->vdd);if (err)return err; + err =devm_add_action_or_reset (dev, + usb251xb_regulator_disable_action, hub); +if (err) +return err; + err =usb251xb_connect (hub);if (err) {dev_err (dev,"Failed to connect hub (%d)\n" , err);
Signature · 1 line
2.25.1