Hi, On Mon, Jun 19, 2017 at 10:41:46AM +0200, H. Nikolaus Schaller wrote: > This fixes an issue if both this twl4030_charger driver and > phy-twl4030-usb are compiled as modules and loaded in random order. > > It has been observed on GTA04 and OpenPandora devices that in worst > case the boot process hangs and in best case the AC detection fails > with a warning. > > Therefore we add deferred probing checks for the usb_phy and the > iio channel for AC detection. > > Signed-off-by: H. Nikolaus Schaller Looks fine to me. -- Sebastian > --- > drivers/power/supply/twl4030_charger.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c > index 9d974f1e3957..0d2125e4f735 100644 > --- a/drivers/power/supply/twl4030_charger.c > +++ b/drivers/power/supply/twl4030_charger.c > @@ -989,8 +989,12 @@ static int twl4030_bci_probe(struct platform_device *pdev) > > bci->channel_vac = devm_iio_channel_get(&pdev->dev, "vac"); > if (IS_ERR(bci->channel_vac)) { > + ret = PTR_ERR(bci->channel_vac); > + if (ret == -EPROBE_DEFER) > + return ret; /* iio not ready */ > + dev_warn(&pdev->dev, "could not request vac iio channel (%d)", > + ret); > bci->channel_vac = NULL; > - dev_warn(&pdev->dev, "could not request vac iio channel"); > } > > if (bci->dev->of_node) { > @@ -1002,6 +1006,14 @@ static int twl4030_bci_probe(struct platform_device *pdev) > bci->transceiver = devm_usb_get_phy_by_node( > bci->dev, phynode, &bci->usb_nb); > bci->usb_nb.notifier_call = twl4030_bci_usb_ncb; > + if (IS_ERR(bci->transceiver)) { > + ret = PTR_ERR(bci->transceiver); > + if (ret == -EPROBE_DEFER) > + return ret; /* phy not ready */ > + dev_warn(&pdev->dev, "could not request transceiver (%d)", > + ret); > + bci->transceiver = NULL; > + } > } > } > > -- > 2.12.2 >