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

staging: comedi: me_daq: use comedi_timeout()



Use comedi_timeout() to wait for the analog input end-of-conversion.

Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7c4ede3a
Loading
Loading
Loading
Loading
+23 −12
Original line number Diff line number Diff line
@@ -248,6 +248,20 @@ static int me_dio_insn_bits(struct comedi_device *dev,
	return insn->n;
}

static int me_ai_eoc(struct comedi_device *dev,
		     struct comedi_subdevice *s,
		     struct comedi_insn *insn,
		     unsigned long context)
{
	struct me_private_data *dev_private = dev->private;
	unsigned int status;

	status = readw(dev_private->me_regbase + ME_STATUS);
	if ((status & 0x0004) == 0)
		return 0;
	return -EBUSY;
}

static int me_ai_insn_read(struct comedi_device *dev,
			   struct comedi_subdevice *s,
			   struct comedi_insn *insn,
@@ -258,7 +272,7 @@ static int me_ai_insn_read(struct comedi_device *dev,
	unsigned int rang = CR_RANGE(insn->chanspec);
	unsigned int aref = CR_AREF(insn->chanspec);
	unsigned short val;
	int i;
	int ret;

	/* stop any running conversion */
	dev_private->control_1 &= 0xFFFC;
@@ -290,19 +304,16 @@ static int me_ai_insn_read(struct comedi_device *dev,
	readw(dev_private->me_regbase + ME_ADC_START);

	/* wait for ADC fifo not empty flag */
	for (i = 100000; i > 0; i--)
		if (!(readw(dev_private->me_regbase + ME_STATUS) & 0x0004))
			break;
	ret = comedi_timeout(dev, s, insn, me_ai_eoc, 0);
	if (ret) {
		dev_err(dev->class_dev, "Cannot get single value\n");
		return ret;
	}

	/* get value from ADC fifo */
	if (i) {
	val = readw(dev_private->me_regbase + ME_READ_AD_FIFO);
	val = (val ^ 0x800) & 0x0fff;
	data[0] = val;
	} else {
		dev_err(dev->class_dev, "Cannot get single value\n");
		return -EIO;
	}

	/* stop any running conversion */
	dev_private->control_1 &= 0xFFFC;