[PATCH v1 07/11] drivers: usb: twl4030: Add device tree support for twl4030 usb
ABRAHAM, KISHON VIJAY
kishon at ti.com
Tue Jul 10 02:52:57 EDT 2012
Hi,
On Tue, Jul 10, 2012 at 11:32 AM, Rajendra Nayak <rnayak at ti.com> wrote:
> On Thursday 28 June 2012 05:21 PM, Kishon Vijay Abraham I wrote:
>>
>> Add device tree support for twl6030 usb driver.
>
>
> twl4030?
My bad. Will fix it.
>
>
>> Update the Documentation with device tree binding information.
>>
>> Signed-off-by: Kishon Vijay Abraham I<kishon at ti.com>
>> ---
>> .../devicetree/bindings/usb/twlxxxx-usb.txt | 19 +++++++++++++
>> drivers/usb/otg/twl4030-usb.c | 28
>> +++++++++++++++----
>> 2 files changed, 41 insertions(+), 6 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/usb/twlxxxx-usb.txt
>> b/Documentation/devicetree/bindings/usb/twlxxxx-usb.txt
>> index f293271..2d069e4 100644
>> --- a/Documentation/devicetree/bindings/usb/twlxxxx-usb.txt
>> +++ b/Documentation/devicetree/bindings/usb/twlxxxx-usb.txt
>> @@ -16,3 +16,22 @@ twl6030-usb {
>> regulator = "vusb";
>> vusb-supply =<&vusb>;
>> };
>> +
>> +TWL4030 USB PHY AND COMPARATOR
>> + - compatible : Should be "ti,twl4030-usb"
>> + - interrupts : The interrupt numbers to the cpu should be specified.
>> First
>> + interrupt number is the otg interrupt number that raises ID interrupts
>> + and VBUS interrupts. The second interrupt number is optional.
>> + -<supply-name>-supply : phandle to the regulator device tree node.
>> +<supply-name> should be vusb1v5, vusb1v8 and vusb3v1
>> + - usb_mode : The mode used by the phy to connect to the controller. "1"
>> + specifies "ULPI" mode and "2" specifies "CEA2011_3PIN" mode.
>
>
> Are these standard usb phy modes or something specific to the twl4030
> usb phy?
These are standard modes used to connect the phy to the controller. I
think it's used by other chips other than twl4030 (Something in
am35xx??).
>
>> +
>> +twl4030-usb {
>> + compatible = "ti,twl4030-usb";
>> + interrupts =< 10 4>;
>> + vusb1v5-supply =<&vusb1v5>;
>> + vusb1v8-supply =<&vusb1v8>;
>> + vusb3v1-supply =<&vusb3v1>;
>> + usb_mode =<1>;
>> +};
>> diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c
>> index 523cad5..a4e7434 100644
>> --- a/drivers/usb/otg/twl4030-usb.c
>> +++ b/drivers/usb/otg/twl4030-usb.c
>> @@ -585,23 +585,28 @@ static int __devinit twl4030_usb_probe(struct
>> platform_device *pdev)
>> struct twl4030_usb *twl;
>> int status, err;
>> struct usb_otg *otg;
>> -
>> - if (!pdata) {
>> - dev_dbg(&pdev->dev, "platform_data not available\n");
>> - return -EINVAL;
>> - }
>> + struct device_node *np = pdev->dev.of_node;
>>
>> twl = devm_kzalloc(&pdev->dev, sizeof *twl, GFP_KERNEL);
>> if (!twl)
>> return -ENOMEM;
>>
>> + if (np)
>> + of_property_read_u32(np, "usb_mode",
>> + (enum twl4030_usb_mode *)&twl->usb_mode);
>> + else if (pdata)
>> + twl->usb_mode = pdata->usb_mode;
>> + else {
>> + dev_err(&pdev->dev, "twl4030 initialized without
>> pdata\n");
>> + return -EINVAL;
>> + }
>> +
>> otg = devm_kzalloc(&pdev->dev, sizeof *otg, GFP_KERNEL);
>> if (!otg)
>> return -ENOMEM;
>>
>> twl->dev =&pdev->dev;
>>
>> twl->irq = platform_get_irq(pdev, 0);
>> - twl->usb_mode = pdata->usb_mode;
>> twl->vbus_supplied = false;
>> twl->asleep = 1;
>> twl->linkstat = OMAP_MUSB_UNKNOWN;
>> @@ -690,12 +695,23 @@ static int __exit twl4030_usb_remove(struct
>> platform_device *pdev)
>> return 0;
>> }
>>
>> +#ifdef CONFIG_OF
>> +static const struct of_device_id twl4030_usb_id_table[] = {
>> + { .compatible = "ti,twl4030-usb" },
>> + {}
>> +};
>> +MODULE_DEVICE_TABLE(of, twl4030_usb_id_table);
>> +#else
>> +#define twl4030_usb_id_table NULL
>> +#endif
>> +
>> static struct platform_driver twl4030_usb_driver = {
>> .probe = twl4030_usb_probe,
>> .remove = __exit_p(twl4030_usb_remove),
>> .driver = {
>> .name = "twl4030_usb",
>> .owner = THIS_MODULE,
>> + .of_match_table = twl4030_usb_id_table,
>
>
> use of_match_ptr().
Ok. Will change it that way.
Thanks
Kishon
More information about the linux-arm-kernel
mailing list