Message ID | 20180911150610.27510-4-laurent.pinchart@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix OMAP EHCI probe & assorted cleanups | expand |
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@ideasonboard.com> > --- > 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
Hi Roger, On Wednesday, 12 September 2018 10:57:31 EEST Roger Quadros wrote: > 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@ideasonboard.com> > > --- > > > > 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 [snip] > > @@ -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; Unfortunately we still do, as the ehci-omap driver accesses the omap-usb-host device platform data (through the ehci-omap device's parent). > > 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; [snip]
On 12/09/18 11:30, Laurent Pinchart wrote: > Hi Roger, > > On Wednesday, 12 September 2018 10:57:31 EEST Roger Quadros wrote: >> 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@ideasonboard.com> >>> --- >>> >>> 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 > > [snip] > >>> @@ -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; > > Unfortunately we still do, as the ehci-omap driver accesses the omap-usb-host > device platform data (through the ehci-omap device's parent). Ah, you're right. Seems like it uses it only to get the nports, and port_mode[]. For this patch. Acked-by: Roger Quadros <rogerq@ti.com> > >>> 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; > > [snip] > cheers, -roger
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; 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];
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@ideasonboard.com> --- drivers/mfd/omap-usb-host.c | 153 +++------------------------------ include/linux/platform_data/usb-omap.h | 4 - 2 files changed, 13 insertions(+), 144 deletions(-)