]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.8.4/staging-comedi-dt9812-use-cr_chan-for-channel-number.patch
Linux 4.14.95
[thirdparty/kernel/stable-queue.git] / releases / 3.8.4 / staging-comedi-dt9812-use-cr_chan-for-channel-number.patch
CommitLineData
34a069e8
GKH
1From 564c526a1bed5e42b5cd52cfe1752c4296ef17a6 Mon Sep 17 00:00:00 2001
2From: Ian Abbott <abbotti@mev.co.uk>
3Date: Tue, 5 Mar 2013 13:13:44 +0000
4Subject: staging: comedi: dt9812: use CR_CHAN() for channel number
5
6From: Ian Abbott <abbotti@mev.co.uk>
7
8commit 564c526a1bed5e42b5cd52cfe1752c4296ef17a6 upstream.
9
10As pointed out by Dan Carpenper in
11<http://driverdev.linuxdriverproject.org/pipermail/devel/2013-February/036025.html>,
12the dt9812 comedi driver's use of the `chanspec` member of `struct
13comedi_insn` as a channel number is incorrect. Change it to use
14`CR_CHAN(insn->chanspec)` as the channel number (where `insn` is a
15pointer to the `struct comedi_insn` being processed).
16
17Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
18Cc: Anders Blomdell <anders.blomdell@control.lth.se>
19Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
20Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
21
22---
23 drivers/staging/comedi/drivers/dt9812.c | 16 ++++++++++------
24 1 file changed, 10 insertions(+), 6 deletions(-)
25
26--- a/drivers/staging/comedi/drivers/dt9812.c
27+++ b/drivers/staging/comedi/drivers/dt9812.c
28@@ -948,12 +948,13 @@ static int dt9812_di_rinsn(struct comedi
29 unsigned int *data)
30 {
31 struct comedi_dt9812 *devpriv = dev->private;
32+ unsigned int channel = CR_CHAN(insn->chanspec);
33 int n;
34 u8 bits = 0;
35
36 dt9812_digital_in(devpriv->slot, &bits);
37 for (n = 0; n < insn->n; n++)
38- data[n] = ((1 << insn->chanspec) & bits) != 0;
39+ data[n] = ((1 << channel) & bits) != 0;
40 return n;
41 }
42
43@@ -962,12 +963,13 @@ static int dt9812_do_winsn(struct comedi
44 unsigned int *data)
45 {
46 struct comedi_dt9812 *devpriv = dev->private;
47+ unsigned int channel = CR_CHAN(insn->chanspec);
48 int n;
49 u8 bits = 0;
50
51 dt9812_digital_out_shadow(devpriv->slot, &bits);
52 for (n = 0; n < insn->n; n++) {
53- u8 mask = 1 << insn->chanspec;
54+ u8 mask = 1 << channel;
55
56 bits &= ~mask;
57 if (data[n])
58@@ -982,13 +984,13 @@ static int dt9812_ai_rinsn(struct comedi
59 unsigned int *data)
60 {
61 struct comedi_dt9812 *devpriv = dev->private;
62+ unsigned int channel = CR_CHAN(insn->chanspec);
63 int n;
64
65 for (n = 0; n < insn->n; n++) {
66 u16 value = 0;
67
68- dt9812_analog_in(devpriv->slot, insn->chanspec, &value,
69- DT9812_GAIN_1);
70+ dt9812_analog_in(devpriv->slot, channel, &value, DT9812_GAIN_1);
71 data[n] = value;
72 }
73 return n;
74@@ -999,12 +1001,13 @@ static int dt9812_ao_rinsn(struct comedi
75 unsigned int *data)
76 {
77 struct comedi_dt9812 *devpriv = dev->private;
78+ unsigned int channel = CR_CHAN(insn->chanspec);
79 int n;
80 u16 value;
81
82 for (n = 0; n < insn->n; n++) {
83 value = 0;
84- dt9812_analog_out_shadow(devpriv->slot, insn->chanspec, &value);
85+ dt9812_analog_out_shadow(devpriv->slot, channel, &value);
86 data[n] = value;
87 }
88 return n;
89@@ -1015,10 +1018,11 @@ static int dt9812_ao_winsn(struct comedi
90 unsigned int *data)
91 {
92 struct comedi_dt9812 *devpriv = dev->private;
93+ unsigned int channel = CR_CHAN(insn->chanspec);
94 int n;
95
96 for (n = 0; n < insn->n; n++)
97- dt9812_analog_out(devpriv->slot, insn->chanspec, data[n]);
98+ dt9812_analog_out(devpriv->slot, channel, data[n]);
99 return n;
100 }
101