usb: phy: twl4030-usb: Simplify phy init to use runtime PM
authorTony Lindgren <tony@atomide.com>
Wed, 27 Aug 2014 23:28:08 +0000 (16:28 -0700)
committerKishon Vijay Abraham I <kishon@ti.com>
Wed, 24 Sep 2014 09:48:32 +0000 (15:18 +0530)
We can now let the interrupt and delayed work do all that's
needed with runtime PM.

Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
drivers/phy/phy-twl4030-usb.c

index bc28eccb029ea6602002a8305421c4351799bb1f..a292db01b503dfd217e73c815d105c06f8677e37 100644 (file)
@@ -471,16 +471,8 @@ static int twl4030_phy_power_on(struct phy *phy)
        twl4030_usb_set_mode(twl, twl->usb_mode);
        if (twl->usb_mode == T2_USB_MODE_ULPI)
                twl4030_i2c_access(twl, 0);
+       schedule_delayed_work(&twl->id_workaround_work, 0);
 
-       /*
-        * XXX When VBUS gets driven after musb goes to A mode,
-        * ID_PRES related interrupts no longer arrive, why?
-        * Register itself is updated fine though, so we must poll.
-        */
-       if (twl->linkstat == OMAP_MUSB_ID_GROUND) {
-               cancel_delayed_work(&twl->id_workaround_work);
-               schedule_delayed_work(&twl->id_workaround_work, HZ);
-       }
        return 0;
 }
 
@@ -612,16 +604,9 @@ static void twl4030_id_workaround_work(struct work_struct *work)
 static int twl4030_phy_init(struct phy *phy)
 {
        struct twl4030_usb *twl = phy_get_drvdata(phy);
-       enum omap_musb_vbus_id_status status;
 
        pm_runtime_get_sync(twl->dev);
-       status = twl4030_usb_linkstat(twl);
-       twl->linkstat = status;
-
-       if (status == OMAP_MUSB_ID_GROUND || status == OMAP_MUSB_VBUS_VALID)
-               omap_musb_mailbox(twl->linkstat);
-
-       sysfs_notify(&twl->dev->kobj, NULL, "vbus");
+       schedule_delayed_work(&twl->id_workaround_work, 0);
        pm_runtime_mark_last_busy(twl->dev);
        pm_runtime_put_autosuspend(twl->dev);
 
@@ -698,6 +683,7 @@ static int twl4030_usb_probe(struct platform_device *pdev)
        twl->dev                = &pdev->dev;
        twl->irq                = platform_get_irq(pdev, 0);
        twl->vbus_supplied      = false;
+       twl->linkstat           = -EINVAL;
        twl->asleep             = 1;
        twl->linkstat           = OMAP_MUSB_UNKNOWN;