提交 d14feb5e 编写于 作者: D Daniel Mack 提交者: Greg Kroah-Hartman

[PATCH] USB: au1200: EHCI and OHCI fixes

I received an DBAU1200 eval kit from AMD a few days ago and tried to
enable the USB2 port, but the current linux-2.6 GIT did not even
compile with CONFIG_SOC_1200, CONFIG_SOC_AU1X00, CONFIG_USB_EHCI and
CONFIG_USB_OHCI set.
Furthermore, in ehci-hcd.c, platform_driver_register() was called with
an improper argument of type 'struct device_driver *' which of course
ended up in a kernel oops. How could that ever have worked on your
machines?

Anyway, here's a trivial patch that makes the USB subsystem working
on my board for both OHCI and EHCI.
It also removes the /* FIXME use "struct platform_driver" */.
Signed-off-by: NDaniel Mack <daniel@caiaq.de>
Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
Acked-by: NDavid Brownell <david-b@pacbell.net>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 18577a61
...@@ -41,8 +41,6 @@ ...@@ -41,8 +41,6 @@
#endif #endif
#define USBH_DISABLE (USB_MCFG_EBMEN | USB_MCFG_EMEMEN) #define USBH_DISABLE (USB_MCFG_EBMEN | USB_MCFG_EMEMEN)
#endif /* Au1200 */
extern int usb_disabled(void); extern int usb_disabled(void);
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
...@@ -107,9 +105,9 @@ int usb_ehci_au1xxx_probe(const struct hc_driver *driver, ...@@ -107,9 +105,9 @@ int usb_ehci_au1xxx_probe(const struct hc_driver *driver,
/* Au1200 AB USB does not support coherent memory */ /* Au1200 AB USB does not support coherent memory */
if (!(read_c0_prid() & 0xff)) { if (!(read_c0_prid() & 0xff)) {
pr_info("%s: this is chip revision AB!\n", dev->dev.name); pr_info("%s: this is chip revision AB!\n", dev->name);
pr_info("%s: update your board or re-configure the kernel\n", pr_info("%s: update your board or re-configure the kernel\n",
dev->dev.name); dev->name);
return -ENODEV; return -ENODEV;
} }
#endif #endif
...@@ -228,9 +226,8 @@ static const struct hc_driver ehci_au1xxx_hc_driver = { ...@@ -228,9 +226,8 @@ static const struct hc_driver ehci_au1xxx_hc_driver = {
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
static int ehci_hcd_au1xxx_drv_probe(struct device *dev) static int ehci_hcd_au1xxx_drv_probe(struct platform_device *pdev)
{ {
struct platform_device *pdev = to_platform_device(dev);
struct usb_hcd *hcd = NULL; struct usb_hcd *hcd = NULL;
int ret; int ret;
...@@ -243,10 +240,9 @@ static int ehci_hcd_au1xxx_drv_probe(struct device *dev) ...@@ -243,10 +240,9 @@ static int ehci_hcd_au1xxx_drv_probe(struct device *dev)
return ret; return ret;
} }
static int ehci_hcd_au1xxx_drv_remove(struct device *dev) static int ehci_hcd_au1xxx_drv_remove(struct platform_device *pdev)
{ {
struct platform_device *pdev = to_platform_device(dev); struct usb_hcd *hcd = platform_get_drvdata(pdev);
struct usb_hcd *hcd = dev_get_drvdata(dev);
usb_ehci_au1xxx_remove(hcd, pdev); usb_ehci_au1xxx_remove(hcd, pdev);
return 0; return 0;
...@@ -269,12 +265,13 @@ static int ehci_hcd_au1xxx_drv_resume(struct device *dev) ...@@ -269,12 +265,13 @@ static int ehci_hcd_au1xxx_drv_resume(struct device *dev)
} }
*/ */
MODULE_ALIAS("au1xxx-ehci"); MODULE_ALIAS("au1xxx-ehci");
/* FIXME use "struct platform_driver" */ static struct platform_driver ehci_hcd_au1xxx_driver = {
static struct device_driver ehci_hcd_au1xxx_driver = {
.name = "au1xxx-ehci",
.bus = &platform_bus_type,
.probe = ehci_hcd_au1xxx_drv_probe, .probe = ehci_hcd_au1xxx_drv_probe,
.remove = ehci_hcd_au1xxx_drv_remove, .remove = ehci_hcd_au1xxx_drv_remove,
/*.suspend = ehci_hcd_au1xxx_drv_suspend, */ /*.suspend = ehci_hcd_au1xxx_drv_suspend, */
/*.resume = ehci_hcd_au1xxx_drv_resume, */ /*.resume = ehci_hcd_au1xxx_drv_resume, */
.driver = {
.name = "au1xxx-ehci",
.bus = &platform_bus_type
}
}; };
...@@ -110,6 +110,7 @@ static void au1xxx_start_ohc(struct platform_device *dev) ...@@ -110,6 +110,7 @@ static void au1xxx_start_ohc(struct platform_device *dev)
printk(KERN_DEBUG __FILE__ printk(KERN_DEBUG __FILE__
": Clock to USB host has been enabled \n"); ": Clock to USB host has been enabled \n");
#endif
} }
static void au1xxx_stop_ohc(struct platform_device *dev) static void au1xxx_stop_ohc(struct platform_device *dev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册