staging: comedi: ni_labpc: introduce labpc_counter_set_mode()

Introduce labpc_counter_set_mode() which is a wrapper around the
i8254_set_mode() helpers to program the 8254 timers. Use the new
function instead of directly writing to the timer mode register
with a "magic" number.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
H Hartley Sweeten 2013-03-22 09:53:49 -07:00 committed by Greg Kroah-Hartman
parent 161ce6fa4b
commit 463f930401
1 changed files with 27 additions and 17 deletions

View File

@ -134,9 +134,6 @@
#define CMD4_ECLKRCV (1 << 4)
#define DIO_BASE_REG 0x10 /* R/W: 8255 DIO base reg */
#define COUNTER_A_BASE_REG 0x14 /* R/W: 8253 Counter A base reg */
#define COUNTER_A_MODE_REG 0x17 /* W: 8253 Counter A mode reg */
#define INIT_A0_BITS 0x14 /* (a0 mode 2) */
#define INIT_A1_BITS 0x70 /* (a1 mode 0) */
#define COUNTER_B_BASE_REG 0x18 /* R/W: 8253 Counter B base reg */
#define CMD5_REG 0x1c /* W: Command 5 reg */
#define CMD5_WRTPRT (1 << 2)
@ -292,6 +289,20 @@ static const int dma_buffer_size = 0xff00;
/* 2 bytes per sample */
static const int sample_size = 2;
static int labpc_counter_set_mode(struct comedi_device *dev,
unsigned long base_address,
unsigned int counter_number,
unsigned int mode)
{
const struct labpc_boardinfo *board = comedi_board(dev);
if (board->has_mmio)
return i8254_mm_set_mode((void __iomem *)base_address, 0,
counter_number, mode);
else
return i8254_set_mode(base_address, 0, counter_number, mode);
}
static bool labpc_range_is_unipolar(struct comedi_subdevice *s,
unsigned int range)
{
@ -446,11 +457,9 @@ static int labpc_ai_insn_read(struct comedi_device *dev,
devpriv->cmd4 |= CMD4_SEDIFF;
devpriv->write_byte(devpriv->cmd4, dev->iobase + CMD4_REG);
/*
* initialize pacer counter output to make sure it doesn't
* cause any problems
*/
devpriv->write_byte(INIT_A0_BITS, dev->iobase + COUNTER_A_MODE_REG);
/* initialize pacer counter to prevent any problems */
labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG,
0, I8254_MODE2);
labpc_clear_adc_fifo(dev);
@ -896,12 +905,11 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
comedi_error(dev, "error loading counter a1");
return -1;
}
} else /*
* otherwise, just put a1 in mode 0
* with no count to set its output low
*/
devpriv->write_byte(INIT_A1_BITS,
dev->iobase + COUNTER_A_MODE_REG);
} else {
/* just put counter a1 in mode 0 to set its output low */
labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG,
1, I8254_MODE0);
}
#ifdef CONFIG_ISA_DMA_API
/* figure out what method we will use to transfer data */
@ -968,9 +976,11 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
comedi_error(dev, "error loading counter a0");
return -1;
}
} else
devpriv->write_byte(INIT_A0_BITS,
dev->iobase + COUNTER_A_MODE_REG);
} else {
/* initialize pacer counter to prevent any problems */
labpc_counter_set_mode(dev, dev->iobase + COUNTER_A_BASE_REG,
0, I8254_MODE2);
}
/* set up scan pacing */
if (labpc_ai_scan_period(cmd, mode)) {