The handling of the ADDIDATA_WATCHDOG and ADDIDATA_TIMER is identical
except for the "stop" operation. Refactor this function to use a common
code path for both timer modes.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 .../comedi/drivers/addi-data/hwdrv_apci3501.c      | 48 ++++++----------------
 1 file changed, 13 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c 
b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
index 306309e..6d0cf6d 100644
--- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
+++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
@@ -92,46 +92,24 @@ static int apci3501_write_insn_timer(struct comedi_device 
*dev,
                                     unsigned int *data)
 {
        struct apci3501_private *devpriv = dev->private;
-       unsigned int ctrl = 0;
+       unsigned int ctrl;
 
-       if (devpriv->timer_mode == ADDIDATA_WATCHDOG) {
-               if (data[1] == 1) {
-                       ctrl = inl(dev->iobase + APCI3501_TIMER_CTRL_REG);
-                       ctrl &= 0xfffff9ff;
-                       ctrl |= 0x1;
-                       /* Enable the Watchdog */
-                       outl(ctrl, dev->iobase + APCI3501_TIMER_CTRL_REG);
-               } else if (data[1] == 0) { /* Stop The Watchdog */
-                       outl(0x0, dev->iobase + APCI3501_TIMER_CTRL_REG);
-               } else if (data[1] == 2) {
-                       ctrl = inl(dev->iobase + APCI3501_TIMER_CTRL_REG);
-                       ctrl &= 0xfffff9ff;
-                       ctrl |= 0x200;
-                       outl(ctrl, dev->iobase + APCI3501_TIMER_CTRL_REG);
-               }
-       }
+       if (devpriv->timer_mode == ADDIDATA_WATCHDOG ||
+           devpriv->timer_mode == ADDIDATA_TIMER) {
+               ctrl = inl(dev->iobase + APCI3501_TIMER_CTRL_REG);
+               ctrl &= 0xfffff9ff;
 
-       if (devpriv->timer_mode == ADDIDATA_TIMER) {
-               if (data[1] == 1) {
-                       ctrl = inl(dev->iobase + APCI3501_TIMER_CTRL_REG);
-                       ctrl &= 0xfffff9ff;
+               if (data[1] == 1) {             /* enable */
                        ctrl |= 0x1;
-                       /* Enable the Timer */
-                       outl(ctrl, dev->iobase + APCI3501_TIMER_CTRL_REG);
-               } else if (data[1] == 0) {
-                       /* Stop The Timer */
-                       ctrl = inl(dev->iobase + APCI3501_TIMER_CTRL_REG);
-                       ctrl &= 0xfffff9fe;
-                       outl(ctrl, dev->iobase + APCI3501_TIMER_CTRL_REG);
-               }
-
-               else if (data[1] == 2) {
-                       /* Trigger the Timer */
-                       ctrl = inl(dev->iobase + APCI3501_TIMER_CTRL_REG);
-                       ctrl &= 0xfffff9ff;
+               } else if (data[1] == 0) {      /* stop */
+                       if (devpriv->timer_mode == ADDIDATA_WATCHDOG)
+                               ctrl = 0;
+                       else
+                               ctrl &= ~0x1;
+               } else if (data[1] == 2) {      /* trigger */
                        ctrl |= 0x200;
-                       outl(ctrl, dev->iobase + APCI3501_TIMER_CTRL_REG);
                }
+               outl(ctrl, dev->iobase + APCI3501_TIMER_CTRL_REG);
        }
 
        inl(dev->iobase + APCI3501_TIMER_STATUS_REG);
-- 
2.4.3

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

Reply via email to