aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/drivers/ni_6527.c
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2013-10-01 15:09:42 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-10-03 14:09:52 -0700
commit054fd2f647ff040fd4a00d82f9df6771055a3136 (patch)
tree3c35bb69179e928c55a3e10db199c0fe66da2579 /drivers/staging/comedi/drivers/ni_6527.c
parentstaging: comedi: ni_6527: remove extra probe noise (diff)
downloadlinux-dev-054fd2f647ff040fd4a00d82f9df6771055a3136.tar.xz
linux-dev-054fd2f647ff040fd4a00d82f9df6771055a3136.zip
staging: comedi: ni_6527: factor out the code that sets the filter interval
To clarify the digital input subdevice (*insn_config) a bit, factor out the code that sets the filter interval for deglitching the digital inputs. Also, rename the CamelCase define used for the filter interval registers. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_6527.c')
-rw-r--r--drivers/staging/comedi/drivers/ni_6527.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c
index 4608d61aa44e..70304bdb536a 100644
--- a/drivers/staging/comedi/drivers/ni_6527.c
+++ b/drivers/staging/comedi/drivers/ni_6527.c
@@ -51,7 +51,7 @@ Updated: Sat, 25 Jan 2003 13:24:40 -0800
#define ClrFilter 0x02
#define ClrInterval 0x01
-#define Filter_Interval(x) (0x08+(x))
+#define NI6527_FILT_INTERVAL_REG(x) (0x08 + (x))
#define Filter_Enable(x) (0x0c+(x))
#define Change_Status 0x14
@@ -93,6 +93,23 @@ struct ni6527_private {
unsigned int filter_enable;
};
+static void ni6527_set_filter_interval(struct comedi_device *dev,
+ unsigned int val)
+{
+ struct ni6527_private *devpriv = dev->private;
+ void __iomem *mmio = devpriv->mite->daq_io_addr;
+
+ if (val != devpriv->filter_interval) {
+ writeb(val & 0xff, mmio + NI6527_FILT_INTERVAL_REG(0));
+ writeb((val >> 8) & 0xff, mmio + NI6527_FILT_INTERVAL_REG(1));
+ writeb((val >> 16) & 0x0f, mmio + NI6527_FILT_INTERVAL_REG(2));
+
+ writeb(ClrInterval, mmio + Clear_Register);
+
+ devpriv->filter_interval = val;
+ }
+}
+
static int ni6527_di_insn_config(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data)
@@ -111,19 +128,7 @@ static int ni6527_di_insn_config(struct comedi_device *dev,
interval = (data[1] + 100) / 200;
data[1] = interval * 200;
- if (interval != devpriv->filter_interval) {
- writeb(interval & 0xff,
- devpriv->mite->daq_io_addr + Filter_Interval(0));
- writeb((interval >> 8) & 0xff,
- devpriv->mite->daq_io_addr + Filter_Interval(1));
- writeb((interval >> 16) & 0x0f,
- devpriv->mite->daq_io_addr + Filter_Interval(2));
-
- writeb(ClrInterval,
- devpriv->mite->daq_io_addr + Clear_Register);
-
- devpriv->filter_interval = interval;
- }
+ ni6527_set_filter_interval(dev, interval);
devpriv->filter_enable |= 1 << chan;
} else {