static int __init mtp_tunnel_init(void) { struct mtp_tunnel_context *ctxt = &_context; int retval; DBG("mtp_tunnel_init()\n"); init_waitqueue_head(&ctxt->read_wq); init_waitqueue_head(&ctxt->write_wq); atomic_set(&ctxt->open_excl, 0); atomic_set(&ctxt->read_excl, 0); atomic_set(&ctxt->write_excl, 0); atomic_set(&ctxt->enable_open_excl, 0); atomic_set(&ctxt->enable_read_excl, 0); atomic_set(&ctxt->enable_ioctl_excl, 0); spin_lock_init(&ctxt->lock); INIT_LIST_HEAD(&ctxt->rx_idle); INIT_LIST_HEAD(&ctxt->rx_done); INIT_LIST_HEAD(&ctxt->tx_idle); retval = platform_driver_register (&mtp_tunnel_driver); if (retval < 0) return retval; retval = platform_device_register (&mtp_tunnel_device_register); if (retval < 0) goto err_register_device; return usb_function_register(&usb_func_mtp_tunnel); err_register_device: platform_driver_unregister(&mtp_tunnel_driver); return retval; }
static int __init adb_init(void) { struct adb_context *ctxt = &_context; DBG("adb_init()\n"); init_waitqueue_head(&ctxt->read_wq); init_waitqueue_head(&ctxt->write_wq); atomic_set(&ctxt->open_excl, 0); atomic_set(&ctxt->read_excl, 0); atomic_set(&ctxt->write_excl, 0); atomic_set(&ctxt->enable_excl, 0); spin_lock_init(&ctxt->lock); INIT_LIST_HEAD(&ctxt->rx_idle); INIT_LIST_HEAD(&ctxt->rx_done); INIT_LIST_HEAD(&ctxt->tx_idle); return usb_function_register(&usb_func_adb); }
static int __init zero_init(void) { printk(KERN_INFO "zero_init()\n"); usb_function_register(&usb_func_zero); return 0; }
static int __init null_init(void) { printk(KERN_INFO "null_init()\n"); usb_function_register(&usb_func_null); return 0; }