]>
Commit | Line | Data |
---|---|---|
34a069e8 GKH |
1 | From 564c526a1bed5e42b5cd52cfe1752c4296ef17a6 Mon Sep 17 00:00:00 2001 |
2 | From: Ian Abbott <abbotti@mev.co.uk> | |
3 | Date: Tue, 5 Mar 2013 13:13:44 +0000 | |
4 | Subject: staging: comedi: dt9812: use CR_CHAN() for channel number | |
5 | ||
6 | From: Ian Abbott <abbotti@mev.co.uk> | |
7 | ||
8 | commit 564c526a1bed5e42b5cd52cfe1752c4296ef17a6 upstream. | |
9 | ||
10 | As pointed out by Dan Carpenper in | |
11 | <http://driverdev.linuxdriverproject.org/pipermail/devel/2013-February/036025.html>, | |
12 | the dt9812 comedi driver's use of the `chanspec` member of `struct | |
13 | comedi_insn` as a channel number is incorrect. Change it to use | |
14 | `CR_CHAN(insn->chanspec)` as the channel number (where `insn` is a | |
15 | pointer to the `struct comedi_insn` being processed). | |
16 | ||
17 | Reported-by: Dan Carpenter <dan.carpenter@oracle.com> | |
18 | Cc: Anders Blomdell <anders.blomdell@control.lth.se> | |
19 | Signed-off-by: Ian Abbott <abbotti@mev.co.uk> | |
20 | Signed-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 |