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

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
...@@ -41,6 +41,34 @@ Board specific device node entry ...@@ -41,6 +41,34 @@ Board specific device node entry
power = <50>; 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 OMAP CONTROL USB
Required properties: Required properties:
......
...@@ -316,11 +316,11 @@ static int dwc3_omap_probe(struct platform_device *pdev) ...@@ -316,11 +316,11 @@ static int dwc3_omap_probe(struct platform_device *pdev)
struct resource *res; struct resource *res;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int size;
int ret = -ENOMEM; int ret = -ENOMEM;
int irq; int irq;
const u32 *utmi_mode; int utmi_mode = 0;
u32 reg; u32 reg;
void __iomem *base; void __iomem *base;
...@@ -334,13 +334,13 @@ static int dwc3_omap_probe(struct platform_device *pdev) ...@@ -334,13 +334,13 @@ static int dwc3_omap_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, omap); platform_set_drvdata(pdev, omap);
irq = platform_get_irq(pdev, 1); irq = platform_get_irq(pdev, 0);
if (irq < 0) { if (irq < 0) {
dev_err(dev, "missing IRQ resource\n"); dev_err(dev, "missing IRQ resource\n");
return -EINVAL; return -EINVAL;
} }
res = platform_get_resource(pdev, IORESOURCE_MEM, 1); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) { if (!res) {
dev_err(dev, "missing memory base resource\n"); dev_err(dev, "missing memory base resource\n");
return -EINVAL; return -EINVAL;
...@@ -387,25 +387,22 @@ static int dwc3_omap_probe(struct platform_device *pdev) ...@@ -387,25 +387,22 @@ static int dwc3_omap_probe(struct platform_device *pdev)
reg = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS); reg = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS);
utmi_mode = of_get_property(node, "utmi-mode", &size); if (node)
if (utmi_mode && size == sizeof(*utmi_mode)) { of_property_read_u32(node, "utmi-mode", &utmi_mode);
reg |= *utmi_mode; else if (pdata)
} else { utmi_mode = pdata->utmi_mode;
if (!pdata) { else
dev_dbg(dev, "missing platform data\n"); dev_dbg(dev, "missing platform data\n");
} else {
switch (pdata->utmi_mode) { switch (utmi_mode) {
case DWC3_OMAP_UTMI_MODE_SW: case DWC3_OMAP_UTMI_MODE_SW:
reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE; reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
break; break;
case DWC3_OMAP_UTMI_MODE_HW: case DWC3_OMAP_UTMI_MODE_HW:
reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE; reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
break; break;
default: default:
dev_dbg(dev, "UNKNOWN utmi mode %d\n", dev_dbg(dev, "UNKNOWN utmi mode %d\n", utmi_mode);
pdata->utmi_mode);
}
}
} }
dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, reg); dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, reg);
...@@ -465,7 +462,7 @@ static int dwc3_omap_remove(struct platform_device *pdev) ...@@ -465,7 +462,7 @@ static int dwc3_omap_remove(struct platform_device *pdev)
static const struct of_device_id of_dwc3_match[] = { static const struct of_device_id of_dwc3_match[] = {
{ {
"ti,dwc3", .compatible = "ti,dwc3"
}, },
{ }, { },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment