static int __init sunxi_hci_init(void) { /* USB1 */ init_sunxi_hci(&sunxi_ehci0, 1, 0, ehci_name); init_sunxi_hci(&sunxi_ohci0, 1, 1, ohci_name); alloc_pin(&sunxi_ehci0); #ifdef CONFIG_ARCH_SUN9IW1 hci_ahb_gate = clk_get(NULL, USBHCI_CLK); if (IS_ERR(hci_ahb_gate)){ DMSG_PANIC("ERR: OPEN hci_ahb_gate failed.\n"); } #ifdef CONFIG_USB_SUNXI_HSIC vbat_hsic_hdle = regulator_get(NULL, vbat_hsic_name); if(IS_ERR(vbat_hsic_hdle)) { DMSG_PANIC("ERR: some error happen, vbat_hsic_hdle fail to get regulator!\n"); return 0; } if(regulator_set_voltage(vbat_hsic_hdle , VBAT_HSIC_VALUE, VBAT_HSIC_VALUE) < 0 ){ DMSG_PANIC("ERR: hsic_vbat regulator_set_voltage fail\n",); regulator_put(vbat_hsic_hdle); return 0; }
/* ******************************************************************************* * sw_hci_sun4i_init * * Description: * void * * Parameters: * void * * Return value: * void * * note: * void * ******************************************************************************* */ static int __init sw_hci_sun4i_init(void) { printk("[%s %d]\n", __func__, __LINE__); /* USB1 */ init_sw_hci(&sw_ehci0, 1, 0, ehci_name); init_sw_hci(&sw_ohci0, 1, 1, ohci_name); alloc_pin(&sw_ehci0); /* USB2 */ init_sw_hci(&sw_ehci1, 2, 0, ehci_name); init_sw_hci(&sw_ohci1, 2, 1, ohci_name); alloc_pin(&sw_ehci1); #ifdef CONFIG_USB_SW_SUN7I_EHCI0 if(sw_ehci0.used){ platform_device_register(&sw_usb_ehci_device[0]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ehci0.usbc_no, sw_ehci0.hci_name); } #endif #ifdef CONFIG_USB_SW_SUN7I_OHCI0 if(sw_ohci0.used){ platform_device_register(&sw_usb_ohci_device[0]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ohci0.usbc_no, sw_ohci0.hci_name); } #endif #ifdef CONFIG_USB_SW_SUN7I_EHCI1 if(sw_ehci1.used){ platform_device_register(&sw_usb_ehci_device[1]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ehci1.usbc_no, sw_ehci1.hci_name); } #endif #ifdef CONFIG_USB_SW_SUN7I_OHCI1 if(sw_ohci1.used){ platform_device_register(&sw_usb_ohci_device[1]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ohci1.usbc_no, sw_ohci1.hci_name); } #endif return 0; }
static int init_sw_hci(struct sw_hci_hcd *sw_hci, u32 usbc_no, u32 ohci, const char *hci_name) { s32 ret = 0; u32 drv_vbus_Handle = 0; memset(sw_hci, 0, sizeof(struct sw_hci_hcd)); sw_hci->usbc_no = usbc_no; sprintf(sw_hci->hci_name, "%s%d", hci_name, sw_hci->usbc_no); sw_hci->usb_vbase = (void __iomem *)usbc_base[sw_hci->usbc_no]; get_usb_cfg(sw_hci); drv_vbus_Handle = alloc_pin(&sw_hci->drv_vbus_gpio_set); if (drv_vbus_Handle == 0) { DMSG_PANIC("ERR: alloc_pin failed\n"); goto failed1; } sw_hci->drv_vbus_Handle = drv_vbus_Handle; sw_hci->open_clock = open_clock; sw_hci->close_clock = close_clock; sw_hci->set_power = sw_set_vbus; sw_hci->usb_passby = usb_passby; sw_hci->port_configure = hci_port_configure; ret = clock_init(sw_hci, ohci); if (ret != 0) { DMSG_PANIC("ERR: clock_init failed\n"); goto failed1; } print_sw_hci(sw_hci); return 0; failed1: return -1; }
/* ******************************************************************************* * sw_hci_sun5i_init * * Description: * void * * Parameters: * void * * Return value: * void * * note: * void * ******************************************************************************* */ static int __init sw_hci_sun5i_init(void) { /* USB1 */ init_sw_hci(&sw_ehci0, 1, 0, ehci_name); init_sw_hci(&sw_ohci0, 1, 1, ohci_name); usb1_drv_vbus_Handle = alloc_pin(&sw_ehci0.drv_vbus_gpio_set); if(usb1_drv_vbus_Handle == 0){ DMSG_PANIC("ERR: usb1 alloc_pin failed\n"); goto failed0; } sw_ehci0.drv_vbus_Handle = usb1_drv_vbus_Handle; sw_ohci0.drv_vbus_Handle = usb1_drv_vbus_Handle; /* USB2 */ //init_sw_hci(&sw_ehci1, 2, 0, ehci_name); //init_sw_hci(&sw_ohci1, 2, 1, ohci_name); //usb2_drv_vbus_Handle = alloc_pin(&sw_ehci1.drv_vbus_gpio_set); //if(usb2_drv_vbus_Handle == 0){ // DMSG_PANIC("ERR: usb2 alloc_pin failed\n"); // goto failed0; //} //sw_ehci1.drv_vbus_Handle = usb2_drv_vbus_Handle; //sw_ohci1.drv_vbus_Handle = usb2_drv_vbus_Handle; #ifdef CONFIG_USB_SW_SUN5I_EHCI0 if(sw_ehci0.used){ platform_device_register(&sw_usb_ehci_device[0]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ehci0.usbc_no, sw_ehci0.hci_name); } #endif #ifdef CONFIG_USB_SW_SUN5I_OHCI0 if(sw_ohci0.used){ platform_device_register(&sw_usb_ohci_device[0]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ohci0.usbc_no, sw_ohci0.hci_name); } #endif #ifdef CONFIG_USB_SW_SUN5I_EHCI1 if(sw_ehci1.used){ platform_device_register(&sw_usb_ehci_device[1]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ehci1.usbc_no, sw_ehci1.hci_name); } #endif #ifdef CONFIG_USB_SW_SUN5I_OHCI1 if(sw_ohci1.used){ platform_device_register(&sw_usb_ohci_device[1]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ohci1.usbc_no, sw_ohci1.hci_name); } #endif return 0; failed0: return -1; }