Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c031a7d4 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Felipe Balbi
Browse files

usb: usb: dsps: update code according to the binding document



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: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent a0b311ef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -127,7 +127,7 @@
				status = "okay";
			};

			phy@47401300 {
			usb-phy@47401300 {
				status = "okay";
			};

+3 −3
Original line number Diff line number Diff line
@@ -178,11 +178,11 @@
				status = "okay";
			};

			phy@47401300 {
			usb-phy@47401300 {
				status = "okay";
			};

			phy@47401b00 {
			usb-phy@47401b00 {
				status = "okay";
			};

@@ -194,7 +194,7 @@
				status = "okay";
			};

			dma@07402000  {
			dma-controller@07402000  {
				status = "okay";
			};
		};
+1 −1
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@
				status = "okay";
			};

			phy@47401300 {
			usb-phy@47401300 {
				status = "okay";
			};

+26 −41
Original line number Diff line number Diff line
@@ -354,7 +354,7 @@
				status = "disabled";
			};

			usb0_phy: phy@47401300 {
			usb0_phy: usb-phy@47401300 {
				compatible = "ti,am335x-usb-phy";
				reg = <0x47401300 0x100>;
				reg-names = "phy";
@@ -364,24 +364,18 @@

			usb0: usb@47401000 {
				compatible = "ti,musb-am33xx";
				ranges;
				#address-cells = <1>;
				#size-cells = <1>;
				reg = <0x47401000 0x200>;
				reg-names = "control";
				status = "disabled";
				reg = <0x47401400 0x400
					0x47401000 0x200>;
				reg-names = "mc", "control";

				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>;
				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
@@ -407,9 +401,8 @@
					"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";
@@ -419,24 +412,17 @@

			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";
				reg = <0x47401c00 0x400
					0x47401800 0x200>;
				reg-names = "mc", "control";
				interrupts = <19>;
				interrupt-names = "mc";
					multipoint = <1>;
					num-eps = <16>;
					ram-bits = <12>;
					port-mode = <3>;
					power = <250>;
				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
@@ -462,9 +448,8 @@
					"tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
					"tx14", "tx15";
			};
			};

			cppi41dma: dma@07402000 {
			cppi41dma: dma-controller@07402000 {
				compatible = "ti,am3359-cppi41";
				reg =  <0x47400000 0x1000
					0x47402000 0x1000
+36 −18
Original line number Diff line number Diff line
@@ -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) {