On Wed, Apr 24, 2013 at 11:36:02AM -0500, H Hartley Sweeten wrote:
> On Wednesday, April 24, 2013 2:09 AM, Ian Abbott wrote:
> > On 2013-04-23 20:58, H Hartley Sweeten wrote:
> >> The bits needed to set the analog input gain can be simply calculated
> >> based on the 'range'.
> >>
> >> The LabPC versions of the board do not have the '0x10' gain that the
> >> LabPC+ board supports. By incrementing the range appropriately the
> >> correct gain bits can still be calculated.
> >>
> >> This allows removing the two gain tables, as well as the export, along
> >> with the 'ai_range_code' data in the boardinfo.
> >>
> >> Signed-off-by: H Hartley Sweeten <[email protected]>
> >> Cc: Ian Abbott <[email protected]>
> >> Cc: Greg Kroah-Hartman <[email protected]>
> >> ---
> >>   drivers/staging/comedi/drivers/ni_labpc.c     | 30 
> >> +++++++++++++--------------
> >>   drivers/staging/comedi/drivers/ni_labpc.h     |  3 ---
> >>   drivers/staging/comedi/drivers/ni_labpc_cs.c  |  1 -
> >>   drivers/staging/comedi/drivers/ni_labpc_pci.c |  1 -
> >>   4 files changed, 14 insertions(+), 21 deletions(-)
> >>
> >> diff --git a/drivers/staging/comedi/drivers/ni_labpc.c 
> >> b/drivers/staging/comedi/drivers/ni_labpc.c
> >> index 5ed9a6f..773368d 100644
> >> --- a/drivers/staging/comedi/drivers/ni_labpc.c
> >> +++ b/drivers/staging/comedi/drivers/ni_labpc.c
> >> @@ -88,7 +88,7 @@
> >>   #define CMD1_REG         0x00    /* W: Command 1 reg */
> >>   #define CMD1_MA(x)               (((x) & 0x7) << 0)
> >>   #define CMD1_TWOSCMP             (1 << 3)
> >> -#define CMD1_GAIN_MASK            (7 << 4)
> >> +#define CMD1_GAIN(x)              (((x) & 0x7) << 4)
> >>   #define CMD1_SCANEN              (1 << 7)
> >>   #define CMD2_REG         0x01    /* W: Command 2 reg */
> >>   #define CMD2_PRETRIG             (1 << 0)
> >> @@ -153,11 +153,6 @@ enum scan_mode {
> >>    MODE_MULT_CHAN_DOWN,
> >>   };
> >>
> >> -static const int labpc_plus_ai_gain_bits[] = {
> >> -  0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
> >> -  0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
> >> -};
> >> -
> >>   static const struct comedi_lrange range_labpc_plus_ai = {
> >>    16, {
> >>            BIP_RANGE(5),
> >> @@ -179,12 +174,6 @@ static const struct comedi_lrange range_labpc_plus_ai 
> >> = {
> >>    }
> >>   };
> >>
> >> -const int labpc_1200_ai_gain_bits[] = {
> >> -  0x00, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
> >> -  0x00, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
> >> -};
> >> -EXPORT_SYMBOL_GPL(labpc_1200_ai_gain_bits);
> >> -
> >>   static const struct comedi_lrange range_labpc_1200_ai = {
> >>    14, {
> >>            BIP_RANGE(5),
> >> @@ -237,20 +226,17 @@ static inline void labpc_writeb(unsigned int byte, 
> >> unsigned long address)
> >>   static const struct labpc_boardinfo labpc_boards[] = {
> >>    {
> >>            .name                   = "lab-pc-1200",
> >> -          .ai_range_code          = labpc_1200_ai_gain_bits,
> >>            .ai_speed               = 10000,
> >>            .ai_scan_up             = 1,
> >>            .has_ao                 = 1,
> >>            .is_labpc1200           = 1,
> >>    }, {
> >>            .name                   = "lab-pc-1200ai",
> >> -          .ai_range_code          = labpc_1200_ai_gain_bits,
> >>            .ai_speed               = 10000,
> >>            .ai_scan_up             = 1,
> >>            .is_labpc1200           = 1,
> >>    }, {
> >>            .name                   = "lab-pc+",
> >> -          .ai_range_code          = labpc_plus_ai_gain_bits,
> >>            .ai_speed               = 12000,
> >>            .has_ao                 = 1,
> >>    },
> >> @@ -321,12 +307,24 @@ static void labpc_ai_set_chan_and_gain(struct 
> >> comedi_device *dev,
> >>    const struct labpc_boardinfo *board = comedi_board(dev);
> >>    struct labpc_private *devpriv = dev->private;
> >>
> >> +  if (board->is_labpc1200) {
> >> +          /*
> >> +           * The LabPC-1200 boards do not have a gain
> >> +           * of '0x10'. Skip the range values that would
> >> +           * result in this gain.
> >> +           */
> >> +          if (range > 1)
> >> +                  range++;
> >> +          if (range > 8)
> >> +                  range++;
> >
> > Off-by one error.  That would change the sequence 0 to 13 to the following:
> >
> >     0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15
> >
> > I think you meant:
> >
> >             if (range > 0)
> >                     range++;
> >             if (range > 8)
> >                     range++;
> >
> > which maps the sequence 0 to 13 to the following:
> >
> >     0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15
> 
> Ugh.. You are correct. Brain fart with that.
> 
> > You could also use:
> >
> >             range += (range > 0) + (range > 7);
> >
> > which I think is easier to understand (and doesn't need the curly braces).
> 
> I like that one better. I'll update the patch.
> 
> Greg,
> 
> Do you want all four patchs again as v2 or just an update of this one?

Just an updated this one, I've applied the other 3.

thanks,

greg k-h
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to