As pointed out by Ian Abbott, the i8254_load() function does not
use the I8254_MODE* values to specify the "mode".

Refactor the 8254 timer programming to use the i8254_set_mode()
and i8254_write() helpers instead of i8254_load(). This allows
us to use the I8254_MODE* defines to clarify the code.

Also, use the CR_CHAN() macro to make sure the only the channel is
used in the insh->chanspec to specify the counter number.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers/me4000.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/comedi/drivers/me4000.c 
b/drivers/staging/comedi/drivers/me4000.c
index 5fc4850..a08bc6f 100644
--- a/drivers/staging/comedi/drivers/me4000.c
+++ b/drivers/staging/comedi/drivers/me4000.c
@@ -1352,6 +1352,7 @@ static int me4000_cnt_insn_config(struct comedi_device 
*dev,
                                  unsigned int *data)
 {
        struct me4000_info *info = dev->private;
+       unsigned int chan = CR_CHAN(insn->chanspec);
        int err;
 
        switch (data[0]) {
@@ -1359,16 +1360,17 @@ static int me4000_cnt_insn_config(struct comedi_device 
*dev,
                if (insn->n != 1)
                        return -EINVAL;
 
-               err = i8254_load(info->timer_regbase, 0, insn->chanspec, 0,
-                               I8254_MODE0 | I8254_BINARY);
+               err = i8254_set_mode(info->timer_regbase, 0, chan,
+                                    I8254_MODE0 | I8254_BINARY);
                if (err)
                        return err;
+               i8254_write(info->timer_regbase, 0, chan, 0);
                break;
        case GPCT_SET_OPERATION:
                if (insn->n != 2)
                        return -EINVAL;
 
-               err = i8254_set_mode(info->timer_regbase, 0, insn->chanspec,
+               err = i8254_set_mode(info->timer_regbase, 0, chan,
                                (data[1] << 1) | I8254_BINARY);
                if (err)
                        return err;
-- 
1.9.2

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to