linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matti Vaittinen <mazziesaccount@gmail.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
	Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Paul Gazzillo <paul@pgazz.com>,
	Zhigang Shi <Zhigang.Shi@liteon.com>,
	Shreeya Patel <shreeya.patel@collabora.com>,
	Dmitry Osipenko <dmitry.osipenko@collabora.com>,
	linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org
Subject: Re: [PATCH v2 5/6] iio: light: ROHM BU27034 Ambient Light Sensor
Date: Mon, 13 Mar 2023 10:54:55 +0200	[thread overview]
Message-ID: <2ecf0596-2ccf-c760-a2a4-194c27cb74c5@gmail.com> (raw)
In-Reply-To: <ZAXMx9orQMoNnWr8@smile.fi.intel.com>

On 3/6/23 13:21, Andy Shevchenko wrote:
> On Sun, Mar 05, 2023 at 03:10:38PM +0200, Matti Vaittinen wrote:
>> On 3/4/23 22:17, Jonathan Cameron wrote:
>>> On Thu, 2 Mar 2023 12:58:59 +0200
>>> Matti Vaittinen <mazziesaccount@gmail.com> wrote:
>>>
>>> As per other branch of the thread.
>>>
>>> 	ch0 = max(1, le16_to_cpu(res[0]);
>>>   > would be cleaner.
>>
>> I tried this out. Comparing u16 to literal 1 results comparison of values
>> with different sizes:
>>
>> ./include/linux/minmax.h:20:28: warning: comparison of distinct pointer
>> types lacks a cast
>>    (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
>>                              ^
>> ./include/linux/minmax.h:26:4: note: in expansion of macro ‘__typecheck’
>>     (__typecheck(x, y) && __no_side_effects(x, y))
>>      ^~~~~~~~~~~
>> ./include/linux/minmax.h:36:24: note: in expansion of macro ‘__safe_cmp’
>>    __builtin_choose_expr(__safe_cmp(x, y), \
>>                          ^~~~~~~~~~
>> ./include/linux/minmax.h:74:19: note: in expansion of macro ‘__careful_cmp’
>>   #define max(x, y) __careful_cmp(x, y, >)
>>                     ^~~~~~~~~~~~~
>> drivers/iio/light/rohm-bu27034.c:1057:8: note: in expansion of macro ‘max’
>>    ch0 = max(1, ch0);
>>
>>
>> I could work around this by doing:
>>
>> const u16 min_ch_val = 1;
>>
>> ...
>>
>> ch0 = max(min_ch_val, le16_to_cpu(res[0]));
>>
>> but I think that would really be obfuscating the meaning. I assume
>>
>> ch0 = max((u16)1, le16_to_cpu(res[0]));
>>
>> might work too - but to me it's pretty ugly.
> 
> That's why we have max_t() and clamp_val().
> And you know that.

Thanks for pointing out the max_t(). I really missed that. I didn't 
think of the clamp_val() either. clamp_val() would "explain" better what 
we do here - but as we don't have the upper limit using that would (IMO) 
be slightly more confusing.

>> The more I am looking at this, the stronger I feel we should really just
>> write this as it was. Check if res[0] contains the only unsafe data
>> "!res[0]" - and if yes, set it to 1. The comment above it will clarify it to
>> a reader wondering what happens.
>>
>> I will leave it like it was in v2 for v3. If you still feel strong about it
>> then we need to continue rubbing it.
> 
> You need to convert bit ordering first, then check for 0. It would at least
> make more sense. (Today is 0 you are comparing with, tomorrow it might be
> 0xfffe, which is different to 0x7fff).

I don't think being prepared for any other check but the check for 0 is 
meaningful here. Every other value except 0 is valid for this sensor and 
can be accepted as such. Preparing for something that may never realize 
(new sensor with less than 16bits of data) is likely to just make things 
more complicated.

Well, as both You and Jonathan do think we should not just do 
if(!res[0]) - I'll try using the max_t() as you suggested. I still 
really dislike it because it makes it harder (for me) to capture what 
happens here. Well, I try to survive with this and hopefully just read 
the comment above if puzzled when I need to get back to this code.

Yours,
	-- Matti

-- 
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland

~~ When things go utterly wrong vim users can always type :help! ~~


  reply	other threads:[~2023-03-13  8:59 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-02 10:57 [PATCH v2 0/6] Support ROHM BU27034 ALS sensor Matti Vaittinen
2023-03-02 10:57 ` [PATCH v2 1/6] dt-bindings: iio: light: Support ROHM BU27034 Matti Vaittinen
2023-03-02 10:57 ` [PATCH v2 2/6] iio: light: Add gain-time-scale helpers Matti Vaittinen
2023-03-02 15:05   ` Andy Shevchenko
2023-03-03  7:54     ` Vaittinen, Matti
2023-03-06 11:13       ` Andy Shevchenko
2023-03-13 11:31         ` Matti Vaittinen
2023-03-13 14:39           ` Andy Shevchenko
2023-03-14 10:28             ` Matti Vaittinen
2023-03-14 11:31               ` Andy Shevchenko
2023-03-14 11:36                 ` Andy Shevchenko
2023-03-15  7:20                 ` Vaittinen, Matti
2023-03-18 16:49               ` Jonathan Cameron
2023-03-04 18:35   ` Jonathan Cameron
2023-03-04 19:42     ` Matti Vaittinen
2023-03-06 11:15       ` Andy Shevchenko
2023-03-02 10:58 ` [PATCH v2 3/6] iio: test: test " Matti Vaittinen
2023-03-02 10:58 ` [PATCH v2 4/6] MAINTAINERS: Add IIO " Matti Vaittinen
2023-03-02 10:58 ` [PATCH v2 5/6] iio: light: ROHM BU27034 Ambient Light Sensor Matti Vaittinen
2023-03-02 14:17   ` Matti Vaittinen
2023-03-02 15:34   ` Andy Shevchenko
2023-03-03  9:17     ` Matti Vaittinen
2023-03-04 19:02       ` Jonathan Cameron
2023-03-04 20:28         ` Matti Vaittinen
2023-03-04 20:17   ` Jonathan Cameron
2023-03-05 12:22     ` Matti Vaittinen
2023-03-12 15:36       ` Jonathan Cameron
2023-03-13  9:39         ` Matti Vaittinen
2023-03-18 16:54           ` Jonathan Cameron
2023-03-19 15:59             ` Matti Vaittinen
2023-03-14  9:39         ` Matti Vaittinen
2023-03-18 16:57           ` Jonathan Cameron
2023-03-05 13:10     ` Matti Vaittinen
2023-03-06 11:21       ` Andy Shevchenko
2023-03-13  8:54         ` Matti Vaittinen [this message]
2023-03-02 10:59 ` [PATCH v2 6/6] MAINTAINERS: Add ROHM BU27034 Matti Vaittinen

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=2ecf0596-2ccf-c760-a2a4-194c27cb74c5@gmail.com \
    --to=mazziesaccount@gmail.com \
    --cc=Zhigang.Shi@liteon.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=dmitry.osipenko@collabora.com \
    --cc=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matti.vaittinen@fi.rohmeurope.com \
    --cc=paul@pgazz.com \
    --cc=shreeya.patel@collabora.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;
as well as URLs for NNTP newsgroup(s).