Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 364532
b: refs/heads/master
c: e36a0c8
h: refs/heads/master
v: v3
  • Loading branch information
Kishon Vijay Abraham I authored and Felipe Balbi committed Mar 18, 2013
1 parent 05210c0 commit 5c98237
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b54b5f56531d9fcbb30908373ba842af4de6a26b
refs/heads/master: e36a0c870f7dbbfa7ed13cd83b79be00bcd00380
28 changes: 28 additions & 0 deletions trunk/Documentation/devicetree/bindings/usb/omap-usb.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
45 changes: 21 additions & 24 deletions trunk/drivers/usb/dwc3/dwc3-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -387,25 +387,22 @@ 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) {
dev_dbg(dev, "missing platform data\n");
} else {
switch (pdata->utmi_mode) {
case DWC3_OMAP_UTMI_MODE_SW:
reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
break;
case DWC3_OMAP_UTMI_MODE_HW:
reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
break;
default:
dev_dbg(dev, "UNKNOWN utmi mode %d\n",
pdata->utmi_mode);
}
}
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");

switch (utmi_mode) {
case DWC3_OMAP_UTMI_MODE_SW:
reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
break;
case DWC3_OMAP_UTMI_MODE_HW:
reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
break;
default:
dev_dbg(dev, "UNKNOWN utmi mode %d\n", utmi_mode);
}

dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_STATUS, reg);
Expand Down Expand Up @@ -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"
},
{ },
};
Expand Down

0 comments on commit 5c98237

Please sign in to comment.