Exemple #1
0
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;
}