public inbox for linux-iio@vger.kernel.org
 help / color / mirror / Atom feed
From: David Lechner <dlechner@baylibre.com>
To: LucasRabaquim <lucas.rabaquim@usp.br>,
	Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
	nuno.sa@analog.com, andy@kernel.org,
	Matheus Feitosa <matheus.feitosa@usp.br>,
	linux-iio@vger.kernel.org
Subject: Re: [PATCH v2] iio: light: tsl2591: simplify tsl2591_persist functions via lookup table
Date: Sun, 26 Apr 2026 14:29:09 -0500	[thread overview]
Message-ID: <5e974f6d-2e08-4db5-bab4-2ebefc050e1e@baylibre.com> (raw)
In-Reply-To: <CAOWnv8HjVGVsg2d8kDt9LyUVp-HbnaWzAxZ_6egw+KtNmEpv7A@mail.gmail.com>

On 4/25/26 2:24 PM, LucasRabaquim wrote:
> Thank you, Jonathan, David, and Andy, for the feedback, and apologies
> for our eagerness to send a new patch right after the first one.

Another lesson to learn. :-)

Please don't top-post. Make your reply inline in the context where it
make sense and trim out everything else. (There wasn't much to trim in
this one though since it was already trimmed.)


>> ...
>>
>>>> +static const struct tsl2591_persist_entry tsl2591_persist_table[] = {
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_ANY,  1  },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_2,    2  },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_3,    3  },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_5,    5  },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_10,   10 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_15,   15 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_20,   20 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_25,   25 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_30,   30 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_35,   35 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_40,   40 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_45,   45 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_50,   50 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_55,   55 },
>>>> +   { TSL2591_PRST_ALS_INT_CYCLE_60,   60 },
>>>> +};
>>
>> Instead, make this to be an index of the just an array of u8:s.
>>
>>         ...
>>         [TSL2591_PRST_ALS_INT_CYCLE_30] = 30,
>>         [TSL2591_PRST_ALS_INT_CYCLE_35] = 35,
>>         ...
>>
>> ...
>>
>>>>  static int tsl2591_persist_cycle_to_lit(const u8 als_persist)
>>>>  {
>>>> -   switch (als_persist) {
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_ANY:
>>>> -           return 1;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_2:
>>>> -           return 2;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_3:
>>>> -           return 3;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_5:
>>>> -           return 5;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_10:
>>>> -           return 10;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_15:
>>>> -           return 15;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_20:
>>>> -           return 20;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_25:
>>>> -           return 25;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_30:
>>>> -           return 30;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_35:
>>>> -           return 35;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_40:
>>>> -           return 40;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_45:
>>>> -           return 45;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_50:
>>>> -           return 50;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_55:
>>>> -           return 55;
>>>> -   case TSL2591_PRST_ALS_INT_CYCLE_60:
>>>> -           return 60;
>>>> -   default:
>>>> -           return -EINVAL;
>>>> +   int i;
>>>> +
>>>> +   for (i = 0; i < ARRAY_SIZE(tsl2591_persist_table); i++) {
>>
>> Besides the style of
>>
>>         for (unsigned int i = 0; i < ARRAY_SIZE(tsl2591_persist_table); i++) {
>>
>>>> +           if (als_persist == tsl2591_persist_table[i].cycle)
>>>> +                   return tsl2591_persist_table[i].lit;
>>>>     }
>>
>> ...this loop now not needed at all.
>>
>>         if (als_persist < 1 || als_persist >= ARRAY_SIZE(tsl2591_persist_table))
>>                 return -EINVAL;
>>
>>         return tsl2591_persist_table[als_persist];
>>
>>>> +   return -EINVAL;
>>>>  }
>>
>> ...
>>
>>>>  static int tsl2591_persist_lit_to_cycle(const u8 als_persist)
>>>>  {
>>>> -   switch (als_persist) {
>>>> -   case 1:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_ANY;
>>>> -   case 2:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_2;
>>>> -   case 3:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_3;
>>>> -   case 5:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_5;
>>>> -   case 10:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_10;
>>>> -   case 15:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_15;
>>>> -   case 20:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_20;
>>>> -   case 25:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_25;
>>>> -   case 30:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_30;
>>>> -   case 35:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_35;
>>>> -   case 40:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_40;
>>>> -   case 45:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_45;
>>>> -   case 50:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_50;
>>>> -   case 55:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_55;
>>>> -   case 60:
>>>> -           return TSL2591_PRST_ALS_INT_CYCLE_60;
>>>> -   default:
>>>> -           return -EINVAL;
>>>> +   int i;
>>>> +
>>>> +   for (i = 0; i < ARRAY_SIZE(tsl2591_persist_table); i++) {
>>>> +           if (als_persist == tsl2591_persist_table[i].lit)
>>>> +                   return tsl2591_persist_table[i].cycle;
>>>>     }
>>>> +
>>>> +   return -EINVAL;
>>>>  }
>>
>> Ditto.
>>

Here is where putting the reply makes sense where we can see the
relevant previous discussion above and the new discussion below.

> 
> Regarding the use of a u8 array indexed by
> TSL2591_PRST_ALS_INT_CYCLE_*: we see it would work very well in
> tsl2591_persist_cycle_to_lit(). However, we don't think the solution
> applies to tsl2591_persist_lit_to_cycle(), since it would require
> another array that, to use the index initialization, would allocate 61
> memory positions with only 15 relevant values actually stored.
> 
> We thought of the following, albeit possibly fragile, solution to
> follow Andy's suggestion:
> 
> static int tsl2591_persist_lit_to_cycle(const u8 als_persist)
> {
>     if(als_persist > 60 || als_persist < 1)
>         return -EINVAL;
>     if(als_persist % 5 == 0) // Valid values between 5 and 60 inclusive
>         return (als_persist/5) + 3;
>     if(als_persist < 4) // Cases for 1, 2 and 3
>         return als_persist;
>     return -EINVAL;
> }
> Otherwise, to keep the array indexed by TSL2591_PRST_ALS_INT_CYCLE_*
> approach we think it would still need a for-loop based solution for
> tsl2591_persist_lit_to_cycle(). We would like to hear your thoughts
> before committing to any direction for a possible new patch.
> 
> With Best Regards,
> Lucas Rabaquim
> 

Personally, I would go with looping over the lookup array since there
isn't a simple formula that works for all values.



           reply	other threads:[~2026-04-26 19:29 UTC|newest]

Thread overview: expand[flat|nested]  mbox.gz  Atom feed
 [parent not found: <CAOWnv8HjVGVsg2d8kDt9LyUVp-HbnaWzAxZ_6egw+KtNmEpv7A@mail.gmail.com>]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5e974f6d-2e08-4db5-bab4-2ebefc050e1e@baylibre.com \
    --to=dlechner@baylibre.com \
    --cc=andriy.shevchenko@intel.com \
    --cc=andy@kernel.org \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=lucas.rabaquim@usp.br \
    --cc=matheus.feitosa@usp.br \
    --cc=nuno.sa@analog.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox