Re: [PATCH-stable-3.0-3.6 1/2] staging: comedi: ni_labpc: correct differential channel sequence for AI commands

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ian,

On Wed, Feb 27, 2013 at 12:52:45PM +0000, Ian Abbott wrote:
> Commit 4c4bc25d0fa6beaf054c0b4c3b324487f266c820 upstream.
> 
> Tuomas <tvainikk _at_ gmail _dot_ com> reported problems getting
> meaningful output from a Lab-PC+ in differential mode for AI cmds, but
> AI insn reads gave correct readings.  He tracked it down to two
> problems, one of which is addressed by this patch.
> 
> It seems the setting of the channel bits for particular scanning modes
> was incorrect for differential mode.  (Only half the number of channels
> are available in differential mode; comedi refers to them as channels 0,
> 1, 2 and 3, but the hardware documentation refers to them as channels 0,
> 2, 4 and 6.)  In differential mode, the setting of the channel enable
> bits in the command1 register should depend on whether the scan enable
> bit is set.  Effectively, we need to double the comedi channel number
> when the scan enable bit is not set in differential mode.  The scan
> enable bit gets set when the AI scan mode is `MODE_MULT_CHAN_UP` or
> `MODE_MULT_CHAN_DOWN`, and gets cleared when the AI scan mode is
> `MODE_SINGLE_CHAN` or `MODE_SINGLE_CHAN_INTERVAL`.  The existing test
> for whether the comedi channel number needs to be doubled in
> differential mode is incorrect in `labpc_ai_cmd()`.  This patch corrects
> the test.
> 
> Thanks to Tuomas for suggesting the fix.
> 
> Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx>
> ---
> Applies to stable/longterm kernels 3.0.x to 3.6.x inclusive.
> ---
>  drivers/staging/comedi/drivers/ni_labpc.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c
> index d3a1d65..d34388b 100644
> --- a/drivers/staging/comedi/drivers/ni_labpc.c
> +++ b/drivers/staging/comedi/drivers/ni_labpc.c
> @@ -1263,7 +1263,9 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
>  	else
>  		channel = CR_CHAN(cmd->chanlist[0]);
>  	/* munge channel bits for differential / scan disabled mode */
> -	if (labpc_ai_scan_mode(cmd) != MODE_SINGLE_CHAN && aref == AREF_DIFF)
> +	if ((labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN ||
> +	     labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN_INTERVAL) &&
> +	    aref == AREF_DIFF)
>  		channel *= 2;
>  	devpriv->command1_bits |= ADC_CHAN_BITS(channel);
>  	devpriv->command1_bits |= thisboard->ai_range_code[range];
> -- 
> 1.8.1.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

These two backports to 3.0 (4c4bc25d0fa6beaf054c0b4c3b324487f266c820 and
22056e2b46246d97ff0f7c6e21a77b8daa07f02c) apply cleanly to 3.5.  I've
queued them in the 3.5 tree as well.  Thanks

Cheers,
--
Luis
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]