| From f28c42c576b293b3a1daaed8ca2775ebc2fe5398 Mon Sep 17 00:00:00 2001 |
| From: Peter Chen <peter.chen@freescale.com> |
| Date: Fri, 24 May 2013 14:29:20 +0800 |
| Subject: usb: dwc3: pci: PHY should be deleted later than dwc3 core |
| |
| From: Peter Chen <peter.chen@freescale.com> |
| |
| commit f28c42c576b293b3a1daaed8ca2775ebc2fe5398 upstream. |
| |
| If the glue layer is removed first (core layer later), |
| it deletes the phy device first, then the core device. |
| But at core's removal, it still uses PHY's resources, it may |
| cause kernel's oops. It is much like the problem |
| Paul Zimmerman reported at: |
| http://marc.info/?l=linux-usb&m=136547502011472&w=2. |
| |
| Besides, it is reasonable the PHY is deleted at last as |
| the controller is the PHY's user. |
| |
| Signed-off-by: Peter Chen <peter.chen@freescale.com> |
| Signed-off-by: Felipe Balbi <balbi@ti.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/dwc3/dwc3-pci.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/usb/dwc3/dwc3-pci.c |
| +++ b/drivers/usb/dwc3/dwc3-pci.c |
| @@ -196,9 +196,9 @@ static void dwc3_pci_remove(struct pci_d |
| { |
| struct dwc3_pci *glue = pci_get_drvdata(pci); |
| |
| + platform_device_unregister(glue->dwc3); |
| platform_device_unregister(glue->usb2_phy); |
| platform_device_unregister(glue->usb3_phy); |
| - platform_device_unregister(glue->dwc3); |
| pci_set_drvdata(pci, NULL); |
| pci_disable_device(pci); |
| } |