usb: otg: TWL6030: OMAP4430: Adding SRP VBUS pulsing API
authorHema HK <hemahk@ti.com>
Tue, 22 Mar 2011 11:24:21 +0000 (16:54 +0530)
committerFelipe Balbi <balbi@ti.com>
Fri, 13 May 2011 11:43:55 +0000 (14:43 +0300)
Implement the start_srp API to generate the VBUS pulsing and assign it to
otg_transciever function pointer. This will be used by the link driver when
there is SRP initiation from user.

Signed-off-by: Hema HK <hemahk@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/otg/twl6030-usb.c

index 6e920de..3f2e070 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/err.h>
 #include <linux/notifier.h>
 #include <linux/slab.h>
+#include <linux/delay.h>
 
 /* usb register definitions */
 #define USB_VENDOR_ID_LSB              0x00
@@ -188,6 +189,19 @@ static int twl6030_phy_suspend(struct otg_transceiver *x, int suspend)
        return 0;
 }
 
+static int twl6030_start_srp(struct otg_transceiver *x)
+{
+       struct twl6030_usb *twl = xceiv_to_twl(x);
+
+       twl6030_writeb(twl, TWL_MODULE_USB, 0x24, USB_VBUS_CTRL_SET);
+       twl6030_writeb(twl, TWL_MODULE_USB, 0x84, USB_VBUS_CTRL_SET);
+
+       mdelay(100);
+       twl6030_writeb(twl, TWL_MODULE_USB, 0xa0, USB_VBUS_CTRL_CLR);
+
+       return 0;
+}
+
 static int twl6030_usb_ldo_init(struct twl6030_usb *twl)
 {
 
@@ -403,6 +417,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
        twl->otg.init           = twl6030_phy_init;
        twl->otg.shutdown       = twl6030_phy_shutdown;
        twl->otg.set_suspend    = twl6030_phy_suspend;
+       twl->otg.start_srp      = twl6030_start_srp;
 
        /* init spinlock for workqueue */
        spin_lock_init(&twl->lock);