root/drivers/staging/comedi/comedi_usb.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. comedi_to_usb_interface
  2. comedi_to_usb_dev
  3. comedi_usb_auto_config
  4. comedi_usb_auto_unconfig
  5. comedi_usb_driver_register
  6. comedi_usb_driver_unregister
  7. comedi_usb_init
  8. comedi_usb_exit

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

/* [<][>][^][v][top][bottom][index][help] */