Commit 79c5623f authored by Ulf Hansson's avatar Ulf Hansson Committed by Felipe Balbi

usb: musb: ux500: Fix NULL pointer dereference at system PM

The commit 7d32cdef ("usb: musb: fail with error when no DMA
controller set"), caused the core platform driver to correctly return an
error code when fail probing.

Unfurtante it also caused bug for a NULL pointer dereference, during
system suspend for the ux500 driver. The reason is a lacking validation
of the corresponding ->driver_data pointer, which won't be set when the
musb core driver fails to probe (or haven't yet been probed).

Fixes: 7d32cdef ("usb: musb: fail with error when no DMA...")
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
parent 63b121e3
...@@ -348,7 +348,9 @@ static int ux500_suspend(struct device *dev) ...@@ -348,7 +348,9 @@ static int ux500_suspend(struct device *dev)
struct ux500_glue *glue = dev_get_drvdata(dev); struct ux500_glue *glue = dev_get_drvdata(dev);
struct musb *musb = glue_to_musb(glue); struct musb *musb = glue_to_musb(glue);
if (musb)
usb_phy_set_suspend(musb->xceiv, 1); usb_phy_set_suspend(musb->xceiv, 1);
clk_disable_unprepare(glue->clk); clk_disable_unprepare(glue->clk);
return 0; return 0;
...@@ -366,6 +368,7 @@ static int ux500_resume(struct device *dev) ...@@ -366,6 +368,7 @@ static int ux500_resume(struct device *dev)
return ret; return ret;
} }
if (musb)
usb_phy_set_suspend(musb->xceiv, 0); usb_phy_set_suspend(musb->xceiv, 0);
return 0; return 0;
......
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