设为首页 加入收藏

TOP

Linux 2.6.35 下usb框架程序源码(三)
2014-11-24 08:39:33 来源: 作者: 【 】 浏览:4
Tags:Linux 2.6.35 usb 框架 程序源码
ect(struct usb_interface *interface)
{
struct usb_skel *dev;
int minor = interface->minor;


dev = usb_get_intfdata(interface);
usb_set_intfdata(interface, NULL);


/* give back our minor */
usb_deregister_dev(interface, &skel_class);


/* prevent more I/O from starting */
mutex_lock(&dev->io_mutex);
dev->interface = NULL;
mutex_unlock(&dev->io_mutex);


usb_kill_anchored_urbs(&dev->submitted);


/* decrement our usage count */
kref_put(&dev->kref, skel_delete);


dev_info(&interface->dev, "USB Skeleton #%d now disconnected", minor);
}


static void skel_draw_down(struct usb_skel *dev)
{
int time;


time = usb_wait_anchor_empty_timeout(&dev->submitted, 1000);
if (!time)
usb_kill_anchored_urbs(&dev->submitted);
usb_kill_urb(dev->bulk_in_urb);
}


static int skel_suspend(struct usb_interface *intf, pm_message_t message)
{
struct usb_skel *dev = usb_get_intfdata(intf);


if (!dev)
return 0;
skel_draw_down(dev);
return 0;
}


static int skel_resume(struct usb_interface *intf)
{
return 0;
}


static int skel_pre_reset(struct usb_interface *intf)
{
struct usb_skel *dev = usb_get_intfdata(intf);


mutex_lock(&dev->io_mutex);
skel_draw_down(dev);


return 0;
}


static int skel_post_reset(struct usb_interface *intf)
{
struct usb_skel *dev = usb_get_intfdata(intf);


/* we are sure no URBs are active - no locking needed */
dev->errors = -EPIPE;
mutex_unlock(&dev->io_mutex);


return 0;
}


static struct usb_driver skel_driver = {
.name = "skeleton",
.probe = skel_probe,
.disconnect = skel_disconnect,
.suspend = skel_suspend,
.resume = skel_resume,
.pre_reset = skel_pre_reset,
.post_reset = skel_post_reset,
.id_table = skel_table,
.supports_autosuspend = 1,
};


static int __init usb_skel_init(void)
{
int result;


/* register this driver with the USB subsystem */
result = usb_register(&skel_driver);
if (result)
err("usb_register failed. Error number %d", result);


return result;
}


static void __exit usb_skel_exit(void)
{
/* deregister this driver with the USB subsystem */
usb_deregister(&skel_driver);
}


module_init(usb_skel_init);
module_exit(usb_skel_exit);


MODULE_LICENSE("GPL");


首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Eclipse+CDT+Gcc编译选项控制 下一篇嵌入式Linux低成本智能终端方案

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)