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

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

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



Convert the drivers with simple, per channel programmable i/o, to use the
comedi_dio_insn_config() helper function.

All of these pass a 'mask' of '0' to comedi_dio_insn_config() this causes
the per channel mask to be used to configure the i/o direction.

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 f3508b22
Loading
Loading
Loading
Loading
+7 −18
Original line number Original line Diff line number Diff line
@@ -3510,31 +3510,20 @@ static int do_wbits(struct comedi_device *dev, struct comedi_subdevice *s,


static int dio_60xx_config_insn(struct comedi_device *dev,
static int dio_60xx_config_insn(struct comedi_device *dev,
				struct comedi_subdevice *s,
				struct comedi_subdevice *s,
				struct comedi_insn *insn, unsigned int *data)
				struct comedi_insn *insn,
				unsigned int *data)
{
{
	struct pcidas64_private *devpriv = dev->private;
	struct pcidas64_private *devpriv = dev->private;
	unsigned int mask;
	int ret;

	mask = 1 << CR_CHAN(insn->chanspec);


	switch (data[0]) {
	ret = comedi_dio_insn_config(dev, s, insn, data, 0);
	case INSN_CONFIG_DIO_INPUT:
	if (ret)
		s->io_bits &= ~mask;
		return ret;
		break;
	case INSN_CONFIG_DIO_OUTPUT:
		s->io_bits |= mask;
		break;
	case INSN_CONFIG_DIO_QUERY:
		data[1] = (s->io_bits & mask) ? COMEDI_OUTPUT : COMEDI_INPUT;
		return 2;
	default:
		return -EINVAL;
	}


	writeb(s->io_bits,
	writeb(s->io_bits,
	       devpriv->dio_counter_iobase + DIO_DIRECTION_60XX_REG);
	       devpriv->dio_counter_iobase + DIO_DIRECTION_60XX_REG);


	return 1;
	return insn->n;
}
}


static int dio_60xx_wbits(struct comedi_device *dev, struct comedi_subdevice *s,
static int dio_60xx_wbits(struct comedi_device *dev, struct comedi_subdevice *s,
+7 −18
Original line number Original line Diff line number Diff line
@@ -158,27 +158,16 @@ static int ni_670x_dio_insn_bits(struct comedi_device *dev,


static int ni_670x_dio_insn_config(struct comedi_device *dev,
static int ni_670x_dio_insn_config(struct comedi_device *dev,
				   struct comedi_subdevice *s,
				   struct comedi_subdevice *s,
				   struct comedi_insn *insn, unsigned int *data)
				   struct comedi_insn *insn,
				   unsigned int *data)
{
{
	struct ni_670x_private *devpriv = dev->private;
	struct ni_670x_private *devpriv = dev->private;
	int chan = CR_CHAN(insn->chanspec);
	int ret;

	ret = comedi_dio_insn_config(dev, s, insn, data, 0);
	if (ret)
		return ret;


	switch (data[0]) {
	case INSN_CONFIG_DIO_OUTPUT:
		s->io_bits |= 1 << chan;
		break;
	case INSN_CONFIG_DIO_INPUT:
		s->io_bits &= ~(1 << chan);
		break;
	case INSN_CONFIG_DIO_QUERY:
		data[1] =
		    (s->io_bits & (1 << chan)) ? COMEDI_OUTPUT : COMEDI_INPUT;
		return insn->n;
		break;
	default:
		return -EINVAL;
		break;
	}
	writel(s->io_bits, devpriv->mite->daq_io_addr + DIO_PORT0_DIR_OFFSET);
	writel(s->io_bits, devpriv->mite->daq_io_addr + DIO_PORT0_DIR_OFFSET);


	return insn->n;
	return insn->n;
+10 −14
Original line number Original line Diff line number Diff line
@@ -90,21 +90,17 @@ static int daq700_dio_insn_bits(struct comedi_device *dev,


static int daq700_dio_insn_config(struct comedi_device *dev,
static int daq700_dio_insn_config(struct comedi_device *dev,
				  struct comedi_subdevice *s,
				  struct comedi_subdevice *s,
				  struct comedi_insn *insn, unsigned int *data)
				  struct comedi_insn *insn,
				  unsigned int *data)
{
{
	unsigned int chan = 1 << CR_CHAN(insn->chanspec);
	int ret;


	switch (data[0]) {
	ret = comedi_dio_insn_config(dev, s, insn, data, 0);
	case INSN_CONFIG_DIO_INPUT:
	if (ret)
		break;
		return ret;
	case INSN_CONFIG_DIO_OUTPUT:

		break;
	/* The DIO channels are not configurable, fix the io_bits */
	case INSN_CONFIG_DIO_QUERY:
	s->io_bits = 0x00ff;
		data[1] = (s->io_bits & chan) ? COMEDI_OUTPUT : COMEDI_INPUT;
		break;
	default:
		return -EINVAL;
	}


	return insn->n;
	return insn->n;
}
}
+12 −45
Original line number Original line Diff line number Diff line
@@ -3528,37 +3528,21 @@ static int ni_ao_reset(struct comedi_device *dev, struct comedi_subdevice *s)


static int ni_dio_insn_config(struct comedi_device *dev,
static int ni_dio_insn_config(struct comedi_device *dev,
			      struct comedi_subdevice *s,
			      struct comedi_subdevice *s,
			      struct comedi_insn *insn, unsigned int *data)
			      struct comedi_insn *insn,
			      unsigned int *data)
{
{
	struct ni_private *devpriv = dev->private;
	struct ni_private *devpriv = dev->private;
	int ret;


#ifdef DEBUG_DIO
	ret = comedi_dio_insn_config(dev, s, insn, data, 0);
	printk("ni_dio_insn_config() chan=%d io=%d\n",
	if (ret)
	       CR_CHAN(insn->chanspec), data[0]);
		return ret;
#endif
	switch (data[0]) {
	case INSN_CONFIG_DIO_OUTPUT:
		s->io_bits |= 1 << CR_CHAN(insn->chanspec);
		break;
	case INSN_CONFIG_DIO_INPUT:
		s->io_bits &= ~(1 << CR_CHAN(insn->chanspec));
		break;
	case INSN_CONFIG_DIO_QUERY:
		data[1] =
		    (s->
		     io_bits & (1 << CR_CHAN(insn->chanspec))) ? COMEDI_OUTPUT :
		    COMEDI_INPUT;
		return insn->n;
		break;
	default:
		return -EINVAL;
	}


	devpriv->dio_control &= ~DIO_Pins_Dir_Mask;
	devpriv->dio_control &= ~DIO_Pins_Dir_Mask;
	devpriv->dio_control |= DIO_Pins_Dir(s->io_bits);
	devpriv->dio_control |= DIO_Pins_Dir(s->io_bits);
	devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register);
	devpriv->stc_writew(dev, devpriv->dio_control, DIO_Control_Register);


	return 1;
	return insn->n;
}
}


static int ni_dio_insn_bits(struct comedi_device *dev,
static int ni_dio_insn_bits(struct comedi_device *dev,
@@ -3596,32 +3580,15 @@ static int ni_m_series_dio_insn_config(struct comedi_device *dev,
				       unsigned int *data)
				       unsigned int *data)
{
{
	struct ni_private *devpriv __maybe_unused = dev->private;
	struct ni_private *devpriv __maybe_unused = dev->private;
	int ret;


#ifdef DEBUG_DIO
	ret = comedi_dio_insn_config(dev, s, insn, data, 0);
	printk("ni_m_series_dio_insn_config() chan=%d io=%d\n",
	if (ret)
	       CR_CHAN(insn->chanspec), data[0]);
		return ret;
#endif
	switch (data[0]) {
	case INSN_CONFIG_DIO_OUTPUT:
		s->io_bits |= 1 << CR_CHAN(insn->chanspec);
		break;
	case INSN_CONFIG_DIO_INPUT:
		s->io_bits &= ~(1 << CR_CHAN(insn->chanspec));
		break;
	case INSN_CONFIG_DIO_QUERY:
		data[1] =
		    (s->
		     io_bits & (1 << CR_CHAN(insn->chanspec))) ? COMEDI_OUTPUT :
		    COMEDI_INPUT;
		return insn->n;
		break;
	default:
		return -EINVAL;
	}


	ni_writel(s->io_bits, M_Offset_DIO_Direction);
	ni_writel(s->io_bits, M_Offset_DIO_Direction);


	return 1;
	return insn->n;
}
}


static int ni_m_series_dio_insn_bits(struct comedi_device *dev,
static int ni_m_series_dio_insn_bits(struct comedi_device *dev,
+8 −21
Original line number Original line Diff line number Diff line
@@ -640,32 +640,19 @@ static void debug_int(struct comedi_device *dev)


static int ni_pcidio_insn_config(struct comedi_device *dev,
static int ni_pcidio_insn_config(struct comedi_device *dev,
				 struct comedi_subdevice *s,
				 struct comedi_subdevice *s,
				 struct comedi_insn *insn, unsigned int *data)
				 struct comedi_insn *insn,
				 unsigned int *data)
{
{
	struct nidio96_private *devpriv = dev->private;
	struct nidio96_private *devpriv = dev->private;
	int ret;

	ret = comedi_dio_insn_config(dev, s, insn, data, 0);
	if (ret)
		return ret;


	if (insn->n != 1)
		return -EINVAL;
	switch (data[0]) {
	case INSN_CONFIG_DIO_OUTPUT:
		s->io_bits |= 1 << CR_CHAN(insn->chanspec);
		break;
	case INSN_CONFIG_DIO_INPUT:
		s->io_bits &= ~(1 << CR_CHAN(insn->chanspec));
		break;
	case INSN_CONFIG_DIO_QUERY:
		data[1] =
		    (s->
		     io_bits & (1 << CR_CHAN(insn->chanspec))) ? COMEDI_OUTPUT :
		    COMEDI_INPUT;
		return insn->n;
		break;
	default:
		return -EINVAL;
	}
	writel(s->io_bits, devpriv->mite->daq_io_addr + Port_Pin_Directions(0));
	writel(s->io_bits, devpriv->mite->daq_io_addr + Port_Pin_Directions(0));


	return 1;
	return insn->n;
}
}


static int ni_pcidio_insn_bits(struct comedi_device *dev,
static int ni_pcidio_insn_bits(struct comedi_device *dev,
Loading