mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
351a2ec15f
This stabilizes USB support. The old patch was handling initialization in a different order that was causing some problems with few USB 3.0 devices. Some weren't detected, some were working unstable, sometimes USB 3.0 could hang the whole controller. A still known issue (but not a regression) is controller hang triggered by connecting USB 1.1 device when not having OHCI controller enabled (kmod-usb-ohci). Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 45997
53 lines
1.6 KiB
Diff
53 lines
1.6 KiB
Diff
From 93724affb195149df6f7630901d878f6e273fa02 Mon Sep 17 00:00:00 2001
|
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
Date: Thu, 11 Jun 2015 22:57:37 +0200
|
|
Subject: [PATCH] USB: bcma: use devm_kzalloc
|
|
|
|
Instead of manually handling the frees use devm. There was also a free
|
|
missing in the unregister call which is not needed with devm.
|
|
|
|
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
---
|
|
drivers/usb/host/bcma-hcd.c | 11 ++++-------
|
|
1 file changed, 4 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c
|
|
index 853bf9d..d7ea50d 100644
|
|
--- a/drivers/usb/host/bcma-hcd.c
|
|
+++ b/drivers/usb/host/bcma-hcd.c
|
|
@@ -225,7 +225,8 @@ static int bcma_hcd_probe(struct bcma_device *dev)
|
|
if (dma_set_mask_and_coherent(dev->dma_dev, DMA_BIT_MASK(32)))
|
|
return -EOPNOTSUPP;
|
|
|
|
- usb_dev = kzalloc(sizeof(struct bcma_hcd_device), GFP_KERNEL);
|
|
+ usb_dev = devm_kzalloc(&dev->dev, sizeof(struct bcma_hcd_device),
|
|
+ GFP_KERNEL);
|
|
if (!usb_dev)
|
|
return -ENOMEM;
|
|
|
|
@@ -239,10 +240,8 @@ static int bcma_hcd_probe(struct bcma_device *dev)
|
|
ohci_addr = 0x18009000;
|
|
|
|
usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, true, ohci_addr);
|
|
- if (IS_ERR(usb_dev->ohci_dev)) {
|
|
- err = PTR_ERR(usb_dev->ohci_dev);
|
|
- goto err_free_usb_dev;
|
|
- }
|
|
+ if (IS_ERR(usb_dev->ohci_dev))
|
|
+ return PTR_ERR(usb_dev->ohci_dev);
|
|
|
|
usb_dev->ehci_dev = bcma_hcd_create_pdev(dev, false, dev->addr);
|
|
if (IS_ERR(usb_dev->ehci_dev)) {
|
|
@@ -255,8 +254,6 @@ static int bcma_hcd_probe(struct bcma_device *dev)
|
|
|
|
err_unregister_ohci_dev:
|
|
platform_device_unregister(usb_dev->ohci_dev);
|
|
-err_free_usb_dev:
|
|
- kfree(usb_dev);
|
|
return err;
|
|
}
|
|
|
|
--
|
|
1.8.4.5
|
|
|