Re: [PATCH] Staging: Comedi adv_pci1710: Cleaned up function check_channel_list

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

 



Hi,
> the fix is nice but the org code has  if (!n_char > 1) return 1 but now you have
> if (nchar == 1 ) is there any reason not to use ( nchar <= 1 ) ?
> (i do not see the whole code and it is not clear from your changelog)
You are missing out the last "else", basically the original code was
if n_chan <1
     return 0
if n_chan >1
     //do some counting
     return count
else
    return 1

For n_chan==1 the function doesn't actually do anything clever, that's
why I made the return right at the beginning.

Tomas

>
> re,
>  wh



On Wed, May 2, 2012 at 8:41 PM, walter harms <wharms@xxxxxx> wrote:
>
>
> Am 02.05.2012 18:13, schrieb Tomas Melin:
>> -Simplified function logic by assuming that n_chan >1 if not <=1. Removes
>> one level of indentation.
>> -> readability improved and code fits into 80 chars
>> - Code indentation fixes, corrected comments
>> - Added braces to if() for readability
>>
>> Signed-off-by: Tomas Melin <tomas.melin@xxxxxx>
>> ---
>>  drivers/staging/comedi/drivers/adv_pci1710.c |   84 +++++++++++++-------------
>>  1 files changed, 43 insertions(+), 41 deletions(-)
>>
>> diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c
>> index 8318c82..fa4a6fb 100644
>> --- a/drivers/staging/comedi/drivers/adv_pci1710.c
>> +++ b/drivers/staging/comedi/drivers/adv_pci1710.c
>> @@ -1142,9 +1142,9 @@ static int pci171x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
>>
>>  /*
>>  ==============================================================================
>> - Check if channel list from user is builded correctly
>> - If it's ok, then program scan/gain logic.
>> - This works for all cards.
>> + * Check if channel list from user is build correctly
>> + * If it's ok, then program scan/gain logic.
>> + * This works for all cards.
>>  */
>>  static int check_channel_list(struct comedi_device *dev,
>>                             struct comedi_subdevice *s,
>> @@ -1160,48 +1160,50 @@ static int check_channel_list(struct comedi_device *dev,
>>               return 0;
>>       }
>>
>> -     if (n_chan > 1) {
>> -             chansegment[0] = chanlist[0];   /*  first channel is every time ok */
>> -             for (i = 1, seglen = 1; i < n_chan; i++, seglen++) {    /*  build part of chanlist */
>> -                     /*  printk("%d. %d %d\n",i,CR_CHAN(chanlist[i]),CR_RANGE(chanlist[i])); */
>> -                     if (chanlist[0] == chanlist[i])
>> -                             break;  /*  we detect loop, this must by finish */
>> -                     if (CR_CHAN(chanlist[i]) & 1)   /*  odd channel cann't by differencial */
>> -                             if (CR_AREF(chanlist[i]) == AREF_DIFF) {
>> -                                     comedi_error(dev,
>> -                                                  "Odd channel can't be differential input!\n");
>> -                                     return 0;
>> -                             }
>> -                     nowmustbechan =
>> -                         (CR_CHAN(chansegment[i - 1]) + 1) % s->n_chan;
>> -                     if (CR_AREF(chansegment[i - 1]) == AREF_DIFF)
>> -                             nowmustbechan = (nowmustbechan + 1) % s->n_chan;
>> -                     if (nowmustbechan != CR_CHAN(chanlist[i])) {    /*  channel list isn't continuous :-( */
>> -                             printk
>> -                                 ("channel list must be continuous! chanlist[%i]=%d but must be %d or %d!\n",
>> -                                  i, CR_CHAN(chanlist[i]), nowmustbechan,
>> -                                  CR_CHAN(chanlist[0]));
>> +     if (n_chan == 1)
>> +             return 1; /* seglen=1 */
>> +
>> +     /* n_chan must be >1 */
>> +     /* first channel is every time ok */
>> +     chansegment[0] = chanlist[0];
>> +     /*  build part of chanlist */
>> +     for (i = 1, seglen = 1; i < n_chan; i++, seglen++) {
>> +             if (chanlist[0] == chanlist[i])
>> +                     break; /* detected loop, done */
>> +             if (CR_CHAN(chanlist[i]) & 1) {
>> +                     if (CR_AREF(chanlist[i]) == AREF_DIFF) {
>> +                             comedi_error(dev,
>> +                             "Odd channel can't be differential input!\n");
>>                               return 0;
>>                       }
>> -                     chansegment[i] = chanlist[i];   /*  well, this is next correct channel in list */
>>               }
>> -
>> -             for (i = 0, segpos = 0; i < n_chan; i++) {      /*  check whole chanlist */
>> -                     /* printk("%d %d=%d %d\n",CR_CHAN(chansegment[i%seglen]),CR_RANGE(chansegment[i%seglen]),CR_CHAN(chanlist[i]),CR_RANGE(chanlist[i])); */
>> -                     if (chanlist[i] != chansegment[i % seglen]) {
>> -                             printk
>> -                                 ("bad channel, reference or range number! chanlist[%i]=%d,%d,%d and not %d,%d,%d!\n",
>> -                                  i, CR_CHAN(chansegment[i]),
>> -                                  CR_RANGE(chansegment[i]),
>> -                                  CR_AREF(chansegment[i]),
>> -                                  CR_CHAN(chanlist[i % seglen]),
>> -                                  CR_RANGE(chanlist[i % seglen]),
>> -                                  CR_AREF(chansegment[i % seglen]));
>> -                             return 0;       /*  chan/gain list is strange */
>> -                     }
>> +             nowmustbechan = (CR_CHAN(chansegment[i - 1]) + 1) % s->n_chan;
>> +             if (CR_AREF(chansegment[i - 1]) == AREF_DIFF)
>> +                     nowmustbechan = (nowmustbechan + 1) % s->n_chan;
>> +             /*  channel list isn't continuous :-( */
>> +             if (nowmustbechan != CR_CHAN(chanlist[i])) {
>> +                     printk(
>> +                             "channel list must be continuous! chanlist[%i]=%d but must be %d or %d!\n",
>> +                             i, CR_CHAN(chanlist[i]), nowmustbechan,
>> +                             CR_CHAN(chanlist[0]));
>> +                     return 0;
>> +             }
>> +             /*  well, this is next correct channel in list */
>> +             chansegment[i] = chanlist[i];
>> +     }
>> +     /*  check whole chanlist */
>> +     for (i = 0, segpos = 0; i < n_chan; i++) {
>> +             if (chanlist[i] != chansegment[i % seglen]) {
>> +                     printk(
>> +                             "bad channel, reference or range number! chanlist[%i]=%d,%d,%d and not %d,%d,%d!\n",
>> +                             i, CR_CHAN(chansegment[i]),
>> +                             CR_RANGE(chansegment[i]),
>> +                             CR_AREF(chansegment[i]),
>> +                             CR_CHAN(chanlist[i % seglen]),
>> +                             CR_RANGE(chanlist[i % seglen]),
>> +                             CR_AREF(chansegment[i % seglen]));
>> +                     return 0; /*  chan/gain list is strange */
>>               }
>> -     } else {
>> -             seglen = 1;
>>       }
>>       return seglen;
>>  }
>
> hi Tomas,
> the fix is nice but the org code has  if (!n_char > 1) return 1 but now you have
> if (nchar == 1 ) is there any reason not to use ( nchar <= 1 ) ?
> (i do not see the whole code and it is not clear from your changelog)
>
> re,
>  wh
--
To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux