diff options
-rw-r--r-- | drivers/staging/comedi/drivers/das08.c | 76 |
1 files changed, 15 insertions, 61 deletions
diff --git a/drivers/staging/comedi/drivers/das08.c b/drivers/staging/comedi/drivers/das08.c index 036953e3b715..78c33140e92f 100644 --- a/drivers/staging/comedi/drivers/das08.c +++ b/drivers/staging/comedi/drivers/das08.c @@ -433,64 +433,12 @@ das08ao_ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s, return n; } -static unsigned int i8254_read_channel_low(unsigned int base, int chan) -{ - return i8254_read(base, 0, chan); -} - -static void i8254_write_channel_low(unsigned int base, int chan, - unsigned int value) -{ - i8254_write(base, 0, chan, value); -} - -static unsigned int i8254_read_channel(struct i8254_struct *st, int channel) -{ - int chan = st->logic2phys[channel]; - - return i8254_read_channel_low(st->iobase, chan); -} - -static void i8254_write_channel(struct i8254_struct *st, int channel, - unsigned int value) -{ - int chan = st->logic2phys[channel]; - - i8254_write_channel_low(st->iobase, chan, value); -} - -static void i8254_set_mode_low(unsigned int base, int channel, - unsigned int mode) -{ - i8254_set_mode(base, 0, channel, mode); -} - -static void __i8254_set_mode(struct i8254_struct *st, int channel, - unsigned int mode) -{ - int chan = st->logic2phys[channel]; - - st->mode[chan] = mode; - return i8254_set_mode_low(st->iobase, chan, mode); -} - -static unsigned int i8254_read_status_low(unsigned int base, int channel) -{ - return i8254_status(base, 0, channel); -} - -static unsigned int i8254_read_status(struct i8254_struct *st, int channel) -{ - int chan = st->logic2phys[channel]; - - return i8254_read_status_low(st->iobase, chan); -} - static void i8254_initialize(struct i8254_struct *st) { int i; + for (i = 0; i < 3; ++i) - i8254_set_mode_low(st->iobase, i, st->mode[i]); + i8254_set_mode(st->iobase, 0, i, st->mode[i]); } static int das08_counter_read(struct comedi_device *dev, @@ -498,8 +446,10 @@ static int das08_counter_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { struct das08_private_struct *devpriv = dev->private; - int chan = insn->chanspec; - data[0] = i8254_read_channel(&devpriv->i8254, chan); + struct i8254_struct *st = &devpriv->i8254; + int chan = st->logic2phys[insn->chanspec]; + + data[0] = i8254_read(st->iobase, 0, chan); return 1; } @@ -508,8 +458,10 @@ static int das08_counter_write(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { struct das08_private_struct *devpriv = dev->private; - int chan = insn->chanspec; - i8254_write_channel(&devpriv->i8254, chan, data[0]); + struct i8254_struct *st = &devpriv->i8254; + int chan = st->logic2phys[insn->chanspec]; + + i8254_write(st->iobase, 0, chan, data[0]); return 1; } @@ -518,17 +470,19 @@ static int das08_counter_config(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { struct das08_private_struct *devpriv = dev->private; - int chan = insn->chanspec; + struct i8254_struct *st = &devpriv->i8254; + int chan = st->logic2phys[insn->chanspec]; if (insn->n != 2) return -EINVAL; switch (data[0]) { case INSN_CONFIG_SET_COUNTER_MODE: - __i8254_set_mode(&devpriv->i8254, chan, data[1]); + st->mode[chan] = data[1]; + i8254_set_mode(st->iobase, 0, chan, data[1]); break; case INSN_CONFIG_8254_READ_STATUS: - data[1] = i8254_read_status(&devpriv->i8254, chan); + data[1] = i8254_status(st->iobase, 0, chan); break; default: return -EINVAL; |