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: 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>
This commit is contained in:
parent
b54b5f5653
commit
e36a0c870f
@ -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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
static const struct of_device_id of_dwc3_match[] = {
|
static const struct of_device_id of_dwc3_match[] = {
|
||||||
{
|
{
|
||||||
"ti,dwc3",
|
.compatible = "ti,dwc3"
|
||||||
},
|
},
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user