lkml.org 
[lkml]   [2013]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 128/153] staging: comedi: ni_labpc: set up command4 register *after* command3
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Ian Abbott <abbotti@mev.co.uk>

    commit 22056e2b46246d97ff0f7c6e21a77b8daa07f02c 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 that writing to the command3 register after writing to the
    command4 register in `labpc_ai_cmd()` messes up the differential
    reference bit setting in the command4 register. Set up the command4
    register after the command3 register (as in `labpc_ai_rinsn()`) to avoid
    the problem.

    Thanks to Tuomas for suggesting the fix.

    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/staging/comedi/drivers/ni_labpc.c | 31 ++++++++++++++++---------------
    1 file changed, 16 insertions(+), 15 deletions(-)

    --- a/drivers/staging/comedi/drivers/ni_labpc.c
    +++ b/drivers/staging/comedi/drivers/ni_labpc.c
    @@ -1282,21 +1282,6 @@ static int labpc_ai_cmd(struct comedi_de
    devpriv->write_byte(devpriv->command1_bits,
    dev->iobase + COMMAND1_REG);
    }
    - /* setup any external triggering/pacing (command4 register) */
    - devpriv->command4_bits = 0;
    - if (cmd->convert_src != TRIG_EXT)
    - devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
    - /* XXX should discard first scan when using interval scanning
    - * since manual says it is not synced with scan clock */
    - if (labpc_use_continuous_mode(cmd) == 0) {
    - devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
    - if (cmd->scan_begin_src == TRIG_EXT)
    - devpriv->command4_bits |= EXT_SCAN_EN_BIT;
    - }
    - /* single-ended/differential */
    - if (aref == AREF_DIFF)
    - devpriv->command4_bits |= ADC_DIFF_BIT;
    - devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG);

    devpriv->write_byte(cmd->chanlist_len,
    dev->iobase + INTERVAL_COUNT_REG);
    @@ -1376,6 +1361,22 @@ static int labpc_ai_cmd(struct comedi_de
    devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT;
    devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG);

    + /* setup any external triggering/pacing (command4 register) */
    + devpriv->command4_bits = 0;
    + if (cmd->convert_src != TRIG_EXT)
    + devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
    + /* XXX should discard first scan when using interval scanning
    + * since manual says it is not synced with scan clock */
    + if (labpc_use_continuous_mode(cmd) == 0) {
    + devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
    + if (cmd->scan_begin_src == TRIG_EXT)
    + devpriv->command4_bits |= EXT_SCAN_EN_BIT;
    + }
    + /* single-ended/differential */
    + if (aref == AREF_DIFF)
    + devpriv->command4_bits |= ADC_DIFF_BIT;
    + devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG);
    +
    /* startup acquisition */

    /* command2 reg */



    \
     
     \ /
      Last update: 2013-03-04 06:01    [W:2.574 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site