78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 352d9e2ee85b43170388599a17cd7b219f270163 Mon Sep 17 00:00:00 2001
 | 
						|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
 | 
						|
Date: Sat, 5 Dec 2015 13:15:06 +0100
 | 
						|
Subject: [PATCH] USB: bcma: make helper creating platform dev more generic
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=UTF-8
 | 
						|
Content-Transfer-Encoding: 8bit
 | 
						|
 | 
						|
Having "bool ohci" argument in bcma_hcd_create_pdev function limited it
 | 
						|
to support two cases only (OHCI and EHCI) and put too much logic in it.
 | 
						|
Lets make caller pass all required data. This adds few extra arguments
 | 
						|
to the function call but will allow us to reuse this code and handle
 | 
						|
more cases in the future (e.g. add XHCI support).
 | 
						|
 | 
						|
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
						|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 | 
						|
---
 | 
						|
 drivers/usb/host/bcma-hcd.c | 24 +++++++++++++-----------
 | 
						|
 1 file changed, 13 insertions(+), 11 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/usb/host/bcma-hcd.c
 | 
						|
+++ b/drivers/usb/host/bcma-hcd.c
 | 
						|
@@ -244,7 +244,10 @@ static const struct usb_ehci_pdata ehci_
 | 
						|
 static const struct usb_ohci_pdata ohci_pdata = {
 | 
						|
 };
 | 
						|
 
 | 
						|
-static struct platform_device *bcma_hcd_create_pdev(struct bcma_device *dev, bool ohci, u32 addr)
 | 
						|
+static struct platform_device *bcma_hcd_create_pdev(struct bcma_device *dev,
 | 
						|
+						    const char *name, u32 addr,
 | 
						|
+						    const void *data,
 | 
						|
+						    size_t size)
 | 
						|
 {
 | 
						|
 	struct platform_device *hci_dev;
 | 
						|
 	struct resource hci_res[2];
 | 
						|
@@ -259,8 +262,7 @@ static struct platform_device *bcma_hcd_
 | 
						|
 	hci_res[1].start = dev->irq;
 | 
						|
 	hci_res[1].flags = IORESOURCE_IRQ;
 | 
						|
 
 | 
						|
-	hci_dev = platform_device_alloc(ohci ? "ohci-platform" :
 | 
						|
-					"ehci-platform" , 0);
 | 
						|
+	hci_dev = platform_device_alloc(name, 0);
 | 
						|
 	if (!hci_dev)
 | 
						|
 		return ERR_PTR(-ENOMEM);
 | 
						|
 
 | 
						|
@@ -271,12 +273,8 @@ static struct platform_device *bcma_hcd_
 | 
						|
 					    ARRAY_SIZE(hci_res));
 | 
						|
 	if (ret)
 | 
						|
 		goto err_alloc;
 | 
						|
-	if (ohci)
 | 
						|
-		ret = platform_device_add_data(hci_dev, &ohci_pdata,
 | 
						|
-					       sizeof(ohci_pdata));
 | 
						|
-	else
 | 
						|
-		ret = platform_device_add_data(hci_dev, &ehci_pdata,
 | 
						|
-					       sizeof(ehci_pdata));
 | 
						|
+	if (data)
 | 
						|
+		ret = platform_device_add_data(hci_dev, data, size);
 | 
						|
 	if (ret)
 | 
						|
 		goto err_alloc;
 | 
						|
 	ret = platform_device_add(hci_dev);
 | 
						|
@@ -333,11 +331,15 @@ static int bcma_hcd_probe(struct bcma_de
 | 
						|
 	    && chipinfo->rev == 0)
 | 
						|
 		ohci_addr = 0x18009000;
 | 
						|
 
 | 
						|
-	usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, true, ohci_addr);
 | 
						|
+	usb_dev->ohci_dev = bcma_hcd_create_pdev(dev, "ohci-platform",
 | 
						|
+						 ohci_addr, &ohci_pdata,
 | 
						|
+						 sizeof(ohci_pdata));
 | 
						|
 	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);
 | 
						|
+	usb_dev->ehci_dev = bcma_hcd_create_pdev(dev, "ehci-platform",
 | 
						|
+						 dev->addr, &ehci_pdata,
 | 
						|
+						 sizeof(ehci_pdata));
 | 
						|
 	if (IS_ERR(usb_dev->ehci_dev)) {
 | 
						|
 		err = PTR_ERR(usb_dev->ehci_dev);
 | 
						|
 		goto err_unregister_ohci_dev;
 |