summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/pcl812.c
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-03-04 11:30:26 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-03-06 17:06:19 -0800
commit708df4c4491ccbe70748de56fbd9ee239b22e751 (patch)
tree652ba6cb5946d127b14aa58c4332bff43c6d9fe5 /drivers/staging/comedi/drivers/pcl812.c
parent1be6b015e7549aae113d31bbd0ce948ba85f262c (diff)
staging: comedi: pcl812: clarify pcl812_reset()
Instead of using the 'board_type' and the switch, use the boardinfo to determine what should be reset. 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>
Diffstat (limited to 'drivers/staging/comedi/drivers/pcl812.c')
-rw-r--r--drivers/staging/comedi/drivers/pcl812.c42
1 files changed, 18 insertions, 24 deletions
diff --git a/drivers/staging/comedi/drivers/pcl812.c b/drivers/staging/comedi/drivers/pcl812.c
index 2487d44304b0..5436cd9dd7ba 100644
--- a/drivers/staging/comedi/drivers/pcl812.c
+++ b/drivers/staging/comedi/drivers/pcl812.c
@@ -1107,6 +1107,16 @@ static void pcl812_reset(struct comedi_device *dev)
{
const struct pcl812_board *board = comedi_board(dev);
struct pcl812_private *devpriv = dev->private;
+ unsigned int chan;
+
+ /* disable analog input trigger */
+ outb(devpriv->mode_reg_int | PCL812_CTRL_DISABLE_TRIG,
+ dev->iobase + PCL812_CTRL_REG);
+ pcl812_ai_clear_eoc(dev);
+
+ /* stop pacer */
+ if (board->IRQbits)
+ pcl812_start_pacer(dev, false);
/*
* Invalidate last_ai_chanspec then set analog input to
@@ -1115,33 +1125,17 @@ static void pcl812_reset(struct comedi_device *dev)
devpriv->last_ai_chanspec = CR_PACK(16, 0, 0);
pcl812_ai_set_chan_range(dev, CR_PACK(0, 0, 0), 0);
- switch (board->board_type) {
- case boardPCL812PG:
- case boardPCL812:
- case boardACL8112:
- case boardACL8216:
- /* set analog output channel 1 to 0V */
- outb(0, dev->iobase + PCL812_AO_LSB_REG(1));
- outb(0, dev->iobase + PCL812_AO_MSB_REG(1));
- case boardA821:
- /* set analog output channel 0 to 0V */
- outb(0, dev->iobase + PCL812_AO_LSB_REG(0));
- outb(0, dev->iobase + PCL812_AO_MSB_REG(0));
- pcl812_start_pacer(dev, false);
+ /* set analog output channels to 0V */
+ for (chan = 0; chan < board->n_aochan; chan++) {
+ outb(0, dev->iobase + PCL812_AO_LSB_REG(chan));
+ outb(0, dev->iobase + PCL812_AO_MSB_REG(chan));
+ }
+
+ /* set all digital outputs low */
+ if (board->has_dio) {
outb(0, dev->iobase + PCL812_DO_MSB_REG);
outb(0, dev->iobase + PCL812_DO_LSB_REG);
- outb(devpriv->mode_reg_int | PCL812_CTRL_DISABLE_TRIG,
- dev->iobase + PCL812_CTRL_REG);
- pcl812_ai_clear_eoc(dev);
- break;
- case boardPCL813B:
- case boardPCL813:
- case boardISO813:
- case boardACL8113:
- udelay(5);
- break;
}
- udelay(5);
}
static void pcl812_set_ai_range_table(struct comedi_device *dev,