lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z9Q-KcadLHdDLxVc@smile.fi.intel.com>
Date: Fri, 14 Mar 2025 16:33:13 +0200
From: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
To: Matti Vaittinen <mazziesaccount@...il.com>
Cc: Matti Vaittinen <matti.vaittinen@...rohmeurope.com>,
	Jonathan Cameron <jic23@...nel.org>,
	Lars-Peter Clausen <lars@...afoo.de>, Nuno Sa <nuno.sa@...log.com>,
	David Lechner <dlechner@...libre.com>,
	Javier Carrasco <javier.carrasco.cruz@...il.com>,
	Olivier Moysan <olivier.moysan@...s.st.com>,
	Guillaume Stols <gstols@...libre.com>,
	Dumitru Ceclan <mitrutzceclan@...il.com>,
	Trevor Gamblin <tgamblin@...libre.com>,
	Matteo Martelli <matteomartelli3@...il.com>,
	Alisa-Dariana Roman <alisadariana@...il.com>,
	João Paulo Gonçalves <joao.goncalves@...adex.com>,
	AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>,
	linux-kernel@...r.kernel.org, linux-iio@...r.kernel.org
Subject: Re: [PATCH v7 06/10] iio: adc: Support ROHM BD79124 ADC

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



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ