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

Commit e36a0c87 authored by Kishon Vijay Abraham I's avatar Kishon Vijay Abraham I Committed by Felipe Balbi
Browse files

usb: dwc3: omap: minor fixes to get dt working



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: default avatarKishon Vijay Abraham I <kishon@ti.com>

[ balbi@ti.com : fix a compile warning introduced by
	this commit ]

Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent b54b5f56
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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:
+21 −24
Original line number Diff line number Diff line
@@ -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,14 +387,14 @@ 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) {
	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");
		} else {
			switch (pdata->utmi_mode) {

	switch (utmi_mode) {
	case DWC3_OMAP_UTMI_MODE_SW:
		reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
		break;
@@ -402,10 +402,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
		reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
		break;
	default:
				dev_dbg(dev, "UNKNOWN utmi mode %d\n",
						pdata->utmi_mode);
			}
		}
		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"
	},
	{ },
};