Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 325949
b: refs/heads/master
c: a418cc4
h: refs/heads/master
i:
  325947: fbc06a3
v: v3
  • Loading branch information
Felipe Balbi committed Sep 10, 2012
1 parent bace306 commit 5539642
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e3ec3eb79481d23b7d371b6e9567e2b6972efc92
refs/heads/master: a418cc4ea552884e9f2aa875aaa0afa1f0ffe07d
66 changes: 66 additions & 0 deletions trunk/drivers/usb/dwc3/dwc3-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@
#include <linux/io.h>
#include <linux/of.h>

#include <linux/usb/otg.h>
#include <linux/usb/nop-usb-xceiv.h>

#include "core.h"

/*
Expand Down Expand Up @@ -131,6 +134,8 @@ struct dwc3_omap {
spinlock_t lock;

struct platform_device *dwc3;
struct platform_device *usb2_phy;
struct platform_device *usb3_phy;
struct device *dev;

int irq;
Expand All @@ -152,6 +157,59 @@ static inline void dwc3_omap_writel(void __iomem *base, u32 offset, u32 value)
writel(value, base + offset);
}

static int __devinit dwc3_omap_register_phys(struct dwc3_omap *omap)
{
struct nop_usb_xceiv_platform_data pdata;
struct platform_device *pdev;
int ret;

memset(&pdata, 0x00, sizeof(pdata));

pdev = platform_device_alloc("nop_usb_xceiv", 0);
if (!pdev)
return -ENOMEM;

omap->usb2_phy = pdev;
pdata.type = USB_PHY_TYPE_USB2;

ret = platform_device_add_data(omap->usb2_phy, &pdata, sizeof(pdata));
if (ret)
goto err1;

pdev = platform_device_alloc("nop_usb_xceiv", 1);
if (!pdev) {
ret = -ENOMEM;
goto err1;
}

omap->usb3_phy = pdev;
pdata.type = USB_PHY_TYPE_USB3;

ret = platform_device_add_data(omap->usb3_phy, &pdata, sizeof(pdata));
if (ret)
goto err2;

ret = platform_device_add(omap->usb2_phy);
if (ret)
goto err2;

ret = platform_device_add(omap->usb3_phy);
if (ret)
goto err3;

return 0;

err3:
platform_device_del(omap->usb2_phy);

err2:
platform_device_put(omap->usb3_phy);

err1:
platform_device_put(omap->usb2_phy);

return ret;
}

static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap)
{
Expand Down Expand Up @@ -251,6 +309,12 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
return -ENOMEM;
}

ret = dwc3_omap_register_phys(omap);
if (ret) {
dev_err(dev, "couldn't register PHYs\n");
return ret;
}

devid = dwc3_get_device_id();
if (devid < 0)
return -ENODEV;
Expand Down Expand Up @@ -371,6 +435,8 @@ static int __devexit dwc3_omap_remove(struct platform_device *pdev)
struct dwc3_omap *omap = platform_get_drvdata(pdev);

platform_device_unregister(omap->dwc3);
platform_device_unregister(omap->usb2_phy);
platform_device_unregister(omap->usb3_phy);

dwc3_put_device_id(omap->dwc3->id);

Expand Down

0 comments on commit 5539642

Please sign in to comment.