power: supply: twl4030-charger: add deferred probing for phy and iio
[sfrench/cifs-2.6.git] / drivers / power / supply / twl4030_charger.c
index 9fad387e50817784b1acf80ca794fe27d1f9d780..9dff1b4b85fc3b362da95df884c80c4e959a7a27 100644 (file)
@@ -985,8 +985,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) {
@@ -998,6 +1002,14 @@ static int twl4030_bci_probe(struct platform_device *pdev)
                        bci->usb_nb.notifier_call = twl4030_bci_usb_ncb;
                        bci->transceiver = devm_usb_get_phy_by_node(
                                bci->dev, phynode, &bci->usb_nb);
+                       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;
+                       }
                }
        }