usb: otg: TWL6030: OMAP4430: Adding SRP VBUS pulsing API
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>
This commit is contained in:
Родитель
c51e36dc11
Коммит
603ab524ed
|
@ -31,6 +31,7 @@
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/notifier.h>
|
#include <linux/notifier.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
|
||||||
/* usb register definitions */
|
/* usb register definitions */
|
||||||
#define USB_VENDOR_ID_LSB 0x00
|
#define USB_VENDOR_ID_LSB 0x00
|
||||||
|
@ -188,6 +189,19 @@ static int twl6030_phy_suspend(struct otg_transceiver *x, int suspend)
|
||||||
return 0;
|
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)
|
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.init = twl6030_phy_init;
|
||||||
twl->otg.shutdown = twl6030_phy_shutdown;
|
twl->otg.shutdown = twl6030_phy_shutdown;
|
||||||
twl->otg.set_suspend = twl6030_phy_suspend;
|
twl->otg.set_suspend = twl6030_phy_suspend;
|
||||||
|
twl->otg.start_srp = twl6030_start_srp;
|
||||||
|
|
||||||
/* init spinlock for workqueue */
|
/* init spinlock for workqueue */
|
||||||
spin_lock_init(&twl->lock);
|
spin_lock_init(&twl->lock);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче