usb: usb: dsps: update code according to the binding document
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Tue, 20 Aug 2013 16:35:47 +0000 (18:35 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 27 Aug 2013 19:18:32 +0000 (14:18 -0500)
This relfects the code and dts requires changes due to recent .dts
binding updates:
- use mg prefix for the Metor Graphics specific attributes
- use power in mA not in mA/2 as specifed in the USB2.0 specification
- remove the child node for USB. This is driver specific on won't be
  reflected in the device tree
- use the "mentor" prefix instead of "mg".
- use "dr_mode" istead of "mg,port-mode" for the port mode. The former
  is used by a few other drivers.

Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: devicetree@vger.kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
arch/arm/boot/dts/am335x-bone.dts
arch/arm/boot/dts/am335x-evm.dts
arch/arm/boot/dts/am335x-evmsk.dts
arch/arm/boot/dts/am33xx.dtsi
drivers/usb/musb/musb_dsps.c

index a8907b5..e8447a7 100644 (file)
                                status = "okay";
                        };
 
-                       phy@47401300 {
+                       usb-phy@47401300 {
                                status = "okay";
                        };
 
index c26c16c..648a67e 100644 (file)
                                status = "okay";
                        };
 
-                       phy@47401300 {
+                       usb-phy@47401300 {
                                status = "okay";
                        };
 
-                       phy@47401b00 {
+                       usb-phy@47401b00 {
                                status = "okay";
                        };
 
                                status = "okay";
                        };
 
-                       dma@07402000  {
+                       dma-controller@07402000  {
                                status = "okay";
                        };
                };
index e92446c..a6c5033 100644 (file)
                                status = "okay";
                        };
 
-                       phy@47401300 {
+                       usb-phy@47401300 {
                                status = "okay";
                        };
 
index a38f8d3..f9c5da9 100644 (file)
                                status = "disabled";
                        };
 
-                       usb0_phy: phy@47401300 {
+                       usb0_phy: usb-phy@47401300 {
                                compatible = "ti,am335x-usb-phy";
                                reg = <0x47401300 0x100>;
                                reg-names = "phy";
 
                        usb0: usb@47401000 {
                                compatible = "ti,musb-am33xx";
-                               ranges;
-                               #address-cells = <1>;
-                               #size-cells = <1>;
-                               reg = <0x47401000 0x200>;
-                               reg-names = "control";
                                status = "disabled";
-
-                               musb0: usb@47401400 {
-                                       compatible = "mg,musbmhdrc";
-                                       reg = <0x47401400 0x400>;
-                                       reg-names = "mc";
-                                       interrupts = <18>;
-                                       interrupt-names = "mc";
-                                       multipoint = <1>;
-                                       num-eps = <16>;
-                                       ram-bits = <12>;
-                                       port-mode = <3>;
-                                       power = <250>;
-                                       phys = <&usb0_phy>;
+                               reg = <0x47401400 0x400
+                                       0x47401000 0x200>;
+                               reg-names = "mc", "control";
+
+                               interrupts = <18>;
+                               interrupt-names = "mc";
+                               dr_mode = "otg";
+                               mentor,multipoint = <1>;
+                               mentor,num-eps = <16>;
+                               mentor,ram-bits = <12>;
+                               mentor,power = <500>;
+                               phys = <&usb0_phy>;
 
                                dmas = <&cppi41dma  0 0 &cppi41dma  1 0
                                        &cppi41dma  2 0 &cppi41dma  3 0
                                        "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
                                        "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
                                        "tx14", "tx15";
-                               };
                        };
 
-                       usb1_phy: phy@47401b00 {
+                       usb1_phy: usb-phy@47401b00 {
                                compatible = "ti,am335x-usb-phy";
                                reg = <0x47401b00 0x100>;
                                reg-names = "phy";
 
                        usb1: usb@47401800 {
                                compatible = "ti,musb-am33xx";
-                               ranges;
-                               #address-cells = <1>;
-                               #size-cells = <1>;
-                               reg = <0x47401800 0x200>;
-                               reg-names = "control";
                                status = "disabled";
-
-                               musb1: usb@47401c00 {
-                                       compatible = "mg,musbmhdrc";
-                                       reg = <0x47401c00 0x400>;
-                                       reg-names = "mc";
-                                       interrupts = <19>;
-                                       interrupt-names = "mc";
-                                       multipoint = <1>;
-                                       num-eps = <16>;
-                                       ram-bits = <12>;
-                                       port-mode = <3>;
-                                       power = <250>;
-                                       phys = <&usb1_phy>;
+                               reg = <0x47401c00 0x400
+                                       0x47401800 0x200>;
+                               reg-names = "mc", "control";
+                               interrupts = <19>;
+                               interrupt-names = "mc";
+                               dr_mode = "otg";
+                               mentor,multipoint = <1>;
+                               mentor,num-eps = <16>;
+                               mentor,ram-bits = <12>;
+                               mentor,power = <500>;
+                               phys = <&usb1_phy>;
 
                                dmas = <&cppi41dma 15 0 &cppi41dma 16 0
                                        &cppi41dma 17 0 &cppi41dma 18 0
                                        "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
                                        "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
                                        "tx14", "tx15";
-                               };
                        };
 
-                       cppi41dma: dma@07402000 {
+                       cppi41dma: dma-controller@07402000 {
                                compatible = "ti,am3359-cppi41";
                                reg =  <0x47400000 0x1000
                                        0x47402000 0x1000
index 4ad52e7..4ead0f5 100644 (file)
@@ -44,6 +44,7 @@
 #include <linux/of_device.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
+#include <linux/usb/of.h>
 
 #include "musb_core.h"
 
@@ -425,35 +426,51 @@ static int get_int_prop(struct device_node *dn, const char *s)
        return val;
 }
 
+static int get_musb_port_mode(struct device *dev)
+{
+       enum usb_dr_mode mode;
+
+       mode = of_usb_get_dr_mode(dev->of_node);
+       switch (mode) {
+       case USB_DR_MODE_HOST:
+               return MUSB_PORT_MODE_HOST;
+
+       case USB_DR_MODE_PERIPHERAL:
+               return MUSB_PORT_MODE_GADGET;
+
+       case USB_DR_MODE_UNKNOWN:
+       case USB_DR_MODE_OTG:
+       default:
+               return MUSB_PORT_MODE_DUAL_ROLE;
+       };
+}
+
 static int dsps_create_musb_pdev(struct dsps_glue *glue,
                struct platform_device *parent)
 {
        struct musb_hdrc_platform_data pdata;
        struct resource resources[2];
+       struct resource *res;
        struct device *dev = &parent->dev;
        struct musb_hdrc_config *config;
        struct platform_device *musb;
        struct device_node *dn = parent->dev.of_node;
-       struct device_node *child_node;
        int ret;
 
-       child_node = of_get_child_by_name(dn, "usb");
-       if (!child_node)
-               return -EINVAL;
-
        memset(resources, 0, sizeof(resources));
-       ret = of_address_to_resource(child_node, 0, &resources[0]);
-       if (ret) {
+       res = platform_get_resource_byname(parent, IORESOURCE_MEM, "mc");
+       if (!res) {
                dev_err(dev, "failed to get memory.\n");
-               return ret;
+               return -EINVAL;
        }
+       resources[0] = *res;
 
-       ret = of_irq_to_resource(child_node, 0, &resources[1]);
-       if (ret == 0) {
+       res = platform_get_resource_byname(parent, IORESOURCE_IRQ, "mc");
+       if (!res) {
                dev_err(dev, "failed to get irq.\n");
-               ret = -EINVAL;
-               return ret;
+               return -EINVAL;
        }
+       resources[1] = *res;
 
        /* allocate the child platform device */
        musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO);
@@ -465,7 +482,7 @@ static int dsps_create_musb_pdev(struct dsps_glue *glue,
        musb->dev.parent                = dev;
        musb->dev.dma_mask              = &musb_dmamask;
        musb->dev.coherent_dma_mask     = musb_dmamask;
-       musb->dev.of_node               = of_node_get(child_node);
+       musb->dev.of_node               = of_node_get(dn);
 
        glue->musb = musb;
 
@@ -485,11 +502,12 @@ static int dsps_create_musb_pdev(struct dsps_glue *glue,
        pdata.config = config;
        pdata.platform_ops = &dsps_ops;
 
-       config->num_eps = get_int_prop(child_node, "num-eps");
-       config->ram_bits = get_int_prop(child_node, "ram-bits");
-       pdata.mode = get_int_prop(child_node, "port-mode");
-       pdata.power = get_int_prop(child_node, "power");
-       config->multipoint = of_property_read_bool(child_node, "multipoint");
+       config->num_eps = get_int_prop(dn, "mentor,num-eps");
+       config->ram_bits = get_int_prop(dn, "mentor,ram-bits");
+       pdata.mode = get_musb_port_mode(dev);
+       /* DT keeps this entry in mA, musb expects it as per USB spec */
+       pdata.power = get_int_prop(dn, "mentor,power") / 2;
+       config->multipoint = of_property_read_bool(dn, "mentor,multipoint");
 
        ret = platform_device_add_data(musb, &pdata, sizeof(pdata));
        if (ret) {