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;
}
Пример #2
0
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;
}
Пример #4
0
static int __init null_init(void)
{
	printk(KERN_INFO "null_init()\n");
	usb_function_register(&usb_func_null);
	return 0;
}