On 10/15/2012 03:27 PM, Kishon Vijay Abraham I wrote: > Used of_platform_populate() to populate dwc3 core platform_device > from device tree data. Since now the allocation of unique device id is > handled by of_*, removed the call to dwc3_get_device_id. Just for my understanding: How are these devices organized exactly? Do we have : omap_wrapper -> dwc3-omap -> dwc3-core ? The DT binding is mentioning some wrapper, but I'm not sure where it should be located. Maybe you should add more documentation on that. Or maybe you do have a other series to add that part? Regards, Benoit > > Signed-off-by: Kishon Vijay Abraham I <kishon@xxxxxx> > --- > drivers/usb/dwc3/dwc3-omap.c | 50 +++++++++--------------------------------- > 1 file changed, 10 insertions(+), 40 deletions(-) > > diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c > index d51c69c..4aaeec4 100644 > --- a/drivers/usb/dwc3/dwc3-omap.c > +++ b/drivers/usb/dwc3/dwc3-omap.c > @@ -47,6 +47,7 @@ > #include <linux/ioport.h> > #include <linux/io.h> > #include <linux/of.h> > +#include <linux/of_platform.h> > > #include <linux/usb/otg.h> > #include <linux/usb/nop-usb-xceiv.h> > @@ -133,7 +134,6 @@ struct dwc3_omap { > /* device lock */ > spinlock_t lock; > > - struct platform_device *dwc3; > struct platform_device *usb2_phy; > struct platform_device *usb3_phy; > struct device *dev; > @@ -276,12 +276,10 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev) > struct dwc3_omap_data *pdata = pdev->dev.platform_data; > struct device_node *node = pdev->dev.of_node; > > - struct platform_device *dwc3; > struct dwc3_omap *omap; > struct resource *res; > struct device *dev = &pdev->dev; > > - int devid; > int size; > int ret = -ENOMEM; > int irq; > @@ -324,34 +322,19 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev) > return ret; > } > > - devid = dwc3_get_device_id(); > - if (devid < 0) > - return -ENODEV; > - > - dwc3 = platform_device_alloc("dwc3", devid); > - if (!dwc3) { > - dev_err(dev, "couldn't allocate dwc3 device\n"); > - goto err1; > - } > - > context = devm_kzalloc(dev, resource_size(res), GFP_KERNEL); > if (!context) { > dev_err(dev, "couldn't allocate dwc3 context memory\n"); > - goto err2; > + return -ENOMEM; > } > > spin_lock_init(&omap->lock); > - dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask); > > - dwc3->dev.parent = dev; > - dwc3->dev.dma_mask = dev->dma_mask; > - dwc3->dev.dma_parms = dev->dma_parms; > omap->resource_size = resource_size(res); > omap->context = context; > omap->dev = dev; > omap->irq = irq; > omap->base = base; > - omap->dwc3 = dwc3; > > reg = dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_STATUS); > > @@ -396,7 +379,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev) > if (ret) { > dev_err(dev, "failed to request IRQ #%d --> %d\n", > omap->irq, ret); > - goto err2; > + return ret; > } > > /* enable all IRQs */ > @@ -415,28 +398,16 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev) > > dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_1, reg); > > - ret = platform_device_add_resources(dwc3, pdev->resource, > - pdev->num_resources); > - if (ret) { > - dev_err(dev, "couldn't add resources to dwc3 device\n"); > - goto err2; > - } > - > - ret = platform_device_add(dwc3); > - if (ret) { > - dev_err(dev, "failed to register dwc3 device\n"); > - goto err2; > + if (node) { > + ret = of_platform_populate(node, NULL, NULL, dev); > + if (ret) { > + dev_err(&pdev->dev, > + "failed to add create dwc3 core\n"); > + return ret; > + } > } > > return 0; > - > -err2: > - platform_device_put(dwc3); > - > -err1: > - dwc3_put_device_id(devid); > - > - return ret; > } > > static int __devexit dwc3_omap_remove(struct platform_device *pdev) > @@ -446,7 +417,6 @@ static int __devexit dwc3_omap_remove(struct platform_device *pdev) > platform_device_unregister(omap->usb2_phy); > platform_device_unregister(omap->usb3_phy); > > - dwc3_put_device_id(omap->dwc3->id); > device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core); > > return 0; > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html