staging: comedi: dt2811: simplify A/D reference configuration
The analog inputs are confgured with jumpers on the board to be: * 16 single-ended inputs * 8 differential inputs * 16 pseudo-differential inputs (common ground) Simplify the handling of this configuration option and properly set the subdev_flags based on the selected input mode. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
dedfdf9009
commit
7c9574090d
@ -29,10 +29,10 @@
|
|||||||
* Configuration options:
|
* Configuration options:
|
||||||
* [0] - I/O port base address
|
* [0] - I/O port base address
|
||||||
* [1] - IRQ, although this is currently unused
|
* [1] - IRQ, although this is currently unused
|
||||||
* [2] - A/D reference
|
* [2] - A/D reference (# of analog inputs)
|
||||||
* 0 = single-ended
|
* 0 = single-ended (16 channels)
|
||||||
* 1 = differential
|
* 1 = differential (8 channels)
|
||||||
* 2 = pseudo-differential (common reference)
|
* 2 = pseudo-differential (16 channels)
|
||||||
* [3] - A/D range
|
* [3] - A/D range
|
||||||
* 0 = [-5, 5]
|
* 0 = [-5, 5]
|
||||||
* 1 = [-2.5, 2.5]
|
* 1 = [-2.5, 2.5]
|
||||||
@ -184,9 +184,6 @@ enum { card_2811_pgh, card_2811_pgl };
|
|||||||
struct dt2811_private {
|
struct dt2811_private {
|
||||||
int ntrig;
|
int ntrig;
|
||||||
int curadchan;
|
int curadchan;
|
||||||
enum {
|
|
||||||
adc_singleended, adc_diff, adc_pseudo_diff
|
|
||||||
} adc_mux;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int dt2811_ai_eoc(struct comedi_device *dev,
|
static int dt2811_ai_eoc(struct comedi_device *dev,
|
||||||
@ -293,26 +290,13 @@ static int dt2811_attach(struct comedi_device *dev, struct comedi_devconfig *it)
|
|||||||
if (!devpriv)
|
if (!devpriv)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
switch (it->options[2]) {
|
|
||||||
case 0:
|
|
||||||
devpriv->adc_mux = adc_singleended;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
devpriv->adc_mux = adc_diff;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
devpriv->adc_mux = adc_pseudo_diff;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
devpriv->adc_mux = adc_singleended;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
s = &dev->subdevices[0];
|
s = &dev->subdevices[0];
|
||||||
/* initialize the ADC subdevice */
|
/* initialize the ADC subdevice */
|
||||||
s->type = COMEDI_SUBD_AI;
|
s->type = COMEDI_SUBD_AI;
|
||||||
s->subdev_flags = SDF_READABLE | SDF_GROUND;
|
s->subdev_flags = SDF_READABLE |
|
||||||
s->n_chan = devpriv->adc_mux == adc_diff ? 8 : 16;
|
(it->options[2] == 1) ? SDF_DIFF :
|
||||||
|
(it->options[2] == 2) ? SDF_COMMON : SDF_GROUND;
|
||||||
|
s->n_chan = (it->options[2] == 1) ? 8 : 16;
|
||||||
s->insn_read = dt2811_ai_insn;
|
s->insn_read = dt2811_ai_insn;
|
||||||
s->maxdata = 0xfff;
|
s->maxdata = 0xfff;
|
||||||
switch (it->options[3]) {
|
switch (it->options[3]) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user