diff mbox series

[v8,6/7] iio: accel: kionix-kx022a: Add a function to retrieve number of bytes in buffer

Message ID 923d01408680f5ac88ca8ee565a990645578ee83.1692824815.git.mehdi.djait.k@gmail.com (mailing list archive)
State Changes Requested
Headers show
Series iio: accel: Add support for Kionix/ROHM KX132-1211 accelerometer | expand

Commit Message

Mehdi Djait Aug. 23, 2023, 9:16 p.m. UTC
Since Kionix accelerometers use various numbers of bits to report data, a
device-specific function is required.
Implement the function as a callback in the device-specific chip_info structure

Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Signed-off-by: Mehdi Djait <mehdi.djait.k@gmail.com>
---
v8:
v7:
- no changes

v6:
- directly return KX022A_FIFO_MAX_BYTES as suggested by Andy

v5:
- no changes

v4:
- removed the comment about "bogus value from i2c"
- removed regmap_get_device(data->regmap); dev is present in the
  driver's private data

v3:
- no changes

v2:
- separated this change from the chip_info introduction and made it a patch in v2 
- changed the function from generic implementation for to device-specific one
- removed blank lines pointed out by checkpatch
- changed the allocation of the "buffer" array in __kx022a_fifo_flush

 drivers/iio/accel/kionix-kx022a.c | 28 ++++++++++++++++++----------
 drivers/iio/accel/kionix-kx022a.h |  4 ++++
 2 files changed, 22 insertions(+), 10 deletions(-)

Comments

Andy Shevchenko Aug. 24, 2023, 11:58 a.m. UTC | #1
On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:
> Since Kionix accelerometers use various numbers of bits to report data, a
> device-specific function is required.
> Implement the function as a callback in the device-specific chip_info structure

...

> +	int ret, fifo_bytes;
> +
> +	ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
> +	if (ret) {
> +		dev_err(data->dev, "Error reading buffer status\n");
> +		return ret;
> +	}
> +
> +	if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
> +		return KX022A_FIFO_MAX_BYTES;
> +
> +	return fifo_bytes;

This will be called each time ->get_fifo_bytes() called.
Do you expect the fifo_bytes to be changed over times?
Shouldn't we simply cache the value?

...

> +	fifo_bytes = data->chip_info->get_fifo_bytes(data);

>  

Now this blank line becomes redundant.

>  	if (fifo_bytes % KX022A_FIFO_SAMPLES_SIZE_BYTES)
>  		dev_warn(data->dev, "Bad FIFO alignment. Data may be corrupt\n");
Matti Vaittinen Aug. 24, 2023, 12:52 p.m. UTC | #2
On 8/24/23 14:58, Andy Shevchenko wrote:
> On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:
>> Since Kionix accelerometers use various numbers of bits to report data, a
>> device-specific function is required.
>> Implement the function as a callback in the device-specific chip_info structure
> 
> ...
> 
>> +	int ret, fifo_bytes;
>> +
>> +	ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
>> +	if (ret) {
>> +		dev_err(data->dev, "Error reading buffer status\n");
>> +		return ret;
>> +	}
>> +
>> +	if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
>> +		return KX022A_FIFO_MAX_BYTES;
>> +
>> +	return fifo_bytes;
> 
> This will be called each time ->get_fifo_bytes() called.
> Do you expect the fifo_bytes to be changed over times?
> Shouldn't we simply cache the value?

I think this value tells how many samples there currently is in the 
FIFO. Caching it does not sound meaningful unless I am missing something.

Yours,
	-- Matti
Andy Shevchenko Aug. 24, 2023, 1:39 p.m. UTC | #3
On Thu, Aug 24, 2023 at 03:52:56PM +0300, Matti Vaittinen wrote:
> On 8/24/23 14:58, Andy Shevchenko wrote:
> > On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:

...

> > > +	int ret, fifo_bytes;
> > > +
> > > +	ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
> > > +	if (ret) {
> > > +		dev_err(data->dev, "Error reading buffer status\n");
> > > +		return ret;
> > > +	}
> > > +
> > > +	if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
> > > +		return KX022A_FIFO_MAX_BYTES;
> > > +
> > > +	return fifo_bytes;
> > 
> > This will be called each time ->get_fifo_bytes() called.
> > Do you expect the fifo_bytes to be changed over times?
> > Shouldn't we simply cache the value?
> 
> I think this value tells how many samples there currently is in the FIFO.
> Caching it does not sound meaningful unless I am missing something.

I see. I think my confusion can be easily cured by renaming the callback to

	get_amount_bytes_in_fifo()

or

	get_bytes_in_fifo()

or alike.
Mehdi Djait Aug. 24, 2023, 1:44 p.m. UTC | #4
Hello Andy,
Thank you for the review.

On Thu, Aug 24, 2023 at 3:39 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Thu, Aug 24, 2023 at 03:52:56PM +0300, Matti Vaittinen wrote:
> > On 8/24/23 14:58, Andy Shevchenko wrote:
> > > On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:
>
> ...
>
> > > > + int ret, fifo_bytes;
> > > > +
> > > > + ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
> > > > + if (ret) {
> > > > +         dev_err(data->dev, "Error reading buffer status\n");
> > > > +         return ret;
> > > > + }
> > > > +
> > > > + if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
> > > > +         return KX022A_FIFO_MAX_BYTES;
> > > > +
> > > > + return fifo_bytes;
> > >
> > > This will be called each time ->get_fifo_bytes() called.
> > > Do you expect the fifo_bytes to be changed over times?
> > > Shouldn't we simply cache the value?
> >
> > I think this value tells how many samples there currently is in the FIFO.
> > Caching it does not sound meaningful unless I am missing something.
>
> I see. I think my confusion can be easily cured by renaming the callback to
>
>         get_amount_bytes_in_fifo()
>
> or
>
>         get_bytes_in_fifo()
>
> or alike.

or leave it as is. The function is documented:

@@ -99,6 +101,7 @@ struct device;
  * @inc5: interrupt control register 5
  * @inc6: interrupt control register 6
  * @xout_l: x-axis output least significant byte
+ * @get_fifo_bytes: function pointer to get number of bytes in the FIFO buffer
  */
 struct kx022a_chip_info {
  const char *name;
@@ -121,6 +124,7 @@ struct kx022a_chip_info {
  u8 inc5;
  u8 inc6;
  u8 xout_l;
+ int (*get_fifo_bytes)(struct kx022a_data *);
 };

--
Kind Regards
Mehdi Djait
Andy Shevchenko Aug. 24, 2023, 1:47 p.m. UTC | #5
On Thu, Aug 24, 2023 at 03:44:29PM +0200, Mehdi Djait wrote:
> On Thu, Aug 24, 2023 at 3:39 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> > On Thu, Aug 24, 2023 at 03:52:56PM +0300, Matti Vaittinen wrote:
> > > On 8/24/23 14:58, Andy Shevchenko wrote:
> > > > On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:

...

> > I see. I think my confusion can be easily cured by renaming the callback to
> >
> >         get_amount_bytes_in_fifo()
> >
> > or
> >
> >         get_bytes_in_fifo()
> >
> > or alike.
> 
> or leave it as is. The function is documented:

> + * @get_fifo_bytes: function pointer to get number of bytes in the FIFO buffer

Do you find it unambiguous? I do not.

Still needs more words to explain if it's a capacity of FIFO or is it amount of
valid bytes for the current transfer or what?
Mehdi Djait Aug. 24, 2023, 2:23 p.m. UTC | #6
On Thu, Aug 24, 2023 at 4:06 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Thu, Aug 24, 2023 at 03:44:29PM +0200, Mehdi Djait wrote:
> > On Thu, Aug 24, 2023 at 3:39 PM Andy Shevchenko
> > <andriy.shevchenko@linux.intel.com> wrote:
> > > On Thu, Aug 24, 2023 at 03:52:56PM +0300, Matti Vaittinen wrote:
> > > > On 8/24/23 14:58, Andy Shevchenko wrote:
> > > > > On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:
>
> ...
>
> > > I see. I think my confusion can be easily cured by renaming the callback to
> > >
> > >         get_amount_bytes_in_fifo()
> > >
> > > or
> > >
> > >         get_bytes_in_fifo()
> > >
> > > or alike.
> >
> > or leave it as is. The function is documented:
>
> > + * @get_fifo_bytes: function pointer to get number of bytes in the FIFO buffer
>
> Do you find it unambiguous? I do not.
>
> Still needs more words to explain if it's a capacity of FIFO or is it amount of
> valid bytes for the current transfer or what?

how about change the description to:
function pointer to get amount  of acceleration data bytes currently
stored in the sensor's FIFO buffer

and change the function to "get_amount_bytes_in_fifo()"

--
Kind Regards
Mehdi Djait
Andy Shevchenko Aug. 24, 2023, 2:39 p.m. UTC | #7
On Thu, Aug 24, 2023 at 04:23:09PM +0200, Mehdi Djait wrote:
> On Thu, Aug 24, 2023 at 4:06 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> > On Thu, Aug 24, 2023 at 03:44:29PM +0200, Mehdi Djait wrote:
> > > On Thu, Aug 24, 2023 at 3:39 PM Andy Shevchenko
> > > <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Thu, Aug 24, 2023 at 03:52:56PM +0300, Matti Vaittinen wrote:
> > > > > On 8/24/23 14:58, Andy Shevchenko wrote:
> > > > > > On Wed, Aug 23, 2023 at 11:16:40PM +0200, Mehdi Djait wrote:

...

> > > > I see. I think my confusion can be easily cured by renaming the callback to
> > > >
> > > >         get_amount_bytes_in_fifo()
> > > >
> > > > or
> > > >
> > > >         get_bytes_in_fifo()
> > > >
> > > > or alike.
> > >
> > > or leave it as is. The function is documented:
> >
> > > + * @get_fifo_bytes: function pointer to get number of bytes in the FIFO buffer
> >
> > Do you find it unambiguous? I do not.
> >
> > Still needs more words to explain if it's a capacity of FIFO or is it amount of
> > valid bytes for the current transfer or what?
> 
> how about change the description to:
> function pointer to get amount  of acceleration data bytes currently
> stored in the sensor's FIFO buffer
> 
> and change the function to "get_amount_bytes_in_fifo()"

Sounds good to me, thank you!
Jonathan Cameron Aug. 27, 2023, 6:09 p.m. UTC | #8
> > > > > I see. I think my confusion can be easily cured by renaming the callback to
> > > > >
> > > > >         get_amount_bytes_in_fifo()
> > > > >
> > > > > or
> > > > >
> > > > >         get_bytes_in_fifo()
> > > > >
> > > > > or alike.  
> > > >
> > > > or leave it as is. The function is documented:  
> > >  
> > > > + * @get_fifo_bytes: function pointer to get number of bytes in the FIFO buffer  
> > >
> > > Do you find it unambiguous? I do not.
> > >
> > > Still needs more words to explain if it's a capacity of FIFO or is it amount of
> > > valid bytes for the current transfer or what?  
> > 
> > how about change the description to:
> > function pointer to get amount  of acceleration data bytes currently
> > stored in the sensor's FIFO buffer
> > 
> > and change the function to "get_amount_bytes_in_fifo()"  
> 
> Sounds good to me, thank you!
> 
Bikeshedding time ;)

I don't like "amount" in this - it ends up adding little meaning
and to me it is ugly English.  It's making it clear that we are dealing
with some sort of count but that is already true of get_bytes_in_fifo()
So to my reading it adds nothing wrt to removing ambiguity.

get_number_of_bytes_in_fifo() flows better but also adds nothing over
get_bytes_in_fifo()

You could make it clear it is something that changes over time.

get_current_bytes_in_fifo()

Which at least implies it changes - though it doesn't rule out a weird
variable max size fifo.

get_fifo_bytes_available() might be the clearest option and is the one
I would prefer.  It's still a little messy as it could mean
'number of bytes of data that haven't been used yet in the fifo and
 are available for samples in the future'.

Sigh.  Maybe least ambiguous is something longer like.

get_fifo_bytes_available_to_read()
get_fifo_bytes_available_out()

Honestly I don't care that much what you go with :)

Jonathan
Matti Vaittinen Aug. 28, 2023, 6:24 a.m. UTC | #9
On 8/27/23 21:09, Jonathan Cameron wrote:
> 
>>>>>> I see. I think my confusion can be easily cured by renaming the callback to
>>>>>>
>>>>>>          get_amount_bytes_in_fifo()
>>>>>>
>>>>>> or
>>>>>>
>>>>>>          get_bytes_in_fifo()
>>>>>>
>>>>>> or alike.
>>>>>
>>>>> or leave it as is. The function is documented:
>>>>   
>>>>> + * @get_fifo_bytes: function pointer to get number of bytes in the FIFO buffer
>>>>
>>>> Do you find it unambiguous? I do not.
>>>>
>>>> Still needs more words to explain if it's a capacity of FIFO or is it amount of
>>>> valid bytes for the current transfer or what?
>>>
>>> how about change the description to:
>>> function pointer to get amount  of acceleration data bytes currently
>>> stored in the sensor's FIFO buffer
>>>
>>> and change the function to "get_amount_bytes_in_fifo()"
>>
>> Sounds good to me, thank you!
>>
> Bikeshedding time ;)
> 
> I don't like "amount" in this - it ends up adding little meaning
> and to me it is ugly English.  It's making it clear that we are dealing
> with some sort of count but that is already true of get_bytes_in_fifo()
> So to my reading it adds nothing wrt to removing ambiguity.
> 
> get_number_of_bytes_in_fifo() flows better but also adds nothing over
> get_bytes_in_fifo()
> 
> You could make it clear it is something that changes over time.
> 
> get_current_bytes_in_fifo()
> 
> Which at least implies it changes - though it doesn't rule out a weird
> variable max size fifo.
> 
> get_fifo_bytes_available() might be the clearest option and is the one
> I would prefer.  It's still a little messy as it could mean
> 'number of bytes of data that haven't been used yet in the fifo and
>   are available for samples in the future'.
> 
> Sigh.  Maybe least ambiguous is something longer like.
> 
> get_fifo_bytes_available_to_read()
> get_fifo_bytes_available_out()
> 
> Honestly I don't care that much what you go with :)

If this was a democracy (which it isn't) - my vote would go for "leave 
as it is" because the concept of a data collecting fifo where amount of 
data acquired in FIFO is readable from a register is common enough. I 
think that people who work on a driver like this should guess what this 
is for. Besides, if anything more than looking at the code is needed, 
then the plain guessing won't do and one needs anyway to open the 
data-sheet.

 From my perspective this series adds a nice value and is good to go.

Just my 10 cents though :)

Yours,
	-- Matti
Andy Shevchenko Aug. 28, 2023, 10:53 a.m. UTC | #10
On Mon, Aug 28, 2023 at 09:24:25AM +0300, Matti Vaittinen wrote:
> On 8/27/23 21:09, Jonathan Cameron wrote:

...

> I think that people who work on a driver like this should guess what this is
> for.

_This_ is the result of what people always forgot to think about, i.e. newcomers.
What _if_ the newcomer starts with this code and already being puzzled enough on
what the heck the function does. With all ambiguity we rise the threshold for the
newcomers and make the kernel project not attractive to start with (besides the
C language which is already considered as mastodon among youngsters).
Matti Vaittinen Aug. 29, 2023, 6:33 a.m. UTC | #11
On 8/28/23 13:53, Andy Shevchenko wrote:
> On Mon, Aug 28, 2023 at 09:24:25AM +0300, Matti Vaittinen wrote:
>> On 8/27/23 21:09, Jonathan Cameron wrote:
> 
> ...
> 
>> I think that people who work on a driver like this should guess what this is
>> for.
> 
> _This_ is the result of what people always forgot to think about, i.e. newcomers.

Thanks Andy. This was a good heads-up for me. I do also see the need for 
fresh blood here - we aren't getting any younger.

> What _if_ the newcomer starts with this code and already being puzzled enough on
> what the heck the function does. With all ambiguity we rise the threshold for the
> newcomers and make the kernel project not attractive to start with 

I really appreciate you making a point about attracting newcomers (and 
there is no sarcasm in this statement). I however don't think we're 
rising the bar here. If a newcomer wants to work on a device-driver, the 
_first_ thing to do is to be familiar with the device. Without prior 
experience of this kind of devices it is really a must to get the 
data-sheet and see how the device operates before jumping into reading 
the code. I would say that after reading the fifo lvl description from 
data-sheet this should be obvious - and no, I don't think we should 
replicate the data-sheet documentation in the drivers for parts that 
aren't very peculiar.

But the question how to attract newcomers to kernel is very valid and I 
guess that not too many of us is thinking of it. Actually, I think we 
should ask from the newcomers we have that what has been the most 
repulsive part of the work when they have contributed.

(besides the
> C language which is already considered as mastodon among youngsters).

I think this is at least partially the truth. However, I think that in 
many cases one of the issues goes beyond the language - many younger 
generation people I know aren't really interested in _why_ things work, 
they just want to get things working in any way they can - and nowadays 
when you can find a tutorial for pretty much anything - one really can 
just look up instruction about how a "foobar can be made to buzz" 
instead of trying to figure out what makes a "foobar to buzz" in order 
to make it to buzz. So, I don't blame people getting used to take a 
different approach. (Not sure this makes sense - don't really know how 
to express my thoughts about this in a clear way - besides, it may not 
even matter).

Anyways, I am pretty sure that - as with any community - the way people 
are treated and how their contribution is appreciated is the key to make 
them feel good and like the work. I think that in some cases it may 
include allowing new contributors to get their code merged when it has 
reached "good enough" state - even if it was not perfect. (Sure, when 
things are good enough is subject to greater minds than me to ponder) ;)

Yours,
	-- Matti
Andy Shevchenko Sept. 6, 2023, 4:03 p.m. UTC | #12
On Tue, Aug 29, 2023 at 09:33:27AM +0300, Matti Vaittinen wrote:
> On 8/28/23 13:53, Andy Shevchenko wrote:
> > On Mon, Aug 28, 2023 at 09:24:25AM +0300, Matti Vaittinen wrote:
> > > On 8/27/23 21:09, Jonathan Cameron wrote:

Sorry it took a bit of time to reply on this.

...

> > > I think that people who work on a driver like this should guess what this is
> > > for.
> > 
> > _This_ is the result of what people always forgot to think about, i.e. newcomers.
> 
> Thanks Andy. This was a good heads-up for me. I do also see the need for
> fresh blood here - we aren't getting any younger.
> 
> > What _if_ the newcomer starts with this code and already being puzzled enough on
> > what the heck the function does. With all ambiguity we rise the threshold for the
> > newcomers and make the kernel project not attractive to start with
> 
> I really appreciate you making a point about attracting newcomers (and there
> is no sarcasm in this statement). I however don't think we're rising the bar
> here. If a newcomer wants to work on a device-driver, the _first_ thing to
> do is to be familiar with the device. Without prior experience of this kind
> of devices it is really a must to get the data-sheet and see how the device
> operates before jumping into reading the code. I would say that after
> reading the fifo lvl description from data-sheet this should be obvious -
> and no, I don't think we should replicate the data-sheet documentation in
> the drivers for parts that aren't very peculiar.

There are (at least?) two approaches on the contribution:
1) generic / library wise;
2) specific hardware wise.

You are talking about 2), while my remark is about both. I can imagine a newcomer
who possess a hardware that looks similar to what this driver is for. Now, they
would like to write a new driver (note, that compatibility can be checked by
reading the RTL definitions, so no need to dive into the code) and use this as
a (nice) reference. With that in mind, they can read a function named
get_fifo_bytes() with not so extensive documentation nor fully self-explanatory
name. One may mistakenly though about this as a function for something that
returns FIFO capacity, but in the reality it is current amount of valid / data
bytes in the FIFO for the ongoing communication with the device.

> But the question how to attract newcomers to kernel is very valid and I
> guess that not too many of us is thinking of it. Actually, I think we should
> ask from the newcomers we have that what has been the most repulsive part of
> the work when they have contributed.

> (besides the
> > C language which is already considered as mastodon among youngsters).
> 
> I think this is at least partially the truth. However, I think that in many
> cases one of the issues goes beyond the language - many younger generation
> people I know aren't really interested in _why_ things work, they just want
> to get things working in any way they can - and nowadays when you can find a
> tutorial for pretty much anything - one really can just look up instruction
> about how a "foobar can be made to buzz" instead of trying to figure out
> what makes a "foobar to buzz" in order to make it to buzz. So, I don't blame
> people getting used to take a different approach. (Not sure this makes sense
> - don't really know how to express my thoughts about this in a clear way -
> besides, it may not even matter).

Yeah, I share your frustration and agree that people are loosing the feel of
curiosity. Brave New World in front of us...

> Anyways, I am pretty sure that - as with any community - the way people are
> treated and how their contribution is appreciated is the key to make them
> feel good and like the work. I think that in some cases it may include
> allowing new contributors to get their code merged when it has reached "good
> enough" state - even if it was not perfect. (Sure, when things are good
> enough is subject to greater minds than me to ponder) ;)
Matti Vaittinen Sept. 7, 2023, 6:33 a.m. UTC | #13
On 9/6/23 19:03, Andy Shevchenko wrote:
> On Tue, Aug 29, 2023 at 09:33:27AM +0300, Matti Vaittinen wrote:
>> On 8/28/23 13:53, Andy Shevchenko wrote:
>>> On Mon, Aug 28, 2023 at 09:24:25AM +0300, Matti Vaittinen wrote:
>>>> On 8/27/23 21:09, Jonathan Cameron wrote:
> 
> Sorry it took a bit of time to reply on this.

No problem. Autumn is approaching and darkness is falling in Finland... 
So, at least I am really slowing down with everything... :|

> ...
> 
>>>> I think that people who work on a driver like this should guess what this is
>>>> for.
>>>
>>> _This_ is the result of what people always forgot to think about, i.e. newcomers.
>>
>> Thanks Andy. This was a good heads-up for me. I do also see the need for
>> fresh blood here - we aren't getting any younger.
>>
>>> What _if_ the newcomer starts with this code and already being puzzled enough on
>>> what the heck the function does. With all ambiguity we rise the threshold for the
>>> newcomers and make the kernel project not attractive to start with
>>
>> I really appreciate you making a point about attracting newcomers (and there
>> is no sarcasm in this statement). I however don't think we're rising the bar
>> here. If a newcomer wants to work on a device-driver, the _first_ thing to
>> do is to be familiar with the device. Without prior experience of this kind
>> of devices it is really a must to get the data-sheet and see how the device
>> operates before jumping into reading the code. I would say that after
>> reading the fifo lvl description from data-sheet this should be obvious -
>> and no, I don't think we should replicate the data-sheet documentation in
>> the drivers for parts that aren't very peculiar.
> 
> There are (at least?) two approaches on the contribution:
> 1) generic / library wise;
> 2) specific hardware wise.
> 
> You are talking about 2), while my remark is about both. I can imagine a newcomer
> who possess a hardware that looks similar to what this driver is for.

Yes. I am talking about 2). And my stance is that device drivers belong 
to category 2). If one works with a device driver for some HW, then 
he/she needs to be willing to understand the hardware.

  Now, they
> would like to write a new driver (note, that compatibility can be checked by
> reading the RTL definitions, so no need to dive into the code) and use this as
> a (nice) reference. With that in mind, they can read a function named
> get_fifo_bytes() with not so extensive documentation nor fully self-explanatory
> name. One may mistakenly though about this as a function for something that
> returns FIFO capacity, but in the reality it is current amount of valid / data
> bytes in the FIFO for the ongoing communication with the device. 

I can't avoid having a feeling that this is a very unlikely scenario. I 
am afraid that by requesting this type of improvements at patch series 
which is at v8 and has been running for half an year (and which was of a 
good quality to start with, especially knowing this was the author's 
first driver) is going to be more repulsive to the newcomers than the 
potential obfuscation.

I don't try claiming that no-one could ever hit this trap (even if I 
don't see it likely). I still believe that if one does so, he/she will 
also get such a bug fixed without being totally discouraged - it's 
business as usual.

I hope this does not come out as rude. I do appreciate your reviews, 
it's comforting to know someone looks my code with sharp eyes and points 
out things like the dead code in BM1390 driver! I just like the words 
Jonathan once spilled out:

"Don't let the perfect be enemy of good" (or something along those lines).

>> But the question how to attract newcomers to kernel is very valid and I
>> guess that not too many of us is thinking of it. Actually, I think we should
>> ask from the newcomers we have that what has been the most repulsive part of
>> the work when they have contributed.
> 
>> (besides the
>>> C language which is already considered as mastodon among youngsters).
>>
>> I think this is at least partially the truth. However, I think that in many
>> cases one of the issues goes beyond the language - many younger generation
>> people I know aren't really interested in _why_ things work, they just want
>> to get things working in any way they can - and nowadays when you can find a
>> tutorial for pretty much anything - one really can just look up instruction
>> about how a "foobar can be made to buzz" instead of trying to figure out
>> what makes a "foobar to buzz" in order to make it to buzz. So, I don't blame
>> people getting used to take a different approach. (Not sure this makes sense
>> - don't really know how to express my thoughts about this in a clear way -
>> besides, it may not even matter).
> 
> Yeah, I share your frustration and agree that people are loosing the feel of
> curiosity. Brave New World in front of us...

Well, who knows how things will be working out for the new generations? 
Maybe they won't need the kernel in the future? Yes, I am stubbornly 
hanging in the past practices and values. Direction things seem to head 
do not always appeal to me - but perhaps it's just me? Who can say my 
values and practices are the right ones for new generations :) My oldest 
son just moved to his own home and I need to accept that young do build 
their own lives on different values I had. And who knows, maybe the 
approach of just doing things without knowing what exactly happens under 
the hood makes this world very good for them?

But yes - I don't think it suits the kernel project at all :) This is a 
project of dinosaurs like us XD

(DISCLAIMER: I don't know quite all young people in the world. Frankly 
to tell, not even 90% XD So, I am not trying to say "all young people 
are like this or that". I just have a feeling that certain way of 
thinking is more common amongst certain generations - but maybe it's 
just my misjudgement. Please, don't be offended).

> 
>> Anyways, I am pretty sure that - as with any community - the way people are
>> treated and how their contribution is appreciated is the key to make them
>> feel good and like the work. I think that in some cases it may include
>> allowing new contributors to get their code merged when it has reached "good
>> enough" state - even if it was not perfect. (Sure, when things are good
>> enough is subject to greater minds than me to ponder) ;)
>
Andy Shevchenko Sept. 11, 2023, 1:03 p.m. UTC | #14
On Thu, Sep 07, 2023 at 09:33:47AM +0300, Matti Vaittinen wrote:
> On 9/6/23 19:03, Andy Shevchenko wrote:
> > On Tue, Aug 29, 2023 at 09:33:27AM +0300, Matti Vaittinen wrote:
> > > On 8/28/23 13:53, Andy Shevchenko wrote:
> > > > On Mon, Aug 28, 2023 at 09:24:25AM +0300, Matti Vaittinen wrote:
> > > > > On 8/27/23 21:09, Jonathan Cameron wrote:

...

> > > > > I think that people who work on a driver like this should guess what this is
> > > > > for.
> > > > 
> > > > _This_ is the result of what people always forgot to think about, i.e.
> > > > newcomers.
> > > 
> > > Thanks Andy. This was a good heads-up for me. I do also see the need for
> > > fresh blood here - we aren't getting any younger.
> > > 
> > > > What _if_ the newcomer starts with this code and already being puzzled
> > > > enough on what the heck the function does. With all ambiguity we rise
> > > > the threshold for the newcomers and make the kernel project not
> > > > attractive to start with
> > > 
> > > I really appreciate you making a point about attracting newcomers (and there
> > > is no sarcasm in this statement). I however don't think we're rising the bar
> > > here. If a newcomer wants to work on a device-driver, the _first_ thing to
> > > do is to be familiar with the device. Without prior experience of this kind
> > > of devices it is really a must to get the data-sheet and see how the device
> > > operates before jumping into reading the code. I would say that after
> > > reading the fifo lvl description from data-sheet this should be obvious -
> > > and no, I don't think we should replicate the data-sheet documentation in
> > > the drivers for parts that aren't very peculiar.
> > 
> > There are (at least?) two approaches on the contribution:
> > 1) generic / library wise;
> > 2) specific hardware wise.
> > 
> > You are talking about 2), while my remark is about both. I can imagine a
> > newcomer who possess a hardware that looks similar to what this driver is
> > for.
> 
> Yes. I am talking about 2). And my stance is that device drivers belong to
> category 2). If one works with a device driver for some HW, then he/she
> needs to be willing to understand the hardware.
> 
> > Now, they would like to write a new driver (note, that compatibility can be
> > checked by reading the RTL definitions, so no need to dive into the code)
> > and use this as a (nice) reference. With that in mind, they can read a
> > function named get_fifo_bytes() with not so extensive documentation nor
> > fully self-explanatory name. One may mistakenly though about this as a
> > function for something that returns FIFO capacity, but in the reality it is
> > current amount of valid / data bytes in the FIFO for the ongoing
> > communication with the device.
> 
> I can't avoid having a feeling that this is a very unlikely scenario. I am
> afraid that by requesting this type of improvements at patch series which is
> at v8 and has been running for half an year (and which was of a good quality
> to start with, especially knowing this was the author's first driver) is
> going to be more repulsive to the newcomers than the potential obfuscation.

I agree and this is a side talk to the topic.

> I don't try claiming that no-one could ever hit this trap (even if I don't
> see it likely). I still believe that if one does so, he/she will also get
> such a bug fixed without being totally discouraged - it's business as usual.
> 
> I hope this does not come out as rude. I do appreciate your reviews, it's
> comforting to know someone looks my code with sharp eyes and points out
> things like the dead code in BM1390 driver! I just like the words Jonathan
> once spilled out:
> 
> "Don't let the perfect be enemy of good" (or something along those lines).

True.

> > > But the question how to attract newcomers to kernel is very valid and I
> > > guess that not too many of us is thinking of it. Actually, I think we should
> > > ask from the newcomers we have that what has been the most repulsive part of
> > > the work when they have contributed.
> > 
> > > > (besides the C language which is already considered as mastodon among
> > > > youngsters).
> > > 
> > > I think this is at least partially the truth. However, I think that in many
> > > cases one of the issues goes beyond the language - many younger generation
> > > people I know aren't really interested in _why_ things work, they just want
> > > to get things working in any way they can - and nowadays when you can find a
> > > tutorial for pretty much anything - one really can just look up instruction
> > > about how a "foobar can be made to buzz" instead of trying to figure out
> > > what makes a "foobar to buzz" in order to make it to buzz. So, I don't blame
> > > people getting used to take a different approach. (Not sure this makes sense
> > > - don't really know how to express my thoughts about this in a clear way -
> > > besides, it may not even matter).
> > 
> > Yeah, I share your frustration and agree that people are loosing the feel of
> > curiosity. Brave New World in front of us...
> 
> Well, who knows how things will be working out for the new generations?
> Maybe they won't need the kernel in the future? Yes, I am stubbornly hanging
> in the past practices and values. Direction things seem to head do not
> always appeal to me - but perhaps it's just me? Who can say my values and
> practices are the right ones for new generations :) My oldest son just moved
> to his own home and I need to accept that young do build their own lives on
> different values I had. And who knows, maybe the approach of just doing
> things without knowing what exactly happens under the hood makes this world
> very good for them?
> 
> But yes - I don't think it suits the kernel project at all :) This is a
> project of dinosaurs like us XD
> 
> (DISCLAIMER: I don't know quite all young people in the world. Frankly to
> tell, not even 90% XD So, I am not trying to say "all young people are like
> this or that".

Operating in terms of universal quantifier is always wrong (pun intended).

> I just have a feeling that certain way of thinking is more
> common amongst certain generations - but maybe it's just my misjudgement.
> Please, don't be offended).
> 
> > > Anyways, I am pretty sure that - as with any community - the way people
> > > are treated and how their contribution is appreciated is the key to make
> > > them feel good and like the work. I think that in some cases it may
> > > include allowing new contributors to get their code merged when it has
> > > reached "good enough" state - even if it was not perfect. (Sure, when
> > > things are good enough is subject to greater minds than me to ponder) ;)
diff mbox series

Patch

diff --git a/drivers/iio/accel/kionix-kx022a.c b/drivers/iio/accel/kionix-kx022a.c
index 6bac618c63b4..458859ebc645 100644
--- a/drivers/iio/accel/kionix-kx022a.c
+++ b/drivers/iio/accel/kionix-kx022a.c
@@ -596,26 +596,33 @@  static int kx022a_drop_fifo_contents(struct kx022a_data *data)
 	return regmap_write(data->regmap, data->chip_info->buf_clear, 0x0);
 }
 
+static int kx022a_get_fifo_bytes(struct kx022a_data *data)
+{
+	int ret, fifo_bytes;
+
+	ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
+	if (ret) {
+		dev_err(data->dev, "Error reading buffer status\n");
+		return ret;
+	}
+
+	if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
+		return KX022A_FIFO_MAX_BYTES;
+
+	return fifo_bytes;
+}
+
 static int __kx022a_fifo_flush(struct iio_dev *idev, unsigned int samples,
 			       bool irq)
 {
 	struct kx022a_data *data = iio_priv(idev);
-	struct device *dev = regmap_get_device(data->regmap);
 	uint64_t sample_period;
 	int count, fifo_bytes;
 	bool renable = false;
 	int64_t tstamp;
 	int ret, i;
 
-	ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
-	if (ret) {
-		dev_err(dev, "Error reading buffer status\n");
-		return ret;
-	}
-
-	/* Let's not overflow if we for some reason get bogus value from i2c */
-	if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
-		fifo_bytes = KX022A_FIFO_MAX_BYTES;
+	fifo_bytes = data->chip_info->get_fifo_bytes(data);
 
 	if (fifo_bytes % KX022A_FIFO_SAMPLES_SIZE_BYTES)
 		dev_warn(data->dev, "Bad FIFO alignment. Data may be corrupt\n");
@@ -1024,6 +1031,7 @@  const struct kx022a_chip_info kx022a_chip_info = {
 	.inc5		  = KX022A_REG_INC5,
 	.inc6		  = KX022A_REG_INC6,
 	.xout_l		  = KX022A_REG_XOUT_L,
+	.get_fifo_bytes	  = kx022a_get_fifo_bytes,
 };
 EXPORT_SYMBOL_NS_GPL(kx022a_chip_info, IIO_KX022A);
 
diff --git a/drivers/iio/accel/kionix-kx022a.h b/drivers/iio/accel/kionix-kx022a.h
index 0e5026019213..c9f9aee7e597 100644
--- a/drivers/iio/accel/kionix-kx022a.h
+++ b/drivers/iio/accel/kionix-kx022a.h
@@ -76,6 +76,8 @@ 
 
 struct device;
 
+struct kx022a_data;
+
 /**
  * struct kx022a_chip_info - Kionix accelerometer chip specific information
  *
@@ -99,6 +101,7 @@  struct device;
  * @inc5:		interrupt control register 5
  * @inc6:		interrupt control register 6
  * @xout_l:		x-axis output least significant byte
+ * @get_fifo_bytes:	function pointer to get number of bytes in the FIFO buffer
  */
 struct kx022a_chip_info {
 	const char *name;
@@ -121,6 +124,7 @@  struct kx022a_chip_info {
 	u8 inc5;
 	u8 inc6;
 	u8 xout_l;
+	int (*get_fifo_bytes)(struct kx022a_data *);
 };
 
 int kx022a_probe_internal(struct device *dev, const struct kx022a_chip_info *chip_info);