static int __init sa1111_ohci_init(void) { int ret; /* * Request memory resources. */ // if (!request_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT, "usb-ohci")) // return -EBUSY; sa1111_ohci_configure(); /* * Initialise the generic OHCI driver. */ ret = hc_add_ohci(SA1111_FAKE_PCIDEV, NIRQHCIM, (void *)&USB_OHCI_OP_BASE, 0, &sa1111_ohci, "usb-ohci", "sa1111"); // if (ret) // release_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT); #ifdef CONFIG_SA1100_BADGE4 if (machine_is_badge4() && (!ret)) { /* found the controller, so now power the bus */ badge4_set_5V(BADGE4_5V_USB, 1); } #endif return ret; }
static int __devinit hc_found_ohci (struct pci_dev *dev, int irq, void *mem_base, const struct pci_device_id *id) { unsigned long flags = id->driver_data; printk(KERN_INFO __FILE__ ": usb-%s, %s\n", dev->slot_name, dev->name); /* 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 I don't know.. */ if(dev->vendor == PCI_VENDOR_ID_NS) { struct pci_dev *fn1 = pci_find_slot(dev->bus->number, PCI_DEVFN(PCI_SLOT(dev->devfn), 1)); if(fn1 && fn1->vendor == PCI_VENDOR_ID_NS && fn1->device == PCI_DEVICE_ID_NS_87560_LIO) flags |= OHCI_QUIRK_SUCKYIO; } if (flags & OHCI_QUIRK_SUCKYIO) printk (KERN_INFO __FILE__ ": Using NSC SuperIO setup\n"); if (flags & OHCI_QUIRK_AMD756) printk (KERN_INFO __FILE__ ": AMD756 erratum 4 workaround\n"); return hc_add_ohci(dev, irq, mem_base, flags, ohci_pci_driver.name, dev->slot_name); }
static int h5400_ohci_probe (struct device *dev) { struct platform_device *sdev; int irq; void *mem_base; unsigned long flags = 0; int result = 0; sdev = to_platform_device (dev); mem_base = (void *)sdev->resource[1].start; irq = sdev->resource[2].start; /* make sure the clocks are enabled */ samcop_clock_enable (dev->parent, SAMCOP_CPM_CLKCON_USBHOST_CLKEN, 1); samcop_clock_enable (dev->parent, SAMCOP_CPM_CLKCON_UCLK_EN, 0); /* both needed? */ samcop_set_gpio_b (dev->parent, SAMCOP_GPIO_GPB_RF_POWER_ON | SAMCOP_GPIO_GPB_WLAN_POWER_ON, SAMCOP_GPIO_GPB_RF_POWER_ON | SAMCOP_GPIO_GPB_WLAN_POWER_ON); led_trigger_event_shared(h5400_radio_trig, LED_FULL); #if 0 #warning port to kernel 2.6 msleep (100); result = hc_add_ohci (pcidev, irq, mem_base, flags, (ohci_t **)&dev->driver_data, "h5400-ohci", "asic"); if (result) h5400_ohci_remove (dev); #endif return result; }
/* * ps2_ohci_init * this will be run at kernel boot time or module insertion */ static int __init ps2_ohci_init(void) { int ret; /* * attach OHCI device */ ret = hc_add_ohci((struct pci_dev *)NULL, IRQ_SBUS_USB, (void *)KSEG1ADDR(0x1f801600), 0, &ps2_ohci, "usb-ohci", "builtin"); return ret; }