Commit 9c9d8249 authored by Maxime Ripard's avatar Maxime Ripard Committed by Greg Kroah-Hartman

usb: phy: Fix deferred probing

Commit 1290a958 ("usb: phy: propagate __of_usb_find_phy()'s error on
failure") actually broke the deferred probing mechanism, since it now returns
EPROBE_DEFER only when the try_module_get call fails, but not when the phy
lookup does.

All the other similar functions seem to return ENODEV when try_module_get
fails, and the error code of either __usb_find_phy or __of_usb_find_phy
otherwise.

In order to have a consistent behaviour, and a meaningful EPROBE_DEFER, always
return EPROBE_DEFER when __(of_)usb_find_phy fails to look up the requested
phy, that will be propagated by the caller, and ENODEV if try_module_get fails.
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
Tested-by: default avatarOlof Johansson <olof@lixom.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 56abcab8
...@@ -34,7 +34,7 @@ static struct usb_phy *__usb_find_phy(struct list_head *list, ...@@ -34,7 +34,7 @@ static struct usb_phy *__usb_find_phy(struct list_head *list,
return phy; return phy;
} }
return ERR_PTR(-ENODEV); return ERR_PTR(-EPROBE_DEFER);
} }
static struct usb_phy *__usb_find_phy_dev(struct device *dev, static struct usb_phy *__usb_find_phy_dev(struct device *dev,
...@@ -66,7 +66,7 @@ static struct usb_phy *__of_usb_find_phy(struct device_node *node) ...@@ -66,7 +66,7 @@ static struct usb_phy *__of_usb_find_phy(struct device_node *node)
return phy; return phy;
} }
return ERR_PTR(-ENODEV); return ERR_PTR(-EPROBE_DEFER);
} }
static void devm_usb_phy_release(struct device *dev, void *res) static void devm_usb_phy_release(struct device *dev, void *res)
...@@ -192,7 +192,7 @@ struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev, ...@@ -192,7 +192,7 @@ struct usb_phy *devm_usb_get_phy_by_phandle(struct device *dev,
phy = __of_usb_find_phy(node); phy = __of_usb_find_phy(node);
if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
if (!IS_ERR(phy)) if (!IS_ERR(phy))
phy = ERR_PTR(-EPROBE_DEFER); phy = ERR_PTR(-ENODEV);
devres_free(ptr); devres_free(ptr);
goto err1; goto err1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment