Messages in this thread | | | Subject | Re: [PATCH v6 4/4] power: supply: twl4030-charger: add deferred probing for phy and iio | From | "H. Nikolaus Schaller" <> | Date | Mon, 19 Jun 2017 10:40:53 +0200 |
| |
> Am 15.06.2017 um 13:57 schrieb Sebastian Reichel <sebastian.reichel@collabora.co.uk>: > > 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@goldelico.com> >> --- >> 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).
Added to v7.
Also added a %d to print the error number to aid spotting the problems.
> >> 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
[unhandled content-type:application/pgp-signature]
| |