Hi Laurent, On 11/09/18 18:06, Laurent Pinchart wrote: > Now that all platforms using OMAP USB host devices have been converted > to DT, drop support for legacy non-DT probe from the driver. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- > drivers/mfd/omap-usb-host.c | 153 +++------------------------------ > include/linux/platform_data/usb-omap.h | 4 - > 2 files changed, 13 insertions(+), 144 deletions(-) > > diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c > index b731026541f5..ce28e0fda55e 100644 > --- a/drivers/mfd/omap-usb-host.c > +++ b/drivers/mfd/omap-usb-host.c > @@ -23,7 +23,6 @@ > #include <linux/slab.h> > #include <linux/delay.h> > #include <linux/clk.h> > -#include <linux/dma-mapping.h> > #include <linux/gpio.h> > #include <linux/platform_device.h> > #include <linux/platform_data/usb-omap.h> > @@ -35,8 +34,6 @@ > #include "omap-usb.h" > > #define USBHS_DRIVER_NAME "usbhs_omap" > -#define OMAP_EHCI_DEVICE "ehci-omap" > -#define OMAP_OHCI_DEVICE "ohci-omap3" > > /* OMAP USBHOST Register addresses */ > > @@ -115,7 +112,6 @@ struct usbhs_hcd_omap { > /*-------------------------------------------------------------------------*/ > > static const char usbhs_driver_name[] = USBHS_DRIVER_NAME; > -static u64 usbhs_dmamask = DMA_BIT_MASK(32); > > /*-------------------------------------------------------------------------*/ > > @@ -153,119 +149,6 @@ static const char * const port_modes[] = { > [OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM] = "ohci-tll-2pin-dpdm", > }; > > -static struct platform_device *omap_usbhs_alloc_child(const char *name, > - struct resource *res, int num_resources, void *pdata, > - size_t pdata_size, struct device *dev) > -{ > - struct platform_device *child; > - int ret; > - > - child = platform_device_alloc(name, 0); > - > - if (!child) { > - dev_err(dev, "platform_device_alloc %s failed\n", name); > - goto err_end; > - } > - > - ret = platform_device_add_resources(child, res, num_resources); > - if (ret) { > - dev_err(dev, "platform_device_add_resources failed\n"); > - goto err_alloc; > - } > - > - ret = platform_device_add_data(child, pdata, pdata_size); > - if (ret) { > - dev_err(dev, "platform_device_add_data failed\n"); > - goto err_alloc; > - } > - > - child->dev.dma_mask = &usbhs_dmamask; > - dma_set_coherent_mask(&child->dev, DMA_BIT_MASK(32)); > - child->dev.parent = dev; > - > - ret = platform_device_add(child); > - if (ret) { > - dev_err(dev, "platform_device_add failed\n"); > - goto err_alloc; > - } > - > - return child; > - > -err_alloc: > - platform_device_put(child); > - > -err_end: > - return NULL; > -} > - > -static int omap_usbhs_alloc_children(struct platform_device *pdev) > -{ > - struct device *dev = &pdev->dev; > - struct usbhs_omap_platform_data *pdata = dev_get_platdata(dev); > - struct platform_device *ehci; > - struct platform_device *ohci; > - struct resource *res; > - struct resource resources[2]; > - int ret; > - > - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ehci"); > - if (!res) { > - dev_err(dev, "EHCI get resource IORESOURCE_MEM failed\n"); > - ret = -ENODEV; > - goto err_end; > - } > - resources[0] = *res; > - > - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ehci-irq"); > - if (!res) { > - dev_err(dev, " EHCI get resource IORESOURCE_IRQ failed\n"); > - ret = -ENODEV; > - goto err_end; > - } > - resources[1] = *res; > - > - ehci = omap_usbhs_alloc_child(OMAP_EHCI_DEVICE, resources, 2, pdata, > - sizeof(*pdata), dev); > - > - if (!ehci) { > - dev_err(dev, "omap_usbhs_alloc_child failed\n"); > - ret = -ENOMEM; > - goto err_end; > - } > - > - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ohci"); > - if (!res) { > - dev_err(dev, "OHCI get resource IORESOURCE_MEM failed\n"); > - ret = -ENODEV; > - goto err_ehci; > - } > - resources[0] = *res; > - > - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ohci-irq"); > - if (!res) { > - dev_err(dev, "OHCI get resource IORESOURCE_IRQ failed\n"); > - ret = -ENODEV; > - goto err_ehci; > - } > - resources[1] = *res; > - > - ohci = omap_usbhs_alloc_child(OMAP_OHCI_DEVICE, resources, 2, pdata, > - sizeof(*pdata), dev); > - if (!ohci) { > - dev_err(dev, "omap_usbhs_alloc_child failed\n"); > - ret = -ENOMEM; > - goto err_ehci; > - } > - > - return 0; > - > -err_ehci: > - platform_device_unregister(ehci); > - > -err_end: > - return ret; > -} > - > static bool is_ohci_port(enum usbhs_omap_port_mode pmode) > { > switch (pmode) { > @@ -541,31 +424,28 @@ static const struct of_device_id usbhs_child_match_table[] = { > static int usbhs_omap_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > - struct usbhs_omap_platform_data *pdata = dev_get_platdata(dev); > + struct usbhs_omap_platform_data *pdata; > struct usbhs_hcd_omap *omap; > struct resource *res; > int ret = 0; > int i; > bool need_logic_fck; > > - dev_info(&pdev->dev, "%s\n", __func__); > - if (dev->of_node) { > - /* For DT boot we populate platform data from OF node */ > - pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); > - if (!pdata) > - return -ENOMEM; > + /* Populate platform data from OF node */ > + if (!dev->of_node) { > + dev_err(dev, "Missing OF node\n"); > + return -ENODEV; > + } > > - ret = usbhs_omap_get_dt_pdata(dev, pdata); > - if (ret) > - return ret; > + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); > + if (!pdata) > + return -ENOMEM; > > - dev->platform_data = pdata; > - } > + ret = usbhs_omap_get_dt_pdata(dev, pdata); > + if (ret) > + return ret; > > - if (!pdata) { > - dev_err(dev, "Missing platform data\n"); > - return -ENODEV; > - } > + dev->platform_data = pdata; Do we still need to set dev->platform_data? This driver can access it via struct usbhs_hcd_omap *omap = dev_get_drvdata(dev); omap->pdata; > > if (pdata->nports > OMAP3_HS_USB_PORTS) { > dev_info(dev, "Too many num_ports <%d> in platform_data. Max %d\n", > @@ -798,13 +678,6 @@ static int usbhs_omap_probe(struct platform_device *pdev) > goto err_mem; > } > > - } else { > - ret = omap_usbhs_alloc_children(pdev); > - if (ret) { > - dev_err(dev, "omap_usbhs_alloc_children failed: %d\n", > - ret); > - goto err_mem; > - } > } > > return 0; > diff --git a/include/linux/platform_data/usb-omap.h b/include/linux/platform_data/usb-omap.h > index fa579b4c666b..c051da514dc5 100644 > --- a/include/linux/platform_data/usb-omap.h > +++ b/include/linux/platform_data/usb-omap.h > @@ -38,10 +38,6 @@ enum usbhs_omap_port_mode { > OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM > }; > > -struct usbtll_omap_platform_data { > - enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; > -}; > - > struct ehci_hcd_omap_platform_data { > enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; > int reset_gpio_port[OMAP3_HS_USB_PORTS]; > cheers, -roger -- Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki