X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fusb%2Fhost%2Fohci-pxa27x.c;fp=drivers%2Fusb%2Fhost%2Fohci-pxa27x.c;h=8283c1aafcf9f6849865d5f959a3de6034b7e6e3;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=44582d077c1e9ffa253e6a4931cf99e1c6fafa8a;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c index 44582d077..8283c1aaf 100644 --- a/drivers/usb/host/ohci-pxa27x.c +++ b/drivers/usb/host/ohci-pxa27x.c @@ -206,21 +206,20 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, goto err1; } - hcd = driver->hcd_alloc (); - if (hcd == NULL){ - pr_debug ("hcd_alloc failed"); + if(dev->resource[1].flags != IORESOURCE_IRQ){ + pr_debug ("resource[1] is not IORESOURCE_IRQ"); retval = -ENOMEM; goto err1; } - if(dev->resource[1].flags != IORESOURCE_IRQ){ - pr_debug ("resource[1] is not IORESOURCE_IRQ"); + hcd = usb_create_hcd (driver); + if (hcd == NULL){ + pr_debug ("hcd_alloc failed"); retval = -ENOMEM; goto err1; } + ohci_hcd_init(hcd_to_ohci(hcd)); - hcd->driver = (struct hc_driver *) driver; - hcd->description = driver->description; hcd->irq = dev->resource[1].start; hcd->regs = addr; hcd->self.controller = &dev->dev; @@ -228,29 +227,21 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, retval = hcd_buffer_create (hcd); if (retval != 0) { pr_debug ("pool alloc fail"); - goto err1; + goto err2; } retval = request_irq (hcd->irq, usb_hcd_irq, SA_INTERRUPT, - hcd->description, hcd); + hcd->driver->description, hcd); if (retval != 0) { pr_debug("request_irq(%d) failed with retval %d\n",hcd->irq,retval); retval = -EBUSY; - goto err2; + goto err3; } pr_debug ("%s (pxa27x) at 0x%p, irq %d", - hcd->description, hcd->regs, hcd->irq); + hcd->driver->description, hcd->regs, hcd->irq); - usb_bus_init (&hcd->self); - hcd->self.op = &usb_hcd_operations; - hcd->self.release = &usb_hcd_release; - hcd->self.hcpriv = (void *) hcd; hcd->self.bus_name = "pxa27x"; - hcd->product_desc = "PXA27x OHCI"; - - INIT_LIST_HEAD (&hcd->dev_list); - usb_register_bus (&hcd->self); if ((retval = driver->start (hcd)) < 0) { @@ -261,10 +252,11 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, *hcd_out = hcd; return 0; - err2: + err3: hcd_buffer_destroy (hcd); + err2: + usb_put_hcd(hcd); err1: - kfree(hcd); pxa27x_stop_hc(dev); release_mem_region(dev->resource[0].start, dev->resource[0].end @@ -325,7 +317,7 @@ ohci_pxa27x_start (struct usb_hcd *hcd) return ret; if ((ret = ohci_run (ohci)) < 0) { - err ("can't start %s", ohci->hcd.self.bus_name); + err ("can't start %s", hcd->self.bus_name); ohci_stop (hcd); return ret; } @@ -337,6 +329,8 @@ ohci_pxa27x_start (struct usb_hcd *hcd) static const struct hc_driver ohci_pxa27x_hc_driver = { .description = hcd_name, + .product_desc = "PXA27x OHCI", + .hcd_priv_size = sizeof(struct ohci_hcd), /* * generic hardware linkage @@ -350,11 +344,6 @@ static const struct hc_driver ohci_pxa27x_hc_driver = { .start = ohci_pxa27x_start, .stop = ohci_stop, - /* - * memory lifecycle (except per-request) - */ - .hcd_alloc = ohci_hcd_alloc, - /* * managing i/o requests and associated device resources */