comedi: Move "comedi_8254.h" to <linux/comedi/comedi_8254.h>
authorIan Abbott <abbotti@mev.co.uk>
Wed, 17 Nov 2021 12:06:02 +0000 (12:06 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Nov 2021 15:48:59 +0000 (16:48 +0100)
Some of the header files in "drivers/comedi/drivers/" are common enough
to be useful to out-of-tree comedi driver modules.  Using them for
out-of-tree module builds is hampered by the headers being outside the
"include/" directory so it is desirable to move them.

There are about a couple of dozen or so Comedi device drivers that use
the "comedi_8254" module to add timers based on the venerable 8254
Programmable Interval Timer chip.  The macros and declarations to use
that module are in the "comedi_8254.h" header file in the comedi
"drivers" directory.  Move it into "include/linux/comedi/".

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Link: https://lore.kernel.org/r/20211117120604.117740-5-abbotti@mev.co.uk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
29 files changed:
drivers/comedi/drivers/adl_pci9111.c
drivers/comedi/drivers/adl_pci9118.c
drivers/comedi/drivers/adv_pci1710.c
drivers/comedi/drivers/adv_pci_dio.c
drivers/comedi/drivers/aio_aio12_8.c
drivers/comedi/drivers/amplc_dio200_common.c
drivers/comedi/drivers/amplc_pci224.c
drivers/comedi/drivers/amplc_pci230.c
drivers/comedi/drivers/cb_das16_cs.c
drivers/comedi/drivers/cb_pcidas.c
drivers/comedi/drivers/cb_pcimdas.c
drivers/comedi/drivers/comedi_8254.c
drivers/comedi/drivers/comedi_8254.h [deleted file]
drivers/comedi/drivers/das08.c
drivers/comedi/drivers/das16.c
drivers/comedi/drivers/das16m1.c
drivers/comedi/drivers/das1800.c
drivers/comedi/drivers/das6402.c
drivers/comedi/drivers/das800.c
drivers/comedi/drivers/me4000.c
drivers/comedi/drivers/ni_at_a2150.c
drivers/comedi/drivers/ni_at_ao.c
drivers/comedi/drivers/ni_labpc_common.c
drivers/comedi/drivers/pcl711.c
drivers/comedi/drivers/pcl812.c
drivers/comedi/drivers/pcl816.c
drivers/comedi/drivers/pcl818.c
drivers/comedi/drivers/rtd520.c
include/linux/comedi/comedi_8254.h [new file with mode: 0644]

index 65454f3ecc91023620f1e369f05cbf9367116405..c50f94272a7404d9c57b81b84b31f375a6e2e43e 100644 (file)
@@ -43,9 +43,9 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "plx9052.h"
-#include "comedi_8254.h"
 
 #define PCI9111_FIFO_HALF_SIZE 512
 
index 248cec3d894fd147822bac3b335c2ab1cb5eb0c7..9a816c71830312e8dbeea3bbf4bca5b8c2faf246 100644 (file)
@@ -79,9 +79,9 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/comedi/comedi_pci.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "amcc_s5933.h"
-#include "comedi_8254.h"
 
 /*
  * PCI BAR2 Register map (dev->iobase)
index 47a800d72e58539f2c70c72f6f5eb346994b96d0..4f26399682602545ca83042a6bfca072060549dd 100644 (file)
@@ -31,8 +31,8 @@
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "amcc_s5933.h"
 
 /*
index 1ec602f8c6e100476070ca7be1da1dd9ecd0dc14..efa3e46b554bea1b4452ad8128a8e15abec0c1b8 100644 (file)
@@ -25,8 +25,7 @@
 #include <linux/delay.h>
 #include <linux/comedi/comedi_pci.h>
 #include <linux/comedi/comedi_8255.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * Register offset definitions
index cd797dc0f828a2e907388006e7e33843c34fd8cb..30b8a32204d8265468b5c0a108f56e63a240e0b4 100644 (file)
@@ -24,8 +24,7 @@
 #include <linux/module.h>
 #include <linux/comedi/comedidev.h>
 #include <linux/comedi/comedi_8255.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * Register map
index 26b4049b366cebd14549b725638a8eb117244603..ff651f2eb86cd1c493e7714f61202b612615417c 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
 #include <linux/comedi/comedi_8255.h>  /* only for register defines */
+#include <linux/comedi/comedi_8254.h>
 
 #include "amplc_dio200.h"
-#include "comedi_8254.h"
 
 /* 200 series registers */
 #define DIO200_IO_SIZE         0x20
index 3cf1b7fa565d7105b5aed7fe91c30a91b8501d05..5a04e55daeea267370037baa179ac4b9fb948632 100644 (file)
@@ -97,8 +97,7 @@
 #include <linux/interrupt.h>
 #include <linux/slab.h>
 #include <linux/comedi/comedi_pci.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * PCI224/234 i/o space 1 (PCIBAR2) registers.
index 93f7057d5b3f2780a0ad95f479a315ec7869e39c..92ba8b8c0172a3156d08dd64249dd55fe616b245 100644 (file)
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
 #include <linux/comedi/comedi_8255.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * PCI230 PCI configuration register information
index 190d73a7d12cf9f8f4572761256cd865bddc2614..8e0d2fa5f95d8c44c901566c6fec0620f3b36a9a 100644 (file)
@@ -28,8 +28,7 @@
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 #include <linux/comedi/comedi_pcmcia.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * Register I/O map
index 75ff02b47959e185c69fdec11a1b6a28b3260b41..0c7576b967fca2dd580313d3c84e8f613267c3c0 100644 (file)
@@ -56,8 +56,8 @@
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
 #include <linux/comedi/comedi_8255.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "amcc_s5933.h"
 
 #define AI_BUFFER_SIZE         1024    /* max ai fifo size */
index 7bc0805c69e274e618dfea0056d8c075d2e07d74..8bdb00774f11b085ea239de8f9ffd4977f57bbd1 100644 (file)
@@ -36,8 +36,8 @@
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
 #include <linux/comedi/comedi_8255.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "plx9052.h"
 
 /*
index fac81567133db3f3a4db0ee1203b9bfc16fb478c..b4185c1b2695bcad66ccc9a6bc924d2b18438056 100644 (file)
 #include <linux/slab.h>
 #include <linux/io.h>
 #include <linux/comedi/comedidev.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 static unsigned int __i8254_read(struct comedi_8254 *i8254, unsigned int reg)
 {
diff --git a/drivers/comedi/drivers/comedi_8254.h b/drivers/comedi/drivers/comedi_8254.h
deleted file mode 100644 (file)
index d826441..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- * comedi_8254.h
- * Generic 8254 timer/counter support
- * Copyright (C) 2014 H Hartley Sweeten <hsweeten@visionengravers.com>
- *
- * COMEDI - Linux Control and Measurement Device Interface
- * Copyright (C) 2000 David A. Schleef <ds@schleef.org>
- */
-
-#ifndef _COMEDI_8254_H
-#define _COMEDI_8254_H
-
-#include <linux/types.h>
-
-struct comedi_device;
-struct comedi_insn;
-struct comedi_subdevice;
-
-/*
- * Common oscillator base values in nanoseconds
- */
-#define I8254_OSC_BASE_10MHZ   100
-#define I8254_OSC_BASE_5MHZ    200
-#define I8254_OSC_BASE_4MHZ    250
-#define I8254_OSC_BASE_2MHZ    500
-#define I8254_OSC_BASE_1MHZ    1000
-#define I8254_OSC_BASE_100KHZ  10000
-#define I8254_OSC_BASE_10KHZ   100000
-#define I8254_OSC_BASE_1KHZ    1000000
-
-/*
- * I/O access size used to read/write registers
- */
-#define I8254_IO8              1
-#define I8254_IO16             2
-#define I8254_IO32             4
-
-/*
- * Register map for generic 8254 timer (I8254_IO8 with 0 regshift)
- */
-#define I8254_COUNTER0_REG             0x00
-#define I8254_COUNTER1_REG             0x01
-#define I8254_COUNTER2_REG             0x02
-#define I8254_CTRL_REG                 0x03
-#define I8254_CTRL_SEL_CTR(x)          ((x) << 6)
-#define I8254_CTRL_READBACK(x)         (I8254_CTRL_SEL_CTR(3) | BIT(x))
-#define I8254_CTRL_READBACK_COUNT      I8254_CTRL_READBACK(4)
-#define I8254_CTRL_READBACK_STATUS     I8254_CTRL_READBACK(5)
-#define I8254_CTRL_READBACK_SEL_CTR(x) (2 << (x))
-#define I8254_CTRL_RW(x)               (((x) & 0x3) << 4)
-#define I8254_CTRL_LATCH               I8254_CTRL_RW(0)
-#define I8254_CTRL_LSB_ONLY            I8254_CTRL_RW(1)
-#define I8254_CTRL_MSB_ONLY            I8254_CTRL_RW(2)
-#define I8254_CTRL_LSB_MSB             I8254_CTRL_RW(3)
-
-/* counter maps zero to 0x10000 */
-#define I8254_MAX_COUNT                        0x10000
-
-/**
- * struct comedi_8254 - private data used by this module
- * @iobase:            PIO base address of the registers (in/out)
- * @mmio:              MMIO base address of the registers (read/write)
- * @iosize:            I/O size used to access the registers (b/w/l)
- * @regshift:          register gap shift
- * @osc_base:          cascaded oscillator speed in ns
- * @divisor:           divisor for single counter
- * @divisor1:          divisor loaded into first cascaded counter
- * @divisor2:          divisor loaded into second cascaded counter
- * #next_div:          next divisor for single counter
- * @next_div1:         next divisor to use for first cascaded counter
- * @next_div2:         next divisor to use for second cascaded counter
- * @clock_src;         current clock source for each counter (driver specific)
- * @gate_src;          current gate source  for each counter (driver specific)
- * @busy:              flags used to indicate that a counter is "busy"
- * @insn_config:       driver specific (*insn_config) callback
- */
-struct comedi_8254 {
-       unsigned long iobase;
-       void __iomem *mmio;
-       unsigned int iosize;
-       unsigned int regshift;
-       unsigned int osc_base;
-       unsigned int divisor;
-       unsigned int divisor1;
-       unsigned int divisor2;
-       unsigned int next_div;
-       unsigned int next_div1;
-       unsigned int next_div2;
-       unsigned int clock_src[3];
-       unsigned int gate_src[3];
-       bool busy[3];
-
-       int (*insn_config)(struct comedi_device *dev,
-                          struct comedi_subdevice *s,
-                          struct comedi_insn *insn, unsigned int *data);
-};
-
-unsigned int comedi_8254_status(struct comedi_8254 *i8254,
-                               unsigned int counter);
-unsigned int comedi_8254_read(struct comedi_8254 *i8254, unsigned int counter);
-void comedi_8254_write(struct comedi_8254 *i8254,
-                      unsigned int counter, unsigned int val);
-
-int comedi_8254_set_mode(struct comedi_8254 *i8254,
-                        unsigned int counter, unsigned int mode);
-int comedi_8254_load(struct comedi_8254 *i8254,
-                    unsigned int counter, unsigned int val, unsigned int mode);
-
-void comedi_8254_pacer_enable(struct comedi_8254 *i8254,
-                             unsigned int counter1, unsigned int counter2,
-                             bool enable);
-void comedi_8254_update_divisors(struct comedi_8254 *i8254);
-void comedi_8254_cascade_ns_to_timer(struct comedi_8254 *i8254,
-                                    unsigned int *nanosec, unsigned int flags);
-void comedi_8254_ns_to_timer(struct comedi_8254 *i8254,
-                            unsigned int *nanosec, unsigned int flags);
-
-void comedi_8254_set_busy(struct comedi_8254 *i8254,
-                         unsigned int counter, bool busy);
-
-void comedi_8254_subdevice_init(struct comedi_subdevice *s,
-                               struct comedi_8254 *i8254);
-
-struct comedi_8254 *comedi_8254_init(unsigned long iobase,
-                                    unsigned int osc_base,
-                                    unsigned int iosize,
-                                    unsigned int regshift);
-struct comedi_8254 *comedi_8254_mm_init(void __iomem *mmio,
-                                       unsigned int osc_base,
-                                       unsigned int iosize,
-                                       unsigned int regshift);
-
-#endif /* _COMEDI_8254_H */
index bab868de2967c34dda17386ac75ae3e0ea582db6..f8ab3af2e3910cf0302a8df7c3bda4d7ee33ccca 100644 (file)
@@ -12,8 +12,8 @@
 #include <linux/module.h>
 #include <linux/comedi/comedidev.h>
 #include <linux/comedi/comedi_8255.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "das08.h"
 
 /*
index 338396736936931d2b2b40beff9e21008387b2a9..f6649ffa967080f776fbc51b9cb7a3de11b4bd24 100644 (file)
@@ -65,9 +65,9 @@
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
 #include <linux/comedi/comedi_8255.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "comedi_isadma.h"
-#include "comedi_8254.h"
 
 #define DAS16_DMA_SIZE 0xff00  /*  size in bytes of allocated dma buffer */
 
index ea55024d8c5ac89ea879390cd1915f533efb851e..275effb77746b6d58aebdd4300a95577a26924d6 100644 (file)
@@ -44,8 +44,7 @@
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
 #include <linux/comedi/comedi_8255.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * Register map (dev->iobase)
index 76880374235088362c20a8d88d6ebdda6f42ec86..a43d3414a12211c594bb022c5c1a46df24e82f5f 100644 (file)
@@ -74,9 +74,9 @@
 #include <linux/slab.h>
 #include <linux/io.h>
 #include <linux/comedi/comedidev.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "comedi_isadma.h"
-#include "comedi_8254.h"
 
 /* misc. defines */
 #define DAS1800_SIZE           16      /* uses 16 io addresses */
index d411ab7cf37cce57e19bacdc033d8dec368a5df8..1af394591e748055bcb33dc89d9b68e15e45557c 100644 (file)
@@ -25,8 +25,7 @@
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * Register I/O map
index c95e0fcb94a497cf1a4e759869d8f03870d20f7c..4ca33f46eaa7367923e1ae01de7eae86bfdd3db8 100644 (file)
@@ -47,8 +47,7 @@
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 #include <linux/comedi/comedidev.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 #define N_CHAN_AI             8        /*  number of analog input channels */
 
index c5dc8199771f434f43ff89a9ad51d713e7a15a05..9aea02b86ed912fe7a00b46909d682a509e980cc 100644 (file)
@@ -33,8 +33,8 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "plx9052.h"
 
 #define ME4000_FIRMWARE                "me4000_firmware.bin"
index ce5de58c499f1a23481f4d97f35c1a9f4d91c1c5..9942d770add85092fd5d1c7d7ec402efa4098822 100644 (file)
@@ -40,9 +40,9 @@
 #include <linux/slab.h>
 #include <linux/io.h>
 #include <linux/comedi/comedidev.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "comedi_isadma.h"
-#include "comedi_8254.h"
 
 #define A2150_DMA_BUFFER_SIZE  0xff00  /*  size in bytes of dma buffer */
 
index a06dfb9da329baeb26de5a28735fa2f3e8a75878..9f3147b72aa811d4a5df6b6b327ed7f639854649 100644 (file)
@@ -26,8 +26,7 @@
 
 #include <linux/module.h>
 #include <linux/comedi/comedidev.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * Register map
index 4a1269aeb3718e4060fcf86b2ec9942c2239b124..7632496532285423034068d62e5cf03df0bbf376 100644 (file)
@@ -14,8 +14,8 @@
 #include <linux/slab.h>
 #include <linux/comedi/comedidev.h>
 #include <linux/comedi/comedi_8255.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "ni_labpc.h"
 #include "ni_labpc_regs.h"
 #include "ni_labpc_isadma.h"
index f1c383bd9d87283b5f1b83bca8f65674f4d59dce..05172c553c8ac0cb76744afcfa521b718e267474 100644 (file)
@@ -30,8 +30,7 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
-
-#include "comedi_8254.h"
+#include <linux/comedi/comedi_8254.h>
 
 /*
  * I/O port register map
index f00976ddfc2a441bd29533ccaafc17896132d943..790f54476a9138905b89116830fdd54823d258db 100644 (file)
 #include <linux/delay.h>
 #include <linux/io.h>
 #include <linux/comedi/comedidev.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "comedi_isadma.h"
-#include "comedi_8254.h"
 
 /*
  * Register I/O map
index c5acdc8913f8f7656c425846634b67a711fa5d0f..77b30246d966296953ae4ca0c1e8e3049f69a8ea 100644 (file)
@@ -36,9 +36,9 @@
 #include <linux/io.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "comedi_isadma.h"
-#include "comedi_8254.h"
 
 /*
  * Register I/O map
index 20fcd6d588f8972f66b1b8109cce5ca8147ca484..e5b7793cce053369df66aae26cda9e3154c75d2e 100644 (file)
@@ -98,9 +98,9 @@
 #include <linux/io.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedidev.h>
+#include <linux/comedi/comedi_8254.h>
 
 #include "comedi_isadma.h"
-#include "comedi_8254.h"
 
 /*
  * Register I/O map
index ee5bca2b1c095bfc541cabf7bd00be01e49d2e7b..7e0ec1a2a2caf8db77a7d4ed6eccc85d11efb4a8 100644 (file)
@@ -86,8 +86,8 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/comedi/comedi_pci.h>
+#include <linux/comedi/comedi_8254.h>
 
-#include "comedi_8254.h"
 #include "plx9080.h"
 
 /*
diff --git a/include/linux/comedi/comedi_8254.h b/include/linux/comedi/comedi_8254.h
new file mode 100644 (file)
index 0000000..d826441
--- /dev/null
@@ -0,0 +1,134 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * comedi_8254.h
+ * Generic 8254 timer/counter support
+ * Copyright (C) 2014 H Hartley Sweeten <hsweeten@visionengravers.com>
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 2000 David A. Schleef <ds@schleef.org>
+ */
+
+#ifndef _COMEDI_8254_H
+#define _COMEDI_8254_H
+
+#include <linux/types.h>
+
+struct comedi_device;
+struct comedi_insn;
+struct comedi_subdevice;
+
+/*
+ * Common oscillator base values in nanoseconds
+ */
+#define I8254_OSC_BASE_10MHZ   100
+#define I8254_OSC_BASE_5MHZ    200
+#define I8254_OSC_BASE_4MHZ    250
+#define I8254_OSC_BASE_2MHZ    500
+#define I8254_OSC_BASE_1MHZ    1000
+#define I8254_OSC_BASE_100KHZ  10000
+#define I8254_OSC_BASE_10KHZ   100000
+#define I8254_OSC_BASE_1KHZ    1000000
+
+/*
+ * I/O access size used to read/write registers
+ */
+#define I8254_IO8              1
+#define I8254_IO16             2
+#define I8254_IO32             4
+
+/*
+ * Register map for generic 8254 timer (I8254_IO8 with 0 regshift)
+ */
+#define I8254_COUNTER0_REG             0x00
+#define I8254_COUNTER1_REG             0x01
+#define I8254_COUNTER2_REG             0x02
+#define I8254_CTRL_REG                 0x03
+#define I8254_CTRL_SEL_CTR(x)          ((x) << 6)
+#define I8254_CTRL_READBACK(x)         (I8254_CTRL_SEL_CTR(3) | BIT(x))
+#define I8254_CTRL_READBACK_COUNT      I8254_CTRL_READBACK(4)
+#define I8254_CTRL_READBACK_STATUS     I8254_CTRL_READBACK(5)
+#define I8254_CTRL_READBACK_SEL_CTR(x) (2 << (x))
+#define I8254_CTRL_RW(x)               (((x) & 0x3) << 4)
+#define I8254_CTRL_LATCH               I8254_CTRL_RW(0)
+#define I8254_CTRL_LSB_ONLY            I8254_CTRL_RW(1)
+#define I8254_CTRL_MSB_ONLY            I8254_CTRL_RW(2)
+#define I8254_CTRL_LSB_MSB             I8254_CTRL_RW(3)
+
+/* counter maps zero to 0x10000 */
+#define I8254_MAX_COUNT                        0x10000
+
+/**
+ * struct comedi_8254 - private data used by this module
+ * @iobase:            PIO base address of the registers (in/out)
+ * @mmio:              MMIO base address of the registers (read/write)
+ * @iosize:            I/O size used to access the registers (b/w/l)
+ * @regshift:          register gap shift
+ * @osc_base:          cascaded oscillator speed in ns
+ * @divisor:           divisor for single counter
+ * @divisor1:          divisor loaded into first cascaded counter
+ * @divisor2:          divisor loaded into second cascaded counter
+ * #next_div:          next divisor for single counter
+ * @next_div1:         next divisor to use for first cascaded counter
+ * @next_div2:         next divisor to use for second cascaded counter
+ * @clock_src;         current clock source for each counter (driver specific)
+ * @gate_src;          current gate source  for each counter (driver specific)
+ * @busy:              flags used to indicate that a counter is "busy"
+ * @insn_config:       driver specific (*insn_config) callback
+ */
+struct comedi_8254 {
+       unsigned long iobase;
+       void __iomem *mmio;
+       unsigned int iosize;
+       unsigned int regshift;
+       unsigned int osc_base;
+       unsigned int divisor;
+       unsigned int divisor1;
+       unsigned int divisor2;
+       unsigned int next_div;
+       unsigned int next_div1;
+       unsigned int next_div2;
+       unsigned int clock_src[3];
+       unsigned int gate_src[3];
+       bool busy[3];
+
+       int (*insn_config)(struct comedi_device *dev,
+                          struct comedi_subdevice *s,
+                          struct comedi_insn *insn, unsigned int *data);
+};
+
+unsigned int comedi_8254_status(struct comedi_8254 *i8254,
+                               unsigned int counter);
+unsigned int comedi_8254_read(struct comedi_8254 *i8254, unsigned int counter);
+void comedi_8254_write(struct comedi_8254 *i8254,
+                      unsigned int counter, unsigned int val);
+
+int comedi_8254_set_mode(struct comedi_8254 *i8254,
+                        unsigned int counter, unsigned int mode);
+int comedi_8254_load(struct comedi_8254 *i8254,
+                    unsigned int counter, unsigned int val, unsigned int mode);
+
+void comedi_8254_pacer_enable(struct comedi_8254 *i8254,
+                             unsigned int counter1, unsigned int counter2,
+                             bool enable);
+void comedi_8254_update_divisors(struct comedi_8254 *i8254);
+void comedi_8254_cascade_ns_to_timer(struct comedi_8254 *i8254,
+                                    unsigned int *nanosec, unsigned int flags);
+void comedi_8254_ns_to_timer(struct comedi_8254 *i8254,
+                            unsigned int *nanosec, unsigned int flags);
+
+void comedi_8254_set_busy(struct comedi_8254 *i8254,
+                         unsigned int counter, bool busy);
+
+void comedi_8254_subdevice_init(struct comedi_subdevice *s,
+                               struct comedi_8254 *i8254);
+
+struct comedi_8254 *comedi_8254_init(unsigned long iobase,
+                                    unsigned int osc_base,
+                                    unsigned int iosize,
+                                    unsigned int regshift);
+struct comedi_8254 *comedi_8254_mm_init(void __iomem *mmio,
+                                       unsigned int osc_base,
+                                       unsigned int iosize,
+                                       unsigned int regshift);
+
+#endif /* _COMEDI_8254_H */