aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/octeon/patches-3.10/0004-fix_hcd.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/octeon/patches-3.10/0004-fix_hcd.patch')
-rw-r--r--target/linux/octeon/patches-3.10/0004-fix_hcd.patch115
1 files changed, 115 insertions, 0 deletions
diff --git a/target/linux/octeon/patches-3.10/0004-fix_hcd.patch b/target/linux/octeon/patches-3.10/0004-fix_hcd.patch
new file mode 100644
index 0000000000..e8cadbfb02
--- /dev/null
+++ b/target/linux/octeon/patches-3.10/0004-fix_hcd.patch
@@ -0,0 +1,115 @@
+Index: linux-3.10/drivers/staging/octeon-usb/octeon-hcd.c
+===================================================================
+--- linux-3.10.orig/drivers/staging/octeon-usb/octeon-hcd.c 2013-08-03 16:11:44.269610286 +0200
++++ linux-3.10/drivers/staging/octeon-usb/octeon-hcd.c 2013-08-04 13:18:54.011421971 +0200
+@@ -673,8 +673,9 @@
+ };
+
+
+-static int octeon_usb_driver_probe(struct device *dev)
++static int octeon_usb_driver_probe(struct platform_device *pdev)
+ {
++ struct device *dev = &pdev->dev;
+ int status;
+ int usb_num = to_platform_device(dev)->id;
+ int irq = platform_get_irq(to_platform_device(dev), 0);
+@@ -728,8 +729,9 @@
+ return 0;
+ }
+
+-static int octeon_usb_driver_remove(struct device *dev)
++static int octeon_usb_driver_remove(struct platform_device *pdev)
+ {
++ struct device *dev = &pdev->dev;
+ int status;
+ struct usb_hcd *hcd = dev_get_drvdata(dev);
+ struct octeon_hcd *priv = hcd_to_octeon(hcd);
+@@ -748,30 +750,35 @@
+ return 0;
+ }
+
+-static struct device_driver octeon_usb_driver = {
+- .name = "OcteonUSB",
+- .bus = &platform_bus_type,
++static struct platform_driver octeon_usb_driver = {
++ .driver = {
++ .name = "OcteonUSB",
++ .owner = THIS_MODULE,
++ },
+ .probe = octeon_usb_driver_probe,
+ .remove = octeon_usb_driver_remove,
+ };
+
++static struct resource octeon_usb_resources = {
++ .start = OCTEON_IRQ_USB0,
++ .end = OCTEON_IRQ_USB0,
++ .flags = IORESOURCE_IRQ,
++};
++
++static struct platform_device octeon_usb_device = {
++ .name = "OcteonUSB",
++ .id = 0,
++ .resource = &octeon_usb_resources,
++ .num_resources = 1,
++};
+
+-#define MAX_USB_PORTS 10
+-static struct platform_device *pdev_glob[MAX_USB_PORTS];
+-static int octeon_usb_registered;
+ static int __init octeon_usb_module_init(void)
+ {
+ int num_devices = cvmx_usb_get_num_ports();
+- int device;
+
+ if (usb_disabled() || num_devices == 0)
+ return -ENODEV;
+
+- if (driver_register(&octeon_usb_driver))
+- return -ENOMEM;
+-
+- octeon_usb_registered = 1;
+-
+ /*
+ * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
+ * IOB priority registers. Under heavy network load USB
+@@ -792,37 +799,14 @@
+ cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
+ }
+
+- for (device = 0; device < num_devices; device++) {
+- struct resource irq_resource;
+- struct platform_device *pdev;
+- memset(&irq_resource, 0, sizeof(irq_resource));
+- irq_resource.start = (device == 0) ? OCTEON_IRQ_USB0 : OCTEON_IRQ_USB1;
+- irq_resource.end = irq_resource.start;
+- irq_resource.flags = IORESOURCE_IRQ;
+- pdev = platform_device_register_simple((char *)octeon_usb_driver. name, device, &irq_resource, 1);
+- if (IS_ERR(pdev)) {
+- driver_unregister(&octeon_usb_driver);
+- octeon_usb_registered = 0;
+- return PTR_ERR(pdev);
+- }
+- if (device < MAX_USB_PORTS)
+- pdev_glob[device] = pdev;
++ platform_device_register(&octeon_usb_device);
+
+- }
+- return 0;
++ return platform_driver_register(&octeon_usb_driver);
+ }
+
+ static void __exit octeon_usb_module_cleanup(void)
+ {
+- int i;
+-
+- for (i = 0; i < MAX_USB_PORTS; i++)
+- if (pdev_glob[i]) {
+- platform_device_unregister(pdev_glob[i]);
+- pdev_glob[i] = NULL;
+- }
+- if (octeon_usb_registered)
+- driver_unregister(&octeon_usb_driver);
++ platform_driver_unregister(&octeon_usb_driver);
+ }
+
+ MODULE_LICENSE("GPL");