1 // SPDX-License-Identifier: GPL-2.0+
4 * Comedi USB driver specific functions.
6 * COMEDI - Linux Control and Measurement Device Interface
7 * Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>
10 #include <linux/module.h>
11 #include <linux/comedi/comedi_usb.h>
14 * comedi_to_usb_interface() - Return USB interface attached to COMEDI device
15 * @dev: COMEDI device.
17 * Assuming @dev->hw_dev is non-%NULL, it is assumed to be pointing to a
18 * a &struct device embedded in a &struct usb_interface.
20 * Return: Attached USB interface if @dev->hw_dev is non-%NULL.
21 * Return %NULL if @dev->hw_dev is %NULL.
23 struct usb_interface
*comedi_to_usb_interface(struct comedi_device
*dev
)
25 return dev
->hw_dev
? to_usb_interface(dev
->hw_dev
) : NULL
;
27 EXPORT_SYMBOL_GPL(comedi_to_usb_interface
);
30 * comedi_to_usb_dev() - Return USB device attached to COMEDI device
31 * @dev: COMEDI device.
33 * Assuming @dev->hw_dev is non-%NULL, it is assumed to be pointing to a
34 * a &struct device embedded in a &struct usb_interface.
36 * Return: USB device to which the USB interface belongs if @dev->hw_dev is
37 * non-%NULL. Return %NULL if @dev->hw_dev is %NULL.
39 struct usb_device
*comedi_to_usb_dev(struct comedi_device
*dev
)
41 struct usb_interface
*intf
= comedi_to_usb_interface(dev
);
43 return intf
? interface_to_usbdev(intf
) : NULL
;
45 EXPORT_SYMBOL_GPL(comedi_to_usb_dev
);
48 * comedi_usb_auto_config() - Configure/probe a USB COMEDI driver
49 * @intf: USB interface.
50 * @driver: Registered COMEDI driver.
51 * @context: Driver specific data, passed to comedi_auto_config().
53 * Typically called from the usb_driver (*probe) function. Auto-configure a
54 * COMEDI device, using a pointer to the &struct device embedded in *@intf as
55 * the hardware device. The @context value gets passed through to @driver's
56 * "auto_attach" handler. The "auto_attach" handler may call
57 * comedi_to_usb_interface() on the passed in COMEDI device to recover @intf.
59 * Return: The result of calling comedi_auto_config() (%0 on success, or
60 * a negative error number on failure).
62 int comedi_usb_auto_config(struct usb_interface
*intf
,
63 struct comedi_driver
*driver
,
64 unsigned long context
)
66 return comedi_auto_config(&intf
->dev
, driver
, context
);
68 EXPORT_SYMBOL_GPL(comedi_usb_auto_config
);
71 * comedi_usb_auto_unconfig() - Unconfigure/disconnect a USB COMEDI device
72 * @intf: USB interface.
74 * Typically called from the usb_driver (*disconnect) function.
75 * Auto-unconfigure a COMEDI device attached to this USB interface, using a
76 * pointer to the &struct device embedded in *@intf as the hardware device.
77 * The COMEDI driver's "detach" handler will be called during unconfiguration
78 * of the COMEDI device.
80 * Note that the COMEDI device may have already been unconfigured using the
81 * %COMEDI_DEVCONFIG ioctl, in which case this attempt to unconfigure it
82 * again should be ignored.
84 void comedi_usb_auto_unconfig(struct usb_interface
*intf
)
86 comedi_auto_unconfig(&intf
->dev
);
88 EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig
);
91 * comedi_usb_driver_register() - Register a USB COMEDI driver
92 * @comedi_driver: COMEDI driver to be registered.
93 * @usb_driver: USB driver to be registered.
95 * This function is called from the module_init() of USB COMEDI driver modules
96 * to register the COMEDI driver and the USB driver. Do not call it directly,
97 * use the module_comedi_usb_driver() helper macro instead.
99 * Return: %0 on success, or a negative error number on failure.
101 int comedi_usb_driver_register(struct comedi_driver
*comedi_driver
,
102 struct usb_driver
*usb_driver
)
106 ret
= comedi_driver_register(comedi_driver
);
110 ret
= usb_register(usb_driver
);
112 comedi_driver_unregister(comedi_driver
);
118 EXPORT_SYMBOL_GPL(comedi_usb_driver_register
);
121 * comedi_usb_driver_unregister() - Unregister a USB COMEDI driver
122 * @comedi_driver: COMEDI driver to be registered.
123 * @usb_driver: USB driver to be registered.
125 * This function is called from the module_exit() of USB COMEDI driver modules
126 * to unregister the USB driver and the COMEDI driver. Do not call it
127 * directly, use the module_comedi_usb_driver() helper macro instead.
129 void comedi_usb_driver_unregister(struct comedi_driver
*comedi_driver
,
130 struct usb_driver
*usb_driver
)
132 usb_deregister(usb_driver
);
133 comedi_driver_unregister(comedi_driver
);
135 EXPORT_SYMBOL_GPL(comedi_usb_driver_unregister
);
137 static int __init
comedi_usb_init(void)
141 module_init(comedi_usb_init
);
143 static void __exit
comedi_usb_exit(void)
146 module_exit(comedi_usb_exit
);
148 MODULE_AUTHOR("https://www.comedi.org");
149 MODULE_DESCRIPTION("Comedi USB interface module");
150 MODULE_LICENSE("GPL");