Hi Felipe, On Monday 06 October 2014 11:09:05 Felipe Balbi wrote: > On Mon, Oct 06, 2014 at 06:55:04PM +0300, Laurent Pinchart wrote: > > Reset the HCD and, if applicable, the UDC when shutting down the > > hardware to avoid spurious interrupts. > > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > > I'm confused as to why would you get spurious IRQs when shutting down > this controller. Is there a known erratum for that or is this just > masking another driver bug ? After further testing this shouldn't be needed. I'll drop the patch. > > --- > > > > drivers/usb/host/isp1760-core.c | 7 +++++++ > > drivers/usb/host/isp1760-core.h | 1 + > > drivers/usb/host/isp1760-hcd.c | 4 ++-- > > drivers/usb/host/isp1760-if.c | 14 +++++++++++++- > > 4 files changed, 23 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/usb/host/isp1760-core.c > > b/drivers/usb/host/isp1760-core.c index cde66d3..595f234 100644 > > --- a/drivers/usb/host/isp1760-core.c > > +++ b/drivers/usb/host/isp1760-core.c > > @@ -158,6 +158,13 @@ void isp1760_unregister(struct device *dev) > > kfree(isp); > > } > > > > +void isp1760_shutdown(struct device *dev) > > +{ > > + struct isp1760_device *isp = dev_get_drvdata(dev); > > + > > + isp1760_write32(isp->regs, HC_RESET_REG, SW_RESET_RESET_HC); > > +} > > + > > MODULE_DESCRIPTION("Driver for the ISP1760 USB-controller from NXP"); > > MODULE_AUTHOR("Sebastian Siewior <bigeasy@xxxxxxxxxxxxxx>"); > > MODULE_LICENSE("GPL v2"); > > diff --git a/drivers/usb/host/isp1760-core.h > > b/drivers/usb/host/isp1760-core.h index 862dff4..fea1622 100644 > > --- a/drivers/usb/host/isp1760-core.h > > +++ b/drivers/usb/host/isp1760-core.h > > @@ -53,6 +53,7 @@ struct isp1760_device { > > > > int isp1760_register(struct resource *mem, int irq, unsigned long > > irqflags, > > int rst_gpio, struct device *dev, unsigned int devflags); > > void isp1760_unregister(struct device *dev); > > +void isp1760_shutdown(struct device *dev); > > > > static inline u32 isp1760_read32(void __iomem *base, u32 reg) > > { > > diff --git a/drivers/usb/host/isp1760-hcd.c > > b/drivers/usb/host/isp1760-hcd.c index 596a1a9..a6081d5 100644 > > --- a/drivers/usb/host/isp1760-hcd.c > > +++ b/drivers/usb/host/isp1760-hcd.c > > @@ -2114,7 +2114,7 @@ static void isp1760_stop(struct usb_hcd *hcd) > > reg_write32(hcd->regs, HC_CONFIGFLAG, 0); > > } > > > > -static void isp1760_shutdown(struct usb_hcd *hcd) > > +static void isp1760_hc_shutdown(struct usb_hcd *hcd) > > { > > u32 command, temp; > > > > @@ -2153,7 +2153,7 @@ static const struct hc_driver isp1760_hc_driver = { > > .reset = isp1760_hc_setup, > > .start = isp1760_run, > > .stop = isp1760_stop, > > - .shutdown = isp1760_shutdown, > > + .shutdown = isp1760_hc_shutdown, > > .urb_enqueue = isp1760_urb_enqueue, > > .urb_dequeue = isp1760_urb_dequeue, > > .endpoint_disable = isp1760_endpoint_disable, > > diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c > > index ee19b02..6f83587 100644 > > --- a/drivers/usb/host/isp1760-if.c > > +++ b/drivers/usb/host/isp1760-if.c > > @@ -104,6 +104,11 @@ static int of_isp1760_remove(struct platform_device > > *dev)> > > return 0; > > } > > > > +static void of_isp1760_shutdown(struct platform_device *dev) > > +{ > > + isp1760_shutdown(&dev->dev); > > +} > > + > > static const struct of_device_id of_isp1760_match[] = { > > { > > .compatible = "nxp,usb-isp1760", > > @@ -123,6 +128,7 @@ static struct platform_driver isp1760_of_driver = { > > }, > > .probe = of_isp1760_probe, > > .remove = of_isp1760_remove, > > + .shutdown = of_isp1760_shutdown, > > }; > > #endif > > > > @@ -264,7 +270,7 @@ static void isp1761_pci_remove(struct pci_dev *dev) > > > > static void isp1761_pci_shutdown(struct pci_dev *dev) > > { > > - printk(KERN_ERR "ips1761_pci_shutdown\n"); > > + isp1760_shutdown(&dev->dev); > > } > > > > static const struct pci_device_id isp1760_plx [] = { > > @@ -358,9 +364,15 @@ static int isp1760_plat_remove(struct platform_device > > *pdev) > > return 0; > > } > > > > +static void isp1760_plat_shutdown(struct platform_device *pdev) > > +{ > > + isp1760_shutdown(&pdev->dev); > > +} > > + > > static struct platform_driver isp1760_plat_driver = { > > .probe = isp1760_plat_probe, > > .remove = isp1760_plat_remove, > > + .shutdown = isp1760_plat_shutdown, > > .driver = { > > .name = "isp1760", > > }, -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html