mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 17:17:04 -04:00
staging: comedi: me4000: use comedi_dio_update_state()
The extra mask used to only update the channels configured as outputs is not necessary in this driver. Remove it and use comedi_dio_update_state() to handle the boilerplate code to update the subdevice s->state. 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:
committed by
Greg Kroah-Hartman
parent
9b13bc1d4a
commit
b523c2b2ec
@@ -1313,29 +1313,12 @@ static int me4000_ao_insn_read(struct comedi_device *dev,
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Digital I/O section
|
||||
===========================================================================*/
|
||||
|
||||
static int me4000_dio_insn_bits(struct comedi_device *dev,
|
||||
struct comedi_subdevice *s,
|
||||
struct comedi_insn *insn, unsigned int *data)
|
||||
struct comedi_insn *insn,
|
||||
unsigned int *data)
|
||||
{
|
||||
/*
|
||||
* The insn data consists of a mask in data[0] and the new data
|
||||
* in data[1]. The mask defines which bits we are concerning about.
|
||||
* The new data must be anded with the mask.
|
||||
* Each channel corresponds to a bit.
|
||||
*/
|
||||
if (data[0]) {
|
||||
/* Check if requested ports are configured for output */
|
||||
if ((s->io_bits & data[0]) != data[0])
|
||||
return -EIO;
|
||||
|
||||
s->state &= ~data[0];
|
||||
s->state |= data[0] & data[1];
|
||||
|
||||
/* Write out the new digital output lines */
|
||||
if (comedi_dio_update_state(s, data)) {
|
||||
outl((s->state >> 0) & 0xFF,
|
||||
dev->iobase + ME4000_DIO_PORT_0_REG);
|
||||
outl((s->state >> 8) & 0xFF,
|
||||
@@ -1346,8 +1329,6 @@ static int me4000_dio_insn_bits(struct comedi_device *dev,
|
||||
dev->iobase + ME4000_DIO_PORT_3_REG);
|
||||
}
|
||||
|
||||
/* On return, data[1] contains the value of
|
||||
the digital input and output lines. */
|
||||
data[1] = ((inl(dev->iobase + ME4000_DIO_PORT_0_REG) & 0xFF) << 0) |
|
||||
((inl(dev->iobase + ME4000_DIO_PORT_1_REG) & 0xFF) << 8) |
|
||||
((inl(dev->iobase + ME4000_DIO_PORT_2_REG) & 0xFF) << 16) |
|
||||
|
||||
Reference in New Issue
Block a user