X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/546b5ed544503182a9b3e981bc11feebd6042b21..76604034e6584928b77dcd1f23849b8394e910f7:/target/linux/ar71xx/files/drivers/usb/host/ohci-ar71xx.c diff --git a/target/linux/ar71xx/files/drivers/usb/host/ohci-ar71xx.c b/target/linux/ar71xx/files/drivers/usb/host/ohci-ar71xx.c index 7af7fafb7..48457e013 100644 --- a/target/linux/ar71xx/files/drivers/usb/host/ohci-ar71xx.c +++ b/target/linux/ar71xx/files/drivers/usb/host/ohci-ar71xx.c @@ -1,12 +1,17 @@ /* - * OHCI HCD (Host Controller Driver) for USB. + * OHCI HCD (Host Controller Driver) for USB. * - * Copyright (C) 2007 Atheros Communications, Inc. - * Copyright (C) 2008 Gabor Juhos - * Copyright (C) 2008 Imre Kaloz + * Bus Glue for Atheros AR71xx built-in OHCI controller. * - * Bus Glue for Atheros AR71xx built-in OHCI controller + * Copyright (C) 2008 Gabor Juhos + * Copyright (C) 2008 Imre Kaloz * + * Parts of this file are based on Atheros' 2.6.15 BSP + * Copyright (C) 2007 Atheros Communications, Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. */ #include @@ -14,19 +19,8 @@ extern int usb_disabled(void); -static void ar71xx_start_ohci(struct platform_device *pdev) -{ -} - -static void ar71xx_stop_ohci(struct platform_device *pdev) -{ - /* - * TODO: implement - */ -} - -int usb_hcd_ar71xx_probe(const struct hc_driver *driver, - struct platform_device *pdev) +static int usb_hcd_ar71xx_probe(const struct hc_driver *driver, + struct platform_device *pdev) { struct usb_hcd *hcd; struct resource *res; @@ -36,19 +30,19 @@ int usb_hcd_ar71xx_probe(const struct hc_driver *driver, res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); if (!res) { dev_dbg(&pdev->dev, "no IRQ specified for %s\n", - pdev->dev.bus_id); + dev_name(&pdev->dev)); return -ENODEV; } irq = res->start; - hcd = usb_create_hcd(driver, &pdev->dev, pdev->dev.bus_id); + hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); if (!hcd) return -ENOMEM; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_dbg(&pdev->dev, "no base address specified for %s\n", - pdev->dev.bus_id); + dev_name(&pdev->dev)); ret = -ENODEV; goto err_put_hcd; } @@ -68,7 +62,6 @@ int usb_hcd_ar71xx_probe(const struct hc_driver *driver, goto err_release_region; } - ar71xx_start_ohci(pdev); ohci_hcd_init(hcd_to_ohci(hcd)); ret = usb_add_hcd(hcd, irq, IRQF_DISABLED); @@ -77,34 +70,18 @@ int usb_hcd_ar71xx_probe(const struct hc_driver *driver, return 0; -err_stop_hcd: - ar71xx_stop_ohci(pdev); + err_stop_hcd: iounmap(hcd->regs); -err_release_region: + err_release_region: release_mem_region(hcd->rsrc_start, hcd->rsrc_len); -err_put_hcd: + err_put_hcd: usb_put_hcd(hcd); return ret; } - -/* may be called without controller electrically present */ -/* may be called with controller, bus, and devices active */ - -/** - * usb_hcd_ar71xx_remove - shutdown processing for AR71xx HCDs - * @dev: USB Host Controller being removed - * Context: !in_interrupt() - * - * Reverses the effect of usb_hcd_ar71xx_probe(), first invoking - * the HCD's stop() method. It is always called from a thread - * context, normally "rmmod", "apmd", or something similar. - * - */ void usb_hcd_ar71xx_remove(struct usb_hcd *hcd, struct platform_device *pdev) { usb_remove_hcd(hcd); - ar71xx_stop_ohci(pdev); iounmap(hcd->regs); release_mem_region(hcd->rsrc_start, hcd->rsrc_len); usb_put_hcd(hcd); @@ -125,32 +102,23 @@ static int __devinit ohci_ar71xx_start(struct usb_hcd *hcd) return 0; -err: + err: ohci_stop(hcd); return ret; } static const struct hc_driver ohci_ar71xx_hc_driver = { - .description = hcd_name, - .product_desc = "Atheros AR71xx built-in OHCI controller", - .hcd_priv_size = sizeof(struct ohci_hcd), + .description = hcd_name, + .product_desc = "Atheros AR71xx built-in OHCI controller", + .hcd_priv_size = sizeof(struct ohci_hcd), - /* - * generic hardware linkage - */ - .irq = ohci_irq, - .flags = HCD_USB11 | HCD_MEMORY, + .irq = ohci_irq, + .flags = HCD_USB11 | HCD_MEMORY, - /* - * basic lifecycle operations - */ - .start = ohci_ar71xx_start, - .stop = ohci_stop, - .shutdown = ohci_shutdown, + .start = ohci_ar71xx_start, + .stop = ohci_stop, + .shutdown = ohci_shutdown, - /* - * managing i/o requests and associated device resources - */ .urb_enqueue = ohci_urb_enqueue, .urb_dequeue = ohci_urb_dequeue, .endpoint_disable = ohci_endpoint_disable, @@ -170,13 +138,10 @@ static const struct hc_driver ohci_ar71xx_hc_driver = { static int ohci_hcd_ar71xx_drv_probe(struct platform_device *pdev) { - int ret; - - ret = -ENODEV; - if (!usb_disabled()) - ret = usb_hcd_ar71xx_probe(&ohci_ar71xx_hc_driver, pdev); + if (usb_disabled()) + return -ENODEV; - return ret; + return usb_hcd_ar71xx_probe(&ohci_ar71xx_hc_driver, pdev); } static int ohci_hcd_ar71xx_drv_remove(struct platform_device *pdev) @@ -187,6 +152,8 @@ static int ohci_hcd_ar71xx_drv_remove(struct platform_device *pdev) return 0; } +MODULE_ALIAS("platform:ar71xx-ohci"); + static struct platform_driver ohci_hcd_ar71xx_driver = { .probe = ohci_hcd_ar71xx_drv_probe, .remove = ohci_hcd_ar71xx_drv_remove, @@ -196,5 +163,3 @@ static struct platform_driver ohci_hcd_ar71xx_driver = { .owner = THIS_MODULE, }, }; - -MODULE_ALIAS("ar71xx-ohci");