|
@@ -100,6 +100,7 @@ struct twl6030_usb {
|
|
|
u8 linkstat;
|
|
|
u8 asleep;
|
|
|
bool irq_enabled;
|
|
|
+ unsigned long features;
|
|
|
};
|
|
|
|
|
|
#define xceiv_to_twl(x) container_of((x), struct twl6030_usb, otg)
|
|
@@ -204,6 +205,12 @@ static int twl6030_start_srp(struct otg_transceiver *x)
|
|
|
|
|
|
static int twl6030_usb_ldo_init(struct twl6030_usb *twl)
|
|
|
{
|
|
|
+ char *regulator_name;
|
|
|
+
|
|
|
+ if (twl->features & TWL6025_SUBCLASS)
|
|
|
+ regulator_name = "ldousb";
|
|
|
+ else
|
|
|
+ regulator_name = "vusb";
|
|
|
|
|
|
/* Set to OTG_REV 1.3 and turn on the ID_WAKEUP_COMP */
|
|
|
twl6030_writeb(twl, TWL6030_MODULE_ID0 , 0x1, TWL6030_BACKUP_REG);
|
|
@@ -214,7 +221,7 @@ static int twl6030_usb_ldo_init(struct twl6030_usb *twl)
|
|
|
/* Program MISC2 register and set bit VUSB_IN_VBAT */
|
|
|
twl6030_writeb(twl, TWL6030_MODULE_ID0 , 0x10, TWL6030_MISC2);
|
|
|
|
|
|
- twl->usb3v3 = regulator_get(twl->dev, "vusb");
|
|
|
+ twl->usb3v3 = regulator_get(twl->dev, regulator_name);
|
|
|
if (IS_ERR(twl->usb3v3))
|
|
|
return -ENODEV;
|
|
|
|
|
@@ -409,6 +416,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
|
|
|
twl->dev = &pdev->dev;
|
|
|
twl->irq1 = platform_get_irq(pdev, 0);
|
|
|
twl->irq2 = platform_get_irq(pdev, 1);
|
|
|
+ twl->features = pdata->features;
|
|
|
twl->otg.dev = twl->dev;
|
|
|
twl->otg.label = "twl6030";
|
|
|
twl->otg.set_host = twl6030_set_host;
|