brintos

brintos / linux-shallow public Read only

0
0
Text · 4.7 KiB · d11ea14 Raw
151 lines · c
1// SPDX-License-Identifier: GPL-2.0+2/*3 * comedi_usb.c4 * Comedi USB driver specific functions.5 *6 * COMEDI - Linux Control and Measurement Device Interface7 * Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>8 */9 10#include <linux/module.h>11#include <linux/comedi/comedi_usb.h>12 13/**14 * comedi_to_usb_interface() - Return USB interface attached to COMEDI device15 * @dev: COMEDI device.16 *17 * Assuming @dev->hw_dev is non-%NULL, it is assumed to be pointing to a18 * a &struct device embedded in a &struct usb_interface.19 *20 * Return: Attached USB interface if @dev->hw_dev is non-%NULL.21 * Return %NULL if @dev->hw_dev is %NULL.22 */23struct usb_interface *comedi_to_usb_interface(struct comedi_device *dev)24{25	return dev->hw_dev ? to_usb_interface(dev->hw_dev) : NULL;26}27EXPORT_SYMBOL_GPL(comedi_to_usb_interface);28 29/**30 * comedi_to_usb_dev() - Return USB device attached to COMEDI device31 * @dev: COMEDI device.32 *33 * Assuming @dev->hw_dev is non-%NULL, it is assumed to be pointing to a34 * a &struct device embedded in a &struct usb_interface.35 *36 * Return: USB device to which the USB interface belongs if @dev->hw_dev is37 * non-%NULL.  Return %NULL if @dev->hw_dev is %NULL.38 */39struct usb_device *comedi_to_usb_dev(struct comedi_device *dev)40{41	struct usb_interface *intf = comedi_to_usb_interface(dev);42 43	return intf ? interface_to_usbdev(intf) : NULL;44}45EXPORT_SYMBOL_GPL(comedi_to_usb_dev);46 47/**48 * comedi_usb_auto_config() - Configure/probe a USB COMEDI driver49 * @intf: USB interface.50 * @driver: Registered COMEDI driver.51 * @context: Driver specific data, passed to comedi_auto_config().52 *53 * Typically called from the usb_driver (*probe) function.  Auto-configure a54 * COMEDI device, using a pointer to the &struct device embedded in *@intf as55 * the hardware device.  The @context value gets passed through to @driver's56 * "auto_attach" handler.  The "auto_attach" handler may call57 * comedi_to_usb_interface() on the passed in COMEDI device to recover @intf.58 *59 * Return: The result of calling comedi_auto_config() (%0 on success, or60 * a negative error number on failure).61 */62int comedi_usb_auto_config(struct usb_interface *intf,63			   struct comedi_driver *driver,64			   unsigned long context)65{66	return comedi_auto_config(&intf->dev, driver, context);67}68EXPORT_SYMBOL_GPL(comedi_usb_auto_config);69 70/**71 * comedi_usb_auto_unconfig() - Unconfigure/disconnect a USB COMEDI device72 * @intf: USB interface.73 *74 * Typically called from the usb_driver (*disconnect) function.75 * Auto-unconfigure a COMEDI device attached to this USB interface, using a76 * pointer to the &struct device embedded in *@intf as the hardware device.77 * The COMEDI driver's "detach" handler will be called during unconfiguration78 * of the COMEDI device.79 *80 * Note that the COMEDI device may have already been unconfigured using the81 * %COMEDI_DEVCONFIG ioctl, in which case this attempt to unconfigure it82 * again should be ignored.83 */84void comedi_usb_auto_unconfig(struct usb_interface *intf)85{86	comedi_auto_unconfig(&intf->dev);87}88EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig);89 90/**91 * comedi_usb_driver_register() - Register a USB COMEDI driver92 * @comedi_driver: COMEDI driver to be registered.93 * @usb_driver: USB driver to be registered.94 *95 * This function is called from the module_init() of USB COMEDI driver modules96 * to register the COMEDI driver and the USB driver.  Do not call it directly,97 * use the module_comedi_usb_driver() helper macro instead.98 *99 * Return: %0 on success, or a negative error number on failure.100 */101int comedi_usb_driver_register(struct comedi_driver *comedi_driver,102			       struct usb_driver *usb_driver)103{104	int ret;105 106	ret = comedi_driver_register(comedi_driver);107	if (ret < 0)108		return ret;109 110	ret = usb_register(usb_driver);111	if (ret < 0) {112		comedi_driver_unregister(comedi_driver);113		return ret;114	}115 116	return 0;117}118EXPORT_SYMBOL_GPL(comedi_usb_driver_register);119 120/**121 * comedi_usb_driver_unregister() - Unregister a USB COMEDI driver122 * @comedi_driver: COMEDI driver to be registered.123 * @usb_driver: USB driver to be registered.124 *125 * This function is called from the module_exit() of USB COMEDI driver modules126 * to unregister the USB driver and the COMEDI driver.  Do not call it127 * directly, use the module_comedi_usb_driver() helper macro instead.128 */129void comedi_usb_driver_unregister(struct comedi_driver *comedi_driver,130				  struct usb_driver *usb_driver)131{132	usb_deregister(usb_driver);133	comedi_driver_unregister(comedi_driver);134}135EXPORT_SYMBOL_GPL(comedi_usb_driver_unregister);136 137static int __init comedi_usb_init(void)138{139	return 0;140}141module_init(comedi_usb_init);142 143static void __exit comedi_usb_exit(void)144{145}146module_exit(comedi_usb_exit);147 148MODULE_AUTHOR("https://www.comedi.org");149MODULE_DESCRIPTION("Comedi USB interface module");150MODULE_LICENSE("GPL");151