static void __exit sw_hci_sunxi_exit(void) { /* XXX '.used' flag is for USB port, not for EHCI or OHCI. So it can be checked this way */ if (sw_ehci1.used) { platform_device_unregister(&sw_usb_ehci_device[0]); platform_device_unregister(&sw_usb_ohci_device[0]); clock_exit(&sw_ehci1, 0); clock_exit(&sw_ohci1, 1); free_pin(sw_ehci1.drv_vbus_Handle); } if (sw_ehci2.used) { platform_device_unregister(&sw_usb_ehci_device[1]); platform_device_unregister(&sw_usb_ohci_device[1]); clock_exit(&sw_ehci2, 0); clock_exit(&sw_ohci2, 1); free_pin(sw_ehci2.drv_vbus_Handle); } return; }
/* ******************************************************************************* * sw_hci_sun5i_exit * * Description: * void * * Parameters: * void * * Return value: * void * * note: * void * ******************************************************************************* */ static void __exit sw_hci_sun5i_exit(void) { #ifdef CONFIG_USB_SW_SUN5I_EHCI0 if(sw_ehci0.used){ platform_device_unregister(&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_unregister(&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_unregister(&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_unregister(&sw_usb_ohci_device[1]); }else{ DMSG_PANIC("ERR: usb%d %s is disable\n", sw_ohci1.usbc_no, sw_ohci1.hci_name); } #endif /* USB1 */ exit_sw_hci(&sw_ehci0, 0); exit_sw_hci(&sw_ohci0, 1); free_pin(usb1_drv_vbus_Handle); usb1_drv_vbus_Handle = 0; /* USB2 */ exit_sw_hci(&sw_ehci1, 0); exit_sw_hci(&sw_ohci1, 1); free_pin(usb2_drv_vbus_Handle); usb2_drv_vbus_Handle = 0; return ; }