/* * Init */ static int __init usb_init(void) { int retval; if (nousb) { pr_info("%s: USB support disabled\n", usbcore_name); return 0; } retval = bus_register(&usb_bus_type); if (retval) goto bus_register_failed; retval = bus_register_notifier(&usb_bus_type, &usb_bus_nb); if (retval) goto bus_notifier_failed; retval = usb_host_init(); if (retval) goto host_init_failed; retval = usb_major_init(); if (retval) goto major_init_failed; retval = usb_register(&usbfs_driver); if (retval) goto driver_register_failed; retval = usb_devio_init(); if (retval) goto usb_devio_init_failed; retval = usbfs_init(); if (retval) goto fs_init_failed; retval = usb_hub_init(); if (retval) goto hub_init_failed; retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE); if (!retval) goto out; usb_hub_cleanup(); hub_init_failed: usbfs_cleanup(); fs_init_failed: usb_devio_cleanup(); usb_devio_init_failed: usb_deregister(&usbfs_driver); driver_register_failed: usb_major_cleanup(); major_init_failed: usb_host_cleanup(); host_init_failed: bus_unregister_notifier(&usb_bus_type, &usb_bus_nb); bus_notifier_failed: bus_unregister(&usb_bus_type); bus_register_failed: out: return retval; }
/** * Disposes the bus event module * * param [in] h bus handle * * @return E_ERR_SUCCESS otherwise */ e_mmgr_errors_t bus_ev_dispose(bus_ev_hdle_t *h) { bus_ev_t *bus_events = (bus_ev_t *)h; if (bus_events) { if (bus_events->ctx) usb_host_cleanup(bus_events->ctx); free(bus_events); } return E_ERR_SUCCESS; }
/* * Init */ static int __init usb_init(void) { int retval; if (nousb) { pr_info ("%s: USB support disabled\n", usbcore_name); return 0; } //总线对象注册 retval = bus_register(&usb_bus_type); if (retval) goto out; //usb-host retval = usb_host_init(); if (retval) goto host_init_failed; retval = usb_major_init(); if (retval) goto major_init_failed; //usbfs注册 retval = usb_register(&usbfs_driver); if (retval) goto driver_register_failed; retval = usbdev_init(); if (retval) goto usbdevice_init_failed; retval = usbfs_init(); if (retval) goto fs_init_failed; //初始化hub模块:注册hub驱动、创建hub端口检测线程 retval = usb_hub_init(); if (retval) goto hub_init_failed; retval = driver_register(&usb_generic_driver); if (!retval) goto out; usb_hub_cleanup(); hub_init_failed: usbfs_cleanup(); fs_init_failed: usbdev_cleanup(); usbdevice_init_failed: usb_deregister(&usbfs_driver); driver_register_failed: usb_major_cleanup(); major_init_failed: usb_host_cleanup(); host_init_failed: bus_unregister(&usb_bus_type); out: return retval; }
/* * Cleanup */ static void __exit usb_exit(void) { /* This will matter if shutdown/reboot does exitcalls. */ if (nousb) return; driver_unregister(&usb_generic_driver); usb_major_cleanup(); usbfs_cleanup(); usb_deregister(&usbfs_driver); usbdev_cleanup(); usb_hub_cleanup(); usb_host_cleanup(); bus_unregister(&usb_bus_type); }
int lsusb_main(int argc, char **argv) { struct usb_host_context *ctx; if (argc == 2 && !strcmp(argv[1], "-v")) verbose = 1; ctx = usb_host_init(); if (!ctx) { perror("usb_host_init:"); return 1; } usb_host_run(ctx, lsusb_device_added, lsusb_device_removed, lsusb_discovery_done, NULL); usb_host_cleanup(ctx); return 0; }
int hu_usb_run () { // Android specific C level libusbhost API requires thread for it's processing, and calling of the added/removed/disc-done callbacks struct usb_host_context * context = usb_host_init (); usb_host_run (context, usb_device_added, usb_device_removed, usb_discovery_done, (void * ) 0); usb_host_cleanup (context); return (0); }