staging: comedi: pcl711: factor out the ai end-of-conversion wait

Factor out the analog input end-of-conversion wait to clarify the
pcl711_ai_insn() function a bit.

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:
H Hartley Sweeten 2013-09-20 16:39:34 -07:00 committed by Greg Kroah-Hartman
parent 8f494fe626
commit dd89a8b609

View File

@ -71,6 +71,7 @@ supported.
#define PCL711_CTRCTL 0x03
#define PCL711_AI_LSB_REG 0x04
#define PCL711_AI_MSB_REG 0x05
#define PCL711_AI_MSB_DRDY (1 << 4)
#define PCL711_AO_LSB_REG(x) (0x04 + ((x) * 2))
#define PCL711_AO_MSB_REG(x) (0x05 + ((x) * 2))
#define PCL711_DI_LO 0x06
@ -124,13 +125,6 @@ static const struct comedi_lrange range_acl8112dg_ai = {
}
};
/*
* flags
*/
#define PCL711_TIMEOUT 100
#define PCL711_DRDY 0x10
static const int i8253_osc_base = 500; /* 2 Mhz */
struct pcl711_board {
@ -254,12 +248,26 @@ static void pcl711_set_changain(struct comedi_device *dev, int chan)
}
}
static int pcl711_ai_wait_for_eoc(struct comedi_device *dev,
unsigned int timeout)
{
unsigned int msb;
while (timeout--) {
msb = inb(dev->iobase + PCL711_AI_MSB_REG);
if ((msb & PCL711_AI_MSB_DRDY) == 0)
return 0;
udelay(1);
}
return -ETIME;
}
static int pcl711_ai_insn(struct comedi_device *dev, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data)
{
const struct pcl711_board *board = comedi_board(dev);
int i, n;
int hi;
int ret;
int n;
pcl711_set_changain(dev, insn->chanspec);
@ -273,17 +281,10 @@ static int pcl711_ai_insn(struct comedi_device *dev, struct comedi_subdevice *s,
if (!board->is_8112)
outb(0, dev->iobase + PCL711_SOFTTRIG);
i = PCL711_TIMEOUT;
while (--i) {
hi = inb(dev->iobase + PCL711_AI_MSB_REG);
if (!(hi & PCL711_DRDY))
goto ok;
udelay(1);
}
printk(KERN_ERR "comedi%d: pcl711: A/D timeout\n", dev->minor);
return -ETIME;
ret = pcl711_ai_wait_for_eoc(dev, 100);
if (ret)
return ret;
ok:
data[n] = pcl711_ai_get_sample(dev, s);
}