Commit f9c5d1db authored by Lucas Stach's avatar Lucas Stach Committed by Felipe Balbi

usb: phy: phy-generic: propagate clk_get error if clock is required

If the clock handle is given in the DT, it means the clock is required
for proper operation of the PHY. In that case a failure to obtain the
clock must be propagated to stop the driver from probing. This fixes
working with clocks, which request probe deferral.
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent bbb1cc05
...@@ -224,7 +224,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop, ...@@ -224,7 +224,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop,
int err = 0; int err = 0;
u32 clk_rate = 0; u32 clk_rate = 0;
bool needs_vcc = false; bool needs_vcc = false, needs_clk = false;
if (dev->of_node) { if (dev->of_node) {
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
...@@ -233,6 +233,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop, ...@@ -233,6 +233,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop,
clk_rate = 0; clk_rate = 0;
needs_vcc = of_property_read_bool(node, "vcc-supply"); needs_vcc = of_property_read_bool(node, "vcc-supply");
needs_clk = of_property_read_bool(node, "clocks");
nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset", nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset",
GPIOD_ASIS); GPIOD_ASIS);
err = PTR_ERR_OR_ZERO(nop->gpiod_reset); err = PTR_ERR_OR_ZERO(nop->gpiod_reset);
...@@ -275,6 +276,8 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop, ...@@ -275,6 +276,8 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop,
if (IS_ERR(nop->clk)) { if (IS_ERR(nop->clk)) {
dev_dbg(dev, "Can't get phy clock: %ld\n", dev_dbg(dev, "Can't get phy clock: %ld\n",
PTR_ERR(nop->clk)); PTR_ERR(nop->clk));
if (needs_clk)
return PTR_ERR(nop->clk);
} }
if (!IS_ERR(nop->clk) && clk_rate) { if (!IS_ERR(nop->clk) && clk_rate) {
......
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