Hi, On Wed, Jun 14, 2017 at 11:25:56AM +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 <hns@xxxxxxxxxxxxx> > --- > drivers/power/supply/twl4030_charger.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/power/supply/twl4030_charger.c b/drivers/power/supply/twl4030_charger.c > index 3bebeecb4a1f..6ac8816262bd 100644 > --- a/drivers/power/supply/twl4030_charger.c > +++ b/drivers/power/supply/twl4030_charger.c > @@ -989,15 +989,21 @@ static int twl4030_bci_probe(struct platform_device *pdev) > > phynode = of_find_compatible_node(bci->dev->of_node->parent, > NULL, "ti,twl4030-usb"); > - if (phynode) > + if (phynode) { > bci->transceiver = devm_usb_get_phy_by_node( > bci->dev, phynode, &bci->usb_nb); > + if (IS_ERR(bci->transceiver) && > + PTR_ERR(bci->transceiver) == -EPROBE_DEFER) > + return -EPROBE_DEFER; /* PHY not ready */ > + } > } Let's also set to NULL + dev_warn for other errors (like the iio channel error handling). > bci->channel_vac = devm_iio_channel_get(&pdev->dev, "vac"); > if (IS_ERR(bci->channel_vac)) { > - bci->channel_vac = NULL; > + if (PTR_ERR(bci->channel_vac) == -EPROBE_DEFER) > + return -EPROBE_DEFER; /* iio not ready */ > dev_warn(&pdev->dev, "could not request vac iio channel"); > + bci->channel_vac = NULL; > } > > bci->ac = devm_power_supply_register(&pdev->dev, &twl4030_bci_ac_desc, -- Sebastian
Attachment:
signature.asc
Description: PGP signature