From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Matti Vaittinen <mazziesaccount@gmail.com>
Cc: "Matti Vaittinen" <matti.vaittinen@fi.rohmeurope.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"Lars-Peter Clausen" <lars@metafoo.de>,
"Nuno Sa" <nuno.sa@analog.com>,
"David Lechner" <dlechner@baylibre.com>,
"Javier Carrasco" <javier.carrasco.cruz@gmail.com>,
"Olivier Moysan" <olivier.moysan@foss.st.com>,
"Guillaume Stols" <gstols@baylibre.com>,
"Dumitru Ceclan" <mitrutzceclan@gmail.com>,
"Trevor Gamblin" <tgamblin@baylibre.com>,
"Matteo Martelli" <matteomartelli3@gmail.com>,
"Alisa-Dariana Roman" <alisadariana@gmail.com>,
"João Paulo Gonçalves" <joao.goncalves@toradex.com>,
"AngeloGioacchino Del Regno"
<angelogioacchino.delregno@collabora.com>,
linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org
Subject: Re: [PATCH v7 06/10] iio: adc: Support ROHM BD79124 ADC
Date: Fri, 14 Mar 2025 16:33:13 +0200 [thread overview]
Message-ID: <Z9Q-KcadLHdDLxVc@smile.fi.intel.com> (raw)
In-Reply-To: <bb403ddb-5c6f-4286-8d80-3ede40f94dc2@gmail.com>
On Fri, Mar 14, 2025 at 09:31:58AM +0200, Matti Vaittinen wrote:
> On 13/03/2025 15:19, Andy Shevchenko wrote:
> > On Thu, Mar 13, 2025 at 09:19:03AM +0200, Matti Vaittinen wrote:
...
> > > +#define BD79124_MASK_HYSTERESIS GENMASK(3, 0)
> > > +#define BD79124_LOW_LIMIT_MIN 0
> > > +#define BD79124_HIGH_LIMIT_MAX GENMASK(11, 0)
> >
> > These masks are not named after registers (or I don't see it clearly),
>
> Naming is hard. I usually try to make a balance between:
>
> 1) using names which explain the purpose when seen in the code (at call
> site)
> 2) keeping names short enough
> 3) following the naming convention in the data sheet
> 4) maintain relation to the register.
>
> I put most emphasis to the 1, while 2 is important to me as well. 3 is
> _very_ nice to have, but it is often somehow contradicting with 1 and 2. 4
> is IMO just nice to have. The register is usually clearly visible at call
> site, and if someone adds new functionality (or checks the correctness of
> the masks/registers), then 3 is way more important.
>
> I am open to any concrete suggestions though.
From my point of view the starting point is 3, then one may apply 2 and 4,
the 1 may mangle the name so much that register data field name becomes quite
abstract.
> > it's
> > hard to understand which one relates to which register. Also, why not using
> > bitfield.h?
>
> I saw no need for it?
Hmm... Okay, I think Jonathan will ask that if really needed.
...
> > > + * These macros return the address of the 1.st reg for the given channel
> >
> > first
>
> Huh?
Replace "1.st" (which seems not a standard representation of it) by "first".
> > (and missing period at the end).
>
> Ok.
...
> > > +#define BD79124_GET_HIGH_LIMIT_REG(ch) (BD79124_REG_HYSTERESIS_CH0 + (ch) * 4)
> > > +#define BD79124_GET_LOW_LIMIT_REG(ch) (BD79124_REG_EVENTCOUNT_CH0 + (ch) * 4)
> > > +#define BD79124_GET_LIMIT_REG(ch, dir) ((dir) == IIO_EV_DIR_RISING ? \
> > > + BD79124_GET_HIGH_LIMIT_REG(ch) : BD79124_GET_LOW_LIMIT_REG(ch))
> > > +#define BD79124_GET_RECENT_RES_REG(ch) (BD79124_REG_RECENT_CH0_LSB + (ch) * 2)
> >
> > Don't we want to have something in bitfield.h for arrays in the register, i.e.
> > when register(s) is(are) split to 2+ bits per an element in an array of the
> > same semantics. Would be nice to eliminate such a boilerplate here and in many
> > other drivers.
>
> Not necessarily a bad idea. Still, I am not willing to expand this series
> any more - currently there is 10 patches, 2 of which are directly related to
> the BD79124. I don't want to delay this driver for another cycle due to
> added helpers.
It was just a side note. Consider as a poll for opinions.
...
> > > +static void bd79124gpo_set(struct gpio_chip *gc, unsigned int offset, int value)
> >
> > You should use .set_rv()
...
> > > +static void bd79124gpo_set_multiple(struct gpio_chip *gc, unsigned long *mask,
> > > + unsigned long *bits)
> >
> > Ditto, .set_multiple_rv().
>
> As you know, this started at v6.14 cycle which is still ongoing. I don't
> think .set_rv() and .set_multiple_rv() are available?
You mean that you are still hope to have this series to be squeezed for
v6.15-rc1? That's not me who decides, but if not, those APIs will be part of
the v6.15-rc1 (at least they are pending in GPIO subsystem).
...
> > > +struct bd79124_raw {
> > > + u8 bit0_3; /* Is set in high bits of the byte */
> > > + u8 bit4_11;
> > > +};
> > > +#define BD79124_RAW_TO_INT(r) ((r.bit4_11 << 4) | (r.bit0_3 >> 4))
> >
> > And how this is different from treating it as __le16? Needs a good comment
> > about bit layout.
>
> You don't think:
> >> +struct bd79124_raw {
> >> + u8 bit0_3; /* Is set in high bits of the byte */
> >> + u8 bit4_11;
> >> +};
> suffices? It's hard for me to think how to explain bit layout more
> explicitly.
I do not think it suffices. It's hard to decode what you meant by the naming
and the comment. Actually it even confuses me.
> This was discussed during the RFC review. I explained the rationale why I
> rather represent this as two 8 bit variables than le16 with (mysterious to
> me) shift. As a result, Jonathan told me he's not feeling (too) strong about
> this (but also warned we may see follow-up patches converting this to le and
> shift - which, by the way, is harder for me to understand).
If you want to leave them, the good comment needs to be added for both
1) explaining bit layouts;
2) why __le16 is not being used.
...
> > > +static int bd79124_write_int_to_reg(struct bd79124_data *data, int reg,
> > > + unsigned int val)
> > > +{
> > > + struct bd79124_raw raw;
> > > + int ret, tmp;
> >
> > > + raw.bit4_11 = (u8)(val >> 4);
> > > + raw.bit0_3 = (u8)(val << 4);
> >
> > Why casting?
>
> To make it clear storing unsigned int to u8 is considered to be Ok. I can
> drop it though if you feel strong about it.
In C (not C++) explicit casting is a point to stumble over and check if there
is any problems or call for asking the question "Whu?!"
...
> > > + ret = regmap_read(data->map, reg, &tmp);
> > > + if (ret)
> > > + return ret;
> > > +
> > > + raw.bit0_3 |= (0xf & tmp);
> >
> > GENMASK() ?
>
> For me 0xf is both shorter and clearer. (For me 0xf - or, 0x0f if you like,
> 0xf0 and 0xff are clear by a glance).
>
> I can go for GENMASK() if it is absolutely required, but for me it is in
> this case just making this harder to read. I like GENMASK() for something
> like 0xe or 0x60 though.
It makes code inconsistent and one letter is not so visible. Ideally it should
be a definition with self-explanatory name.
> > > + return regmap_bulk_write(data->map, reg, &raw, sizeof(raw));
> > > +}
...
> > > + case IIO_EV_INFO_HYSTERESIS:
> > > + reg = BD79124_GET_HYSTERESIS_REG(chan->channel);
> > > + val >>= 3;
> >
> > Second time I see this. Perhaps you need a macro to explain this right shift?
>
> Not really sure about this. I think it's kind of obvious why this is shifted
> - and in case it's not, there is a comment explaining it.
>
> I could have a macro like REGVAL2HYSTERESIS() - but I don't think it is a
> great idea, because then anyone interested in understanding the value read
> from register would need to dig out the macro to find how value needs to be
> converted. Doing the shift here shows the register format to a reader right
> away - and honestly, it should be pretty obvious to the reader that this
> shift converts register value to proper format.
These shifts are not a big issue, so whatever you choose / chose.
> > > + return regmap_update_bits(data->map, reg, BD79124_MASK_HYSTERESIS,
> > > + val);
> >
> > Can be one line.
>
> I still prefer to have lines < 80 to make them fit my terminal.
> I think we have discussed this before. I don't think we will agree on this
> as I have a very real reason for short lines. It does directly impact on my
> daily work. I don't think you're going to like it no matter how I explain
> this.
IIRC this takes 82 characters.
Yes, we discussed and I see no issues to avoid uglifying / adding unnecessary
lines to the code. We can continue arguing, but this what I think and I don't
know what argument may change my opinion. Apparently this is on maintainer's
field now to decide.
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-03-14 14:33 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-13 7:16 [PATCH v7 00/10] " Matti Vaittinen
2025-03-13 7:17 ` [PATCH v7 01/10] dt-bindings: ROHM BD79124 ADC/GPO Matti Vaittinen
2025-03-13 7:18 ` [PATCH v7 02/10] property: Add functions to iterate named child Matti Vaittinen
2025-03-13 12:15 ` Andy Shevchenko
2025-03-16 21:45 ` Marcelo Schmitt
2025-03-13 7:18 ` [PATCH v7 03/10] iio: adc: add helpers for parsing ADC nodes Matti Vaittinen
2025-03-13 12:31 ` Andy Shevchenko
2025-03-13 13:17 ` Matti Vaittinen
2025-03-13 13:29 ` Andy Shevchenko
2025-03-16 9:38 ` Jonathan Cameron
2025-03-17 8:22 ` Matti Vaittinen
2025-03-13 7:18 ` [PATCH v7 04/10] iio: adc: rzg2l_adc: Use adc-helpers Matti Vaittinen
2025-03-13 7:18 ` [PATCH v7 05/10] iio: adc: sun20i-gpadc: " Matti Vaittinen
2025-03-13 12:34 ` Andy Shevchenko
2025-03-16 9:41 ` Jonathan Cameron
2025-03-17 7:11 ` Matti Vaittinen
2025-03-17 7:51 ` Andy Shevchenko
2025-03-17 8:42 ` Matti Vaittinen
2025-03-17 9:27 ` Andy Shevchenko
2025-03-17 10:45 ` Jonathan Cameron
2025-03-13 7:19 ` [PATCH v7 06/10] iio: adc: Support ROHM BD79124 ADC Matti Vaittinen
2025-03-13 13:19 ` Andy Shevchenko
2025-03-14 7:31 ` Matti Vaittinen
2025-03-14 8:52 ` Matti Vaittinen
2025-03-14 14:33 ` Andy Shevchenko [this message]
2025-03-16 9:52 ` Jonathan Cameron
2025-03-16 10:01 ` Jonathan Cameron
2025-03-17 6:52 ` Matti Vaittinen
2025-03-17 10:52 ` Jonathan Cameron
2025-03-14 9:22 ` Matti Vaittinen
2025-03-14 14:37 ` Andy Shevchenko
2025-03-17 7:07 ` Matti Vaittinen
2025-03-17 7:57 ` Andy Shevchenko
2025-03-17 8:33 ` Matti Vaittinen
2025-03-16 11:02 ` Jonathan Cameron
2025-03-17 7:34 ` Matti Vaittinen
2025-03-17 11:24 ` Matti Vaittinen
2025-03-30 16:04 ` Jonathan Cameron
2025-03-31 7:37 ` Andy Shevchenko
2025-03-31 7:51 ` Matti Vaittinen
2025-03-13 7:19 ` [PATCH v7 07/10] MAINTAINERS: Add IIO ADC helpers Matti Vaittinen
2025-03-13 7:19 ` [PATCH v7 08/10] MAINTAINERS: Add ROHM BD79124 ADC/GPO Matti Vaittinen
2025-03-13 7:20 ` [PATCH v7 net-next 09/10] net: gianfar: Use device_get_child_node_count_named() Matti Vaittinen
2025-03-13 12:35 ` Andy Shevchenko
2025-03-13 7:20 ` [PATCH v7 10/10] media: thp7312: Use helper for iterating named child nodes 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=Z9Q-KcadLHdDLxVc@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=alisadariana@gmail.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=dlechner@baylibre.com \
--cc=gstols@baylibre.com \
--cc=javier.carrasco.cruz@gmail.com \
--cc=jic23@kernel.org \
--cc=joao.goncalves@toradex.com \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matteomartelli3@gmail.com \
--cc=matti.vaittinen@fi.rohmeurope.com \
--cc=mazziesaccount@gmail.com \
--cc=mitrutzceclan@gmail.com \
--cc=nuno.sa@analog.com \
--cc=olivier.moysan@foss.st.com \
--cc=tgamblin@baylibre.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
all inboxes | Powered by JetHome®