Phy power on/off cycle can happen several times during device life.
We then need to balance the extcon notifier registration accordingly.

Fixes: f0b5c2c96370 ("phy: qcom-usb-hs: Replace the extcon API")
Signed-off-by: Loic Poulain <loic.poul...@linaro.org>
---
 v2: don't use devres version (power-on always followed by power-off)

 drivers/phy/qualcomm/phy-qcom-usb-hs.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/phy/qualcomm/phy-qcom-usb-hs.c 
b/drivers/phy/qualcomm/phy-qcom-usb-hs.c
index 2d0c70b..18da6e2 100644
--- a/drivers/phy/qualcomm/phy-qcom-usb-hs.c
+++ b/drivers/phy/qualcomm/phy-qcom-usb-hs.c
@@ -159,8 +159,8 @@ static int qcom_usb_hs_phy_power_on(struct phy *phy)
                /* setup initial state */
                qcom_usb_hs_phy_vbus_notifier(&uphy->vbus_notify, state,
                                              uphy->vbus_edev);
-               ret = devm_extcon_register_notifier(&ulpi->dev, uphy->vbus_edev,
-                               EXTCON_USB, &uphy->vbus_notify);
+               ret = extcon_register_notifier(uphy->vbus_edev, EXTCON_USB,
+                                              &uphy->vbus_notify);
                if (ret)
                        goto err_ulpi;
        }
@@ -181,6 +181,11 @@ static int qcom_usb_hs_phy_power_off(struct phy *phy)
 {
        struct qcom_usb_hs_phy *uphy = phy_get_drvdata(phy);
 
+       if (uphy->vbus_edev) {
+               extcon_unregister_notifier(uphy->vbus_edev, EXTCON_USB,
+                                          &uphy->vbus_notify);
+       }
+
        regulator_disable(uphy->v3p3);
        regulator_disable(uphy->v1p8);
        clk_disable_unprepare(uphy->sleep_clk);
-- 
2.7.4

Reply via email to