You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.1 KiB
113 lines
3.1 KiB
--- a/drivers/staging/octeon-usb/octeon-hcd.c
|
|
+++ b/drivers/staging/octeon-usb/octeon-hcd.c
|
|
@@ -673,8 +673,9 @@ static const struct hc_driver octeon_hc_
|
|
};
|
|
|
|
|
|
-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 @@ static int octeon_usb_driver_probe(struc
|
|
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 @@ static int octeon_usb_driver_remove(stru
|
|
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 @@ static int __init octeon_usb_module_init
|
|
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");
|
|
|