staging: comedi: addi_apci_1032: add comedi driver comment

Add a comedi driver comment in a form suitable for importing into
Comedilib documentation.  The information about the change-of-state
subdevice has been pulled from other comments in the driver.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Ian Abbott 2015-01-26 14:28:56 +00:00 committed by Greg Kroah-Hartman
parent 7e6fd0202b
commit 119c964399

View File

@ -22,6 +22,54 @@
* more details.
*/
/*
* Driver: addi_apci_1032
* Description: ADDI-DATA APCI-1032 Digital Input Board
* Author: ADDI-DATA GmbH <info@addi-data.com>,
* H Hartley Sweeten <hsweeten@visionengravers.com>
* Status: untested
* Devices: [ADDI-DATA] APCI-1032 (addi_apci_1032)
*
* Configuration options:
* None; devices are configured automatically.
*
* This driver models the APCI-1032 as a 32-channel, digital input subdevice
* plus an additional digital input subdevice to handle change-of-state (COS)
* interrupts (if an interrupt handler can be set up successfully).
*
* The COS subdevice supports comedi asynchronous read commands.
*
* Change-Of-State (COS) interrupt configuration:
*
* Channels 0 to 15 are interruptible. These channels can be configured
* to generate interrupts based on AND/OR logic for the desired channels.
*
* OR logic:
* - reacts to rising or falling edges
* - interrupt is generated when any enabled channel meets the desired
* interrupt condition
*
* AND logic:
* - reacts to changes in level of the selected inputs
* - interrupt is generated when all enabled channels meet the desired
* interrupt condition
* - after an interrupt, a change in level must occur on the selected
* inputs to release the IRQ logic
*
* The COS subdevice must be configured before setting up a comedi
* asynchronous command:
*
* data[0] : INSN_CONFIG_DIGITAL_TRIG
* data[1] : trigger number (= 0)
* data[2] : configuration operation:
* - COMEDI_DIGITAL_TRIG_DISABLE = no interrupts
* - COMEDI_DIGITAL_TRIG_ENABLE_EDGES = OR (edge) interrupts
* - COMEDI_DIGITAL_TRIG_ENABLE_LEVELS = AND (level) interrupts
* data[3] : left-shift for data[4] and data[5]
* data[4] : rising-edge/high level channels
* data[5] : falling-edge/low level channels
*/
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/interrupt.h>
@ -62,36 +110,6 @@ static int apci1032_reset(struct comedi_device *dev)
return 0;
}
/*
* Change-Of-State (COS) interrupt configuration
*
* Channels 0 to 15 are interruptible. These channels can be configured
* to generate interrupts based on AND/OR logic for the desired channels.
*
* OR logic
* - reacts to rising or falling edges
* - interrupt is generated when any enabled channel
* meet the desired interrupt condition
*
* AND logic
* - reacts to changes in level of the selected inputs
* - interrupt is generated when all enabled channels
* meet the desired interrupt condition
* - after an interrupt, a change in level must occur on
* the selected inputs to release the IRQ logic
*
* The COS interrupt must be configured before it can be enabled.
*
* data[0] : INSN_CONFIG_DIGITAL_TRIG
* data[1] : trigger number (= 0)
* data[2] : configuration operation:
* COMEDI_DIGITAL_TRIG_DISABLE = no interrupts
* COMEDI_DIGITAL_TRIG_ENABLE_EDGES = OR (edge) interrupts
* COMEDI_DIGITAL_TRIG_ENABLE_LEVELS = AND (level) interrupts
* data[3] : left-shift for data[4] and data[5]
* data[4] : rising-edge/high level channels
* data[5] : falling-edge/low level channels
*/
static int apci1032_cos_insn_config(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,