Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 325944
b: refs/heads/master
c: ff0a1f3
h: refs/heads/master
v: v3
  • Loading branch information
Kishon Vijay Abraham I authored and Felipe Balbi committed Sep 6, 2012
1 parent 68bbf0b commit cf89223
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0e98de67bacba812b1b465b90a3f940d24401c27
refs/heads/master: ff0a1f39400a8d2c02343bd22d295517d72e58ec
21 changes: 21 additions & 0 deletions trunk/Documentation/devicetree/bindings/usb/twlxxxx-usb.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
USB COMPARATOR OF TWL CHIPS

TWL6030 USB COMPARATOR
- compatible : Should be "ti,twl6030-usb"
- interrupts : Two interrupt numbers to the cpu should be specified. First
interrupt number is the otg interrupt number that raises ID interrupts when
the controller has to act as host and the second interrupt number is the
usb interrupt number that raises VBUS interrupts when the controller has to
act as device
- usb-supply : phandle to the regulator device tree node. It should be vusb
if it is twl6030 or ldousb if it is twl6025 subclass.

twl6030-usb {
compatible = "ti,twl6030-usb";
interrupts = < 4 10 >;
};

Board specific device node entry
&twl6030-usb {
usb-supply = <&vusb>;
};
39 changes: 26 additions & 13 deletions trunk/drivers/usb/otg/twl6030-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ struct twl6030_usb {
u8 asleep;
bool irq_enabled;
bool vbus_enable;
unsigned long features;
const char *regulator;
};

#define comparator_to_twl(x) container_of((x), struct twl6030_usb, comparator)
Expand Down Expand Up @@ -153,13 +153,6 @@ static int twl6030_start_srp(struct phy_companion *comparator)

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);

Expand All @@ -169,7 +162,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, regulator_name);
twl->usb3v3 = regulator_get(twl->dev, twl->regulator);
if (IS_ERR(twl->usb3v3))
return -ENODEV;

Expand Down Expand Up @@ -322,9 +315,9 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
u32 ret;
struct twl6030_usb *twl;
int status, err;
struct twl4030_usb_data *pdata;
struct device *dev = &pdev->dev;
pdata = dev->platform_data;
struct device_node *np = pdev->dev.of_node;
struct device *dev = &pdev->dev;
struct twl4030_usb_data *pdata = dev->platform_data;

twl = devm_kzalloc(dev, sizeof *twl, GFP_KERNEL);
if (!twl)
Expand All @@ -333,7 +326,6 @@ 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->linkstat = OMAP_MUSB_UNKNOWN;

twl->comparator.set_vbus = twl6030_set_vbus;
Expand All @@ -345,6 +337,18 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
return -EPROBE_DEFER;
}

if (np) {
twl->regulator = "usb";
} else if (pdata) {
if (pdata->features & TWL6025_SUBCLASS)
twl->regulator = "ldousb";
else
twl->regulator = "vusb";
} else {
dev_err(&pdev->dev, "twl6030 initialized without pdata\n");
return -EINVAL;
}

/* init spinlock for workqueue */
spin_lock_init(&twl->lock);

Expand Down Expand Up @@ -406,12 +410,21 @@ static int __exit twl6030_usb_remove(struct platform_device *pdev)
return 0;
}

#ifdef CONFIG_OF
static const struct of_device_id twl6030_usb_id_table[] = {
{ .compatible = "ti,twl6030-usb" },
{}
};
MODULE_DEVICE_TABLE(of, twl6030_usb_id_table);
#endif

static struct platform_driver twl6030_usb_driver = {
.probe = twl6030_usb_probe,
.remove = __exit_p(twl6030_usb_remove),
.driver = {
.name = "twl6030_usb",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(twl6030_usb_id_table),
},
};

Expand Down

0 comments on commit cf89223

Please sign in to comment.