usb: dwc3: omap: minor fixes to get dt working
authorKishon Vijay Abraham I <kishon@ti.com>
Tue, 26 Feb 2013 14:33:27 +0000 (20:03 +0530)
committerFelipe Balbi <balbi@ti.com>
Mon, 18 Mar 2013 09:16:33 +0000 (11:16 +0200)
Includes few minor fixes in dwc3-omap like populating the compatible
string in a correct way, extracting the utmi-mode property properly and
changing the index of get_irq since irq of core is removed from hwmod
entry.

Also updated the documentation with dwc3-omap device tree binding
information.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
[ balbi@ti.com : fix a compile warning introduced by
this commit ]

Signed-off-by: Felipe Balbi <balbi@ti.com>
Documentation/devicetree/bindings/usb/omap-usb.txt
drivers/usb/dwc3/dwc3-omap.c

index 1ef0ce71f8faa0f00bb0e459c7c94a36d6abdb1b..1b9f55fd96c03368fa56de77e0ae7ca03764e71a 100644 (file)
@@ -41,6 +41,34 @@ Board specific device node entry
        power = <50>;
 };
 
+OMAP DWC3 GLUE
+ - compatible : Should be "ti,dwc3"
+ - ti,hwmods : Should be "usb_otg_ss"
+ - reg : Address and length of the register set for the device.
+ - interrupts : The irq number of this device that is used to interrupt the
+   MPU
+ - #address-cells, #size-cells : Must be present if the device has sub-nodes
+ - utmi-mode : controls the source of UTMI/PIPE status for VBUS and OTG ID.
+   It should be set to "1" for HW mode and "2" for SW mode.
+ - ranges: the child address space are mapped 1:1 onto the parent address space
+
+Sub-nodes:
+The dwc3 core should be added as subnode to omap dwc3 glue.
+- dwc3 :
+   The binding details of dwc3 can be found in:
+   Documentation/devicetree/bindings/usb/dwc3.txt
+
+omap_dwc3 {
+       compatible = "ti,dwc3";
+       ti,hwmods = "usb_otg_ss";
+       reg = <0x4a020000 0x1ff>;
+       interrupts = <0 93 4>;
+       #address-cells = <1>;
+       #size-cells = <1>;
+       utmi-mode = <2>;
+       ranges;
+};
+
 OMAP CONTROL USB
 
 Required properties:
index afa05e3c9cf40b9b731e6d16f8543c07a6cb62c8..e1206b41993255e3672ec35a5b1ff4f2924a7690 100644 (file)
@@ -316,11 +316,11 @@ static int dwc3_omap_probe(struct platform_device *pdev)
        struct resource         *res;
        struct device           *dev = &pdev->dev;
 
-       int                     size;
        int                     ret = -ENOMEM;
        int                     irq;
 
-       const u32               *utmi_mode;
+       int                     utmi_mode = 0;
+
        u32                     reg;
 
        void __iomem            *base;
@@ -334,13 +334,13 @@ static int dwc3_omap_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, omap);
 
-       irq = platform_get_irq(pdev, 1);
+       irq = platform_get_irq(pdev, 0);
        if (irq < 0) {
                dev_err(dev, "missing IRQ resource\n");
                return -EINVAL;
        }
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res) {
                dev_err(dev, "missing memory base resource\n");
                return -EINVAL;
@@ -387,25 +387,22 @@ static int dwc3_omap_probe(struct platform_device *pdev)
 
        reg = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS);
 
-       utmi_mode = of_get_property(node, "utmi-mode", &size);
-       if (utmi_mode && size == sizeof(*utmi_mode)) {
-               reg |= *utmi_mode;
-       } else {
-               if (!pdata) {
-                       dev_dbg(dev, "missing platform data\n");
-               } else {
-                       switch (pdata->utmi_mode) {
-                       case DWC3_OMAP_UTMI_MODE_SW:
-                               reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
-                               break;
-                       case DWC3_OMAP_UTMI_MODE_HW:
-                               reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
-                               break;
-                       default:
-                               dev_dbg(dev, "UNKNOWN utmi mode %d\n",
-                                               pdata->utmi_mode);
-                       }
-               }
+       if (node)
+               of_property_read_u32(node, "utmi-mode", &utmi_mode);
+       else if (pdata)
+               utmi_mode = pdata->utmi_mode;
+       else
+               dev_dbg(dev, "missing platform data\n");
+
+       switch (utmi_mode) {
+       case DWC3_OMAP_UTMI_MODE_SW:
+               reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
+               break;
+       case DWC3_OMAP_UTMI_MODE_HW:
+               reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
+               break;
+       default:
+               dev_dbg(dev, "UNKNOWN utmi mode %d\n", utmi_mode);
        }
 
        dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, reg);
@@ -465,7 +462,7 @@ static int dwc3_omap_remove(struct platform_device *pdev)
 
 static const struct of_device_id of_dwc3_match[] = {
        {
-               "ti,dwc3",
+               .compatible =   "ti,dwc3"
        },
        { },
 };