• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * comedi_usb.c
3  * Comedi USB driver specific functions.
4  *
5  * COMEDI - Linux Control and Measurement Device Interface
6  * Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */
22 
23 #include <linux/usb.h>
24 
25 #include "comedidev.h"
26 
27 /**
28  * comedi_to_usb_interface() - comedi_device pointer to usb_interface pointer.
29  * @dev: comedi_device struct
30  */
comedi_to_usb_interface(struct comedi_device * dev)31 struct usb_interface *comedi_to_usb_interface(struct comedi_device *dev)
32 {
33 	return dev->hw_dev ? to_usb_interface(dev->hw_dev) : NULL;
34 }
35 EXPORT_SYMBOL_GPL(comedi_to_usb_interface);
36 
37 /**
38  * comedi_usb_auto_config() - Configure/probe a comedi USB driver.
39  * @intf: usb_interface struct
40  * @driver: comedi_driver struct
41  * @context: driver specific data, passed to comedi_auto_config()
42  *
43  * Typically called from the usb_driver (*probe) function.
44  */
comedi_usb_auto_config(struct usb_interface * intf,struct comedi_driver * driver,unsigned long context)45 int comedi_usb_auto_config(struct usb_interface *intf,
46 			   struct comedi_driver *driver,
47 			   unsigned long context)
48 {
49 	return comedi_auto_config(&intf->dev, driver, context);
50 }
51 EXPORT_SYMBOL_GPL(comedi_usb_auto_config);
52 
53 /**
54  * comedi_pci_auto_unconfig() - Unconfigure/disconnect a comedi USB driver.
55  * @intf: usb_interface struct
56  *
57  * Typically called from the usb_driver (*disconnect) function.
58  */
comedi_usb_auto_unconfig(struct usb_interface * intf)59 void comedi_usb_auto_unconfig(struct usb_interface *intf)
60 {
61 	comedi_auto_unconfig(&intf->dev);
62 }
63 EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig);
64 
65 /**
66  * comedi_usb_driver_register() - Register a comedi USB driver.
67  * @comedi_driver: comedi_driver struct
68  * @usb_driver: usb_driver struct
69  *
70  * This function is used for the module_init() of comedi USB drivers.
71  * Do not call it directly, use the module_comedi_usb_driver() helper
72  * macro instead.
73  */
comedi_usb_driver_register(struct comedi_driver * comedi_driver,struct usb_driver * usb_driver)74 int comedi_usb_driver_register(struct comedi_driver *comedi_driver,
75 			       struct usb_driver *usb_driver)
76 {
77 	int ret;
78 
79 	ret = comedi_driver_register(comedi_driver);
80 	if (ret < 0)
81 		return ret;
82 
83 	ret = usb_register(usb_driver);
84 	if (ret < 0) {
85 		comedi_driver_unregister(comedi_driver);
86 		return ret;
87 	}
88 
89 	return 0;
90 }
91 EXPORT_SYMBOL_GPL(comedi_usb_driver_register);
92 
93 /**
94  * comedi_usb_driver_unregister() - Unregister a comedi USB driver.
95  * @comedi_driver: comedi_driver struct
96  * @usb_driver: usb_driver struct
97  *
98  * This function is used for the module_exit() of comedi USB drivers.
99  * Do not call it directly, use the module_comedi_usb_driver() helper
100  * macro instead.
101  */
comedi_usb_driver_unregister(struct comedi_driver * comedi_driver,struct usb_driver * usb_driver)102 void comedi_usb_driver_unregister(struct comedi_driver *comedi_driver,
103 				  struct usb_driver *usb_driver)
104 {
105 	usb_deregister(usb_driver);
106 	comedi_driver_unregister(comedi_driver);
107 }
108 EXPORT_SYMBOL_GPL(comedi_usb_driver_unregister);
109