aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/otg
diff options
context:
space:
mode:
authorKishon Vijay Abraham I <kishon@ti.com>2012-09-06 10:57:08 -0400
committerFelipe Balbi <balbi@ti.com>2012-09-06 13:16:07 -0400
commitff0a1f39400a8d2c02343bd22d295517d72e58ec (patch)
tree8c3f4ceeb399372cfe3b3d86b11a8c7cbb262cbc /drivers/usb/otg
parent0e98de67bacba812b1b465b90a3f940d24401c27 (diff)
usb: twl6030: Add dt support for twl6030 usb
Add device tree support for twl6030 usb driver. Update the Documentation with device tree binding information. Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/otg')
-rw-r--r--drivers/usb/otg/twl6030-usb.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c
index 32525bb667ee..fcadef7864f1 100644
--- a/drivers/usb/otg/twl6030-usb.c
+++ b/drivers/usb/otg/twl6030-usb.c
@@ -105,7 +105,7 @@ struct twl6030_usb {
105 u8 asleep; 105 u8 asleep;
106 bool irq_enabled; 106 bool irq_enabled;
107 bool vbus_enable; 107 bool vbus_enable;
108 unsigned long features; 108 const char *regulator;
109}; 109};
110 110
111#define comparator_to_twl(x) container_of((x), struct twl6030_usb, comparator) 111#define comparator_to_twl(x) container_of((x), struct twl6030_usb, comparator)
@@ -153,13 +153,6 @@ static int twl6030_start_srp(struct phy_companion *comparator)
153 153
154static int twl6030_usb_ldo_init(struct twl6030_usb *twl) 154static int twl6030_usb_ldo_init(struct twl6030_usb *twl)
155{ 155{
156 char *regulator_name;
157
158 if (twl->features & TWL6025_SUBCLASS)
159 regulator_name = "ldousb";
160 else
161 regulator_name = "vusb";
162
163 /* Set to OTG_REV 1.3 and turn on the ID_WAKEUP_COMP */ 156 /* Set to OTG_REV 1.3 and turn on the ID_WAKEUP_COMP */
164 twl6030_writeb(twl, TWL6030_MODULE_ID0 , 0x1, TWL6030_BACKUP_REG); 157 twl6030_writeb(twl, TWL6030_MODULE_ID0 , 0x1, TWL6030_BACKUP_REG);
165 158
@@ -169,7 +162,7 @@ static int twl6030_usb_ldo_init(struct twl6030_usb *twl)
169 /* Program MISC2 register and set bit VUSB_IN_VBAT */ 162 /* Program MISC2 register and set bit VUSB_IN_VBAT */
170 twl6030_writeb(twl, TWL6030_MODULE_ID0 , 0x10, TWL6030_MISC2); 163 twl6030_writeb(twl, TWL6030_MODULE_ID0 , 0x10, TWL6030_MISC2);
171 164
172 twl->usb3v3 = regulator_get(twl->dev, regulator_name); 165 twl->usb3v3 = regulator_get(twl->dev, twl->regulator);
173 if (IS_ERR(twl->usb3v3)) 166 if (IS_ERR(twl->usb3v3))
174 return -ENODEV; 167 return -ENODEV;
175 168
@@ -322,9 +315,9 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
322 u32 ret; 315 u32 ret;
323 struct twl6030_usb *twl; 316 struct twl6030_usb *twl;
324 int status, err; 317 int status, err;
325 struct twl4030_usb_data *pdata; 318 struct device_node *np = pdev->dev.of_node;
326 struct device *dev = &pdev->dev; 319 struct device *dev = &pdev->dev;
327 pdata = dev->platform_data; 320 struct twl4030_usb_data *pdata = dev->platform_data;
328 321
329 twl = devm_kzalloc(dev, sizeof *twl, GFP_KERNEL); 322 twl = devm_kzalloc(dev, sizeof *twl, GFP_KERNEL);
330 if (!twl) 323 if (!twl)
@@ -333,7 +326,6 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
333 twl->dev = &pdev->dev; 326 twl->dev = &pdev->dev;
334 twl->irq1 = platform_get_irq(pdev, 0); 327 twl->irq1 = platform_get_irq(pdev, 0);
335 twl->irq2 = platform_get_irq(pdev, 1); 328 twl->irq2 = platform_get_irq(pdev, 1);
336 twl->features = pdata->features;
337 twl->linkstat = OMAP_MUSB_UNKNOWN; 329 twl->linkstat = OMAP_MUSB_UNKNOWN;
338 330
339 twl->comparator.set_vbus = twl6030_set_vbus; 331 twl->comparator.set_vbus = twl6030_set_vbus;
@@ -345,6 +337,18 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
345 return -EPROBE_DEFER; 337 return -EPROBE_DEFER;
346 } 338 }
347 339
340 if (np) {
341 twl->regulator = "usb";
342 } else if (pdata) {
343 if (pdata->features & TWL6025_SUBCLASS)
344 twl->regulator = "ldousb";
345 else
346 twl->regulator = "vusb";
347 } else {
348 dev_err(&pdev->dev, "twl6030 initialized without pdata\n");
349 return -EINVAL;
350 }
351
348 /* init spinlock for workqueue */ 352 /* init spinlock for workqueue */
349 spin_lock_init(&twl->lock); 353 spin_lock_init(&twl->lock);
350 354
@@ -406,12 +410,21 @@ static int __exit twl6030_usb_remove(struct platform_device *pdev)
406 return 0; 410 return 0;
407} 411}
408 412
413#ifdef CONFIG_OF
414static const struct of_device_id twl6030_usb_id_table[] = {
415 { .compatible = "ti,twl6030-usb" },
416 {}
417};
418MODULE_DEVICE_TABLE(of, twl6030_usb_id_table);
419#endif
420
409static struct platform_driver twl6030_usb_driver = { 421static struct platform_driver twl6030_usb_driver = {
410 .probe = twl6030_usb_probe, 422 .probe = twl6030_usb_probe,
411 .remove = __exit_p(twl6030_usb_remove), 423 .remove = __exit_p(twl6030_usb_remove),
412 .driver = { 424 .driver = {
413 .name = "twl6030_usb", 425 .name = "twl6030_usb",
414 .owner = THIS_MODULE, 426 .owner = THIS_MODULE,
427 .of_match_table = of_match_ptr(twl6030_usb_id_table),
415 }, 428 },
416}; 429};
417 430