On Wednesday 02 February 2005 12:30 pm, David Brownell wrote:
> - The OMAP patch doesn't apply against the latest omap-ohci; here's
> a version I sanity-tested. (Applies against Greg's BK or against
> the current linux-omap tree.)
Erm, _here_ is that version.
- Dave
--- 1.47/drivers/usb/host/ohci-omap.c 2005-01-20 02:30:19 -08:00
+++ edited/drivers/usb/host/ohci-omap.c 2005-02-02 12:16:08 -08:00
@@ -285,8 +285,6 @@
/*-------------------------------------------------------------------------*/
-void usb_hcd_omap_remove (struct usb_hcd *, struct platform_device *);
-
/* configure so an HC device and id are always provided */
/* always called with process context; sleeping is OK */
@@ -303,7 +301,7 @@
struct platform_device *pdev)
{
int retval;
- struct usb_hcd *hcd = 0;
+ struct usb_hcd *hcd;
struct ohci_hcd *ohci;
if (pdev->num_resources != 2) {
@@ -325,7 +323,9 @@
return -EBUSY;
}
- hcd = usb_create_hcd (driver);
+ hcd = usb_create_hcd (driver, &pdev->dev,
+ (void __iomem *) pdev->resource[0].start,
+ pdev->dev.bus_id);
if (hcd == NULL){
dev_dbg(&pdev->dev, "hcd_alloc failed\n");
retval = -ENOMEM;
@@ -335,57 +335,30 @@
ohci = hcd_to_ohci(hcd);
ohci_hcd_init(ohci);
- hcd->irq = pdev->resource[1].start;
hcd->regs = (void *)pdev->resource[0].start;
- hcd->self.controller = &pdev->dev;
-
- retval = hcd_buffer_create (hcd);
- if (retval != 0) {
- dev_dbg(&pdev->dev, "pool alloc fail\n");
- goto err2;
- }
-
retval = omap_start_hc(ohci, pdev);
if (retval < 0)
goto err2;
- retval = request_irq (hcd->irq, usb_hcd_irq,
- SA_INTERRUPT, hcd_name, hcd);
- if (retval != 0) {
- dev_dbg(&pdev->dev, "request_irq failed\n");
- retval = -EBUSY;
- goto err3;
- }
-
- dev_info(&pdev->dev, "%s at 0x%p, irq %d\n",
- hcd->product_desc, hcd->regs, hcd->irq);
-
- hcd->self.bus_name = pdev->dev.bus_id;
- usb_register_bus (&hcd->self);
-
- if ((retval = driver->start (hcd)) < 0) {
- usb_hcd_omap_remove(hcd, pdev);
+ retval = usb_add_hcd(hcd, pdev->resource[1].start,
+ usb_hcd_irq, SA_INTERRUPT,
+ (unsigned long) hcd->regs);
+ if (retval == 0)
return retval;
- }
-
- return 0;
- err3:
- hcd_buffer_destroy (hcd);
+ omap_stop_hc(pdev);
err2:
dev_set_drvdata(&pdev->dev, NULL);
usb_put_hcd(hcd);
err1:
- omap_stop_hc(pdev);
release_mem_region(pdev->resource[0].start,
- pdev->resource[0].end - pdev->resource[0].start + 1);
+ pdev->resource[0].end - pdev->resource[0].start + 1);
return retval;
}
-/* may be called without controller electrically present */
/* may be called with controller, bus, and devices active */
/**
@@ -400,31 +373,15 @@
*/
void usb_hcd_omap_remove (struct usb_hcd *hcd, struct platform_device *pdev)
{
- dev_info(&pdev->dev, "remove: state %x\n", hcd->state);
-
- if (in_interrupt ())
- BUG ();
-
- hcd->state = USB_STATE_QUIESCING;
-
- dev_dbg(&pdev->dev, "roothub graceful disconnect\n");
- usb_disconnect (&hcd->self.root_hub);
-
- hcd->driver->stop (hcd);
- hcd_buffer_destroy (hcd);
- hcd->state = USB_STATE_HALT;
-
+ usb_remove_hcd(hcd);
if (machine_is_omap_osk())
omap_free_gpio(9);
-
- free_irq (hcd->irq, hcd);
-
- usb_deregister_bus (&hcd->self);
-
omap_stop_hc(pdev);
+ dev_set_drvdata(&pdev->dev, NULL);
+ usb_put_hcd(hcd);
release_mem_region(pdev->resource[0].start,
- pdev->resource[0].end - pdev->resource[0].start + 1);
+ pdev->resource[0].end - pdev->resource[0].start + 1);
}
/*-------------------------------------------------------------------------*/
@@ -459,7 +416,7 @@
* generic hardware linkage
*/
.irq = ohci_irq,
- .flags = HCD_USB11,
+ .flags = HCD_MEMORY | HCD_USB11,
/*
* basic lifecycle operations