Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 97f4289a authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman
Browse files

staging: comedi: drivers: use comedi_dio_update_state() for simple cases



Use comedi_dio_update_state() to handle the boilerplate code to update
the subdevice s->state for simple cases where the hardware is updated
when any channel is modified.

Also, fix a bug in the amplc_pc263 and amplc_pci263 drivers where the
current state is not returned in data[1].

Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 77e9487b
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
@@ -260,18 +260,13 @@ static int apci1564_do_insn_bits(struct comedi_device *dev,
				 unsigned int *data)
				 unsigned int *data)
{
{
	struct addi_private *devpriv = dev->private;
	struct addi_private *devpriv = dev->private;
	unsigned int mask = data[0];
	unsigned int bits = data[1];


	s->state = inl(devpriv->i_IobaseAmcc + APCI1564_DIGITAL_OP +
	s->state = inl(devpriv->i_IobaseAmcc + APCI1564_DIGITAL_OP +
			APCI1564_DIGITAL_OP_RW);
			APCI1564_DIGITAL_OP_RW);
	if (mask) {
		s->state &= ~mask;
		s->state |= (bits & mask);


	if (comedi_dio_update_state(s, data))
		outl(s->state, devpriv->i_IobaseAmcc + APCI1564_DIGITAL_OP +
		outl(s->state, devpriv->i_IobaseAmcc + APCI1564_DIGITAL_OP +
			APCI1564_DIGITAL_OP_RW);
			APCI1564_DIGITAL_OP_RW);
	}


	data[1] = s->state;
	data[1] = s->state;


+1 −6
Original line number Original line Diff line number Diff line
@@ -623,16 +623,11 @@ static int apci3200_do_insn_bits(struct comedi_device *dev,
				 unsigned int *data)
				 unsigned int *data)
{
{
	struct addi_private *devpriv = dev->private;
	struct addi_private *devpriv = dev->private;
	unsigned int mask = data[0];
	unsigned int bits = data[1];


	s->state = inl(devpriv->i_IobaseAddon) & 0xf;
	s->state = inl(devpriv->i_IobaseAddon) & 0xf;
	if (mask) {
		s->state &= ~mask;
		s->state |= (bits & mask);


	if (comedi_dio_update_state(s, data))
		outl(s->state, devpriv->i_IobaseAddon);
		outl(s->state, devpriv->i_IobaseAddon);
	}


	data[1] = s->state;
	data[1] = s->state;


+1 −7
Original line number Original line Diff line number Diff line
@@ -90,16 +90,10 @@ static int apci1516_do_insn_bits(struct comedi_device *dev,
				 struct comedi_insn *insn,
				 struct comedi_insn *insn,
				 unsigned int *data)
				 unsigned int *data)
{
{
	unsigned int mask = data[0];
	unsigned int bits = data[1];

	s->state = inw(dev->iobase + APCI1516_DO_REG);
	s->state = inw(dev->iobase + APCI1516_DO_REG);
	if (mask) {
		s->state &= ~mask;
		s->state |= (bits & mask);


	if (comedi_dio_update_state(s, data))
		outw(s->state, dev->iobase + APCI1516_DO_REG);
		outw(s->state, dev->iobase + APCI1516_DO_REG);
	}


	data[1] = s->state;
	data[1] = s->state;


+1 −7
Original line number Original line Diff line number Diff line
@@ -57,16 +57,10 @@ static int apci2032_do_insn_bits(struct comedi_device *dev,
				 struct comedi_insn *insn,
				 struct comedi_insn *insn,
				 unsigned int *data)
				 unsigned int *data)
{
{
	unsigned int mask = data[0];
	unsigned int bits = data[1];

	s->state = inl(dev->iobase + APCI2032_DO_REG);
	s->state = inl(dev->iobase + APCI2032_DO_REG);
	if (mask) {
		s->state &= ~mask;
		s->state |= (bits & mask);


	if (comedi_dio_update_state(s, data))
		outl(s->state, dev->iobase + APCI2032_DO_REG);
		outl(s->state, dev->iobase + APCI2032_DO_REG);
	}


	data[1] = s->state;
	data[1] = s->state;


+1 −7
Original line number Original line Diff line number Diff line
@@ -50,16 +50,10 @@ static int apci2200_do_insn_bits(struct comedi_device *dev,
				 struct comedi_insn *insn,
				 struct comedi_insn *insn,
				 unsigned int *data)
				 unsigned int *data)
{
{
	unsigned int mask = data[0];
	unsigned int bits = data[1];

	s->state = inw(dev->iobase + APCI2200_DO_REG);
	s->state = inw(dev->iobase + APCI2200_DO_REG);
	if (mask) {
		s->state &= ~mask;
		s->state |= (bits & mask);


	if (comedi_dio_update_state(s, data))
		outw(s->state, dev->iobase + APCI2200_DO_REG);
		outw(s->state, dev->iobase + APCI2200_DO_REG);
	}


	data[1] = s->state;
	data[1] = s->state;


Loading