static int __devinit ohci_ep93xx_start (struct usb_hcd *hcd) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ret; ohci_dbg(ohci, "ohci_ep93xx_start, ohci:%p", ohci); if ((ret = ohci_init(ohci)) < 0){ ohci_dbg(ohci, "ohci_ep93xx_start, ohci_init error=%x\n",ret); return ret; } ohci_dbg(ohci, "ohci_ep93xx_start, ohci->hcca:%p", ohci->hcca); if ((ret = ohci_run (ohci)) < 0) { pr_debug ("can't start %s", hcd->self.bus_name); ohci_stop (hcd); return ret; } create_debug_files(ohci); #ifdef DEBUG ohci_dump(ohci, 1); #endif /*DEBUG*/ return 0; }
static int __devinit ohci_superh_start(struct usb_hcd *hcd) { struct ohci_hcd *ohci = hcd_to_ohci(hcd); int ret; ohci_dbg(ohci, "ohci_superh_start, ohci:%p", ohci); ohci->hcca = dma_alloc_coherent(hcd->self.controller, sizeof *ohci->hcca, &ohci->hcca_dma, 0); if (!ohci->hcca) return -ENOMEM; memset(ohci->hcca, 0, sizeof(struct ohci_hcca)); if ((ret = ohci_mem_init(ohci)) < 0) { ohci_stop(hcd); return ret; } ohci->regs = hcd->regs; if (ohci_run(ohci) < 0) { ohci_err(ohci, "can't start\n"); ohci_stop(hcd); return -EBUSY; } create_debug_files(ohci); #ifdef DEBUG ohci_dump(ohci, 1); #endif return 0; }
static int admhc_init(struct admhcd *ahcd) { struct usb_hcd *hcd = admhcd_to_hcd(ahcd); int ret; admhc_disable(ahcd); ahcd->regs = hcd->regs; /* Disable HC interrupts */ admhc_intr_disable(ahcd, ADMHC_INTR_MIE); /* Read the number of ports unless overridden */ if (ahcd->num_ports == 0) ahcd->num_ports = admhc_read_rhdesc(ahcd) & ADMHC_RH_NUMP; ret = admhc_mem_init(ahcd); if (ret) goto err; /* init dummy endpoints */ ret = admhc_eds_init(ahcd); if (ret) goto err; create_debug_files(ahcd); return 0; err: admhc_stop(hcd); return ret; }
static int __devinit ohci_omap_start (struct usb_hcd *hcd) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ret; ohci->hcca = dma_alloc_consistent (hcd->self.controller, sizeof *ohci->hcca, &ohci->hcca_dma); if (!ohci->hcca) return -ENOMEM; memset (ohci->hcca, 0, sizeof (struct ohci_hcca)); if ((ret = ohci_mem_init (ohci)) < 0) { ohci_stop (hcd); return ret; } ohci->regs = hcd->regs; if (hc_reset (ohci) < 0) { ohci_stop (hcd); return -ENODEV; } if (hc_start (ohci) < 0) { err ("can't start %s", ohci->hcd.self.bus_name); ohci_stop (hcd); return -EBUSY; } create_debug_files (ohci); #ifdef DEBUG ohci_dump (ohci, 1); #endif return 0; }
static int __devinit ohci_spear_start(struct usb_hcd *hcd) { struct ohci_hcd *ohci = hcd_to_ohci(hcd); int ret; ret = ohci_init(ohci); if (ret < 0) return ret; ohci->regs = hcd->regs; ret = ohci_run(ohci); if (ret < 0) { dev_err(hcd->self.controller, "can't start\n"); ohci_stop(hcd); return ret; } create_debug_files(ohci); #ifdef DEBUG ohci_dump(ohci, 1); #endif return 0; }
static int __devinit ohci_pci_start (struct usb_hcd *hcd) { struct ohci_hcd *ohci = hcd_to_ohci (hcd); int ret; if (hcd->pdev) { ohci->hcca = pci_alloc_consistent (hcd->pdev, sizeof *ohci->hcca, &ohci->hcca_dma); if (!ohci->hcca) return -ENOMEM; /* AMD 756, for most chips (early revs), corrupts register * values on read ... so enable the vendor workaround. */ if (hcd->pdev->vendor == PCI_VENDOR_ID_AMD && hcd->pdev->device == 0x740c) { ohci->flags = OHCI_QUIRK_AMD756; ohci_info (ohci, "AMD756 erratum 4 workaround\n"); } /* FIXME for some of the early AMD 760 southbridges, OHCI * won't work at all. blacklist them. */ /* Apple's OHCI driver has a lot of bizarre workarounds * for this chip. Evidently control and bulk lists * can get confused. (B&W G3 models, and ...) */ else if (hcd->pdev->vendor == PCI_VENDOR_ID_OPTI && hcd->pdev->device == 0xc861) { ohci_info (ohci, "WARNING: OPTi workarounds unavailable\n"); } /* Check for NSC87560. We have to look at the bridge (fn1) to * identify the USB (fn2). This quirk might apply to more or * even all NSC stuff. */ else if (hcd->pdev->vendor == PCI_VENDOR_ID_NS) { struct pci_dev *b, *hc; hc = hcd->pdev; b = pci_find_slot (hc->bus->number, PCI_DEVFN (PCI_SLOT (hc->devfn), 1)); if (b && b->device == PCI_DEVICE_ID_NS_87560_LIO && b->vendor == PCI_VENDOR_ID_NS) { ohci->flags |= OHCI_QUIRK_SUPERIO; ohci_info (ohci, "Using NSC SuperIO setup\n"); } } } memset (ohci->hcca, 0, sizeof (struct ohci_hcca)); if ((ret = ohci_mem_init (ohci)) < 0) { ohci_stop (hcd); return ret; } if (hc_start (ohci) < 0) { ohci_err (ohci, "can't start\n"); ohci_stop (hcd); return -EBUSY; } create_debug_files (ohci); #ifdef DEBUG ohci_dump (ohci, 1); #endif return 0; }