u8                      linkstat;
        u8                      asleep;
        bool                    irq_enabled;
+       unsigned long           features;
 };
 
 #define xceiv_to_twl(x)                container_of((x), struct twl6030_usb, otg)
 
 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);
        /* 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;
 
        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;