diff mbox series

[v2,3/3] iio: temperature: mlx90632 Change return value of sensor measurement channel

Message ID 20220903222422.3426156-1-cmo@melexis.com (mailing list archive)
State Changes Requested
Headers show
Series iio: temperature: mlx90632: Add powermanagement | expand

Commit Message

Crt Mori Sept. 3, 2022, 10:24 p.m. UTC
From: Crt Mori <cmo@melexis.com>

The current EINVAL value is more applicable to embedded library, where
user can actually put the fixed value to the sensor. In case of the
driver if the value of the channel is invalid it is better in inform
userspace that Channel was out of range as that implies more to internal
driver error than invalid input. It also makes for easier debugging of
where the error comes from during the development.

Signed-off-by: Crt Mori <cmo@melexis.com>
---
 drivers/iio/temperature/mlx90632.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jonathan Cameron Sept. 4, 2022, 2:49 p.m. UTC | #1
On Sun,  4 Sep 2022 00:24:22 +0200
cmo@melexis.com wrote:

> From: Crt Mori <cmo@melexis.com>
> 
> The current EINVAL value is more applicable to embedded library, where
> user can actually put the fixed value to the sensor. In case of the
> driver if the value of the channel is invalid it is better in inform
> userspace that Channel was out of range as that implies more to internal
> driver error than invalid input. It also makes for easier debugging of
> where the error comes from during the development.
> 
> Signed-off-by: Crt Mori <cmo@melexis.com>
Hmm. That's an obscure return value - I think it's mostly going to confuse
anyone who ever gets it.  So not sure this change is wise even though the
descriptive text for that one does seem very much suited to this usecase.

> ---
>  drivers/iio/temperature/mlx90632.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c
> index 37edd324d6a1..d511d36942d3 100644
> --- a/drivers/iio/temperature/mlx90632.c
> +++ b/drivers/iio/temperature/mlx90632.c
> @@ -435,7 +435,7 @@ static int mlx90632_channel_new_select(int perform_ret, uint8_t *channel_new,
>  		*channel_old = 1;
>  		break;
>  	default:
> -		return -EINVAL;
> +		return -ECHRNG;
>  	}
>  
>  	return 0;
Crt Mori Sept. 4, 2022, 3:27 p.m. UTC | #2
On Sun, 4 Sept 2022 at 17:23, Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Sun,  4 Sep 2022 00:24:22 +0200
> cmo@melexis.com wrote:
>
> > From: Crt Mori <cmo@melexis.com>
> >
> > The current EINVAL value is more applicable to embedded library, where
> > user can actually put the fixed value to the sensor. In case of the
> > driver if the value of the channel is invalid it is better in inform
> > userspace that Channel was out of range as that implies more to internal
> > driver error than invalid input. It also makes for easier debugging of
> > where the error comes from during the development.
> >
> > Signed-off-by: Crt Mori <cmo@melexis.com>
> Hmm. That's an obscure return value - I think it's mostly going to confuse
> anyone who ever gets it.  So not sure this change is wise even though the
> descriptive text for that one does seem very much suited to this usecase.
>
I did get it few times during the development due to read when sensor
is not busy, but the measurement data not yet updated correctly due to
powermode switch. I think I added enough delays all around to avoid
hitting it and with proper power mode switching, but there might be a
case, so it will be easier to spot in the source code in future. I
would not remove it, if that is what you are proposing.

> > ---
> >  drivers/iio/temperature/mlx90632.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c
> > index 37edd324d6a1..d511d36942d3 100644
> > --- a/drivers/iio/temperature/mlx90632.c
> > +++ b/drivers/iio/temperature/mlx90632.c
> > @@ -435,7 +435,7 @@ static int mlx90632_channel_new_select(int perform_ret, uint8_t *channel_new,
> >               *channel_old = 1;
> >               break;
> >       default:
> > -             return -EINVAL;
> > +             return -ECHRNG;
> >       }
> >
> >       return 0;
>
Jonathan Cameron Sept. 4, 2022, 3:56 p.m. UTC | #3
On Sun, 4 Sep 2022 17:27:28 +0200
Crt Mori <cmo@melexis.com> wrote:

> On Sun, 4 Sept 2022 at 17:23, Jonathan Cameron <jic23@kernel.org> wrote:
> >
> > On Sun,  4 Sep 2022 00:24:22 +0200
> > cmo@melexis.com wrote:
> >  
> > > From: Crt Mori <cmo@melexis.com>
> > >
> > > The current EINVAL value is more applicable to embedded library, where
> > > user can actually put the fixed value to the sensor. In case of the
> > > driver if the value of the channel is invalid it is better in inform
> > > userspace that Channel was out of range as that implies more to internal
> > > driver error than invalid input. It also makes for easier debugging of
> > > where the error comes from during the development.
> > >
> > > Signed-off-by: Crt Mori <cmo@melexis.com>  
> > Hmm. That's an obscure return value - I think it's mostly going to confuse
> > anyone who ever gets it.  So not sure this change is wise even though the
> > descriptive text for that one does seem very much suited to this usecase.
> >  
> I did get it few times during the development due to read when sensor
> is not busy, but the measurement data not yet updated correctly due to
> powermode switch. I think I added enough delays all around to avoid
> hitting it and with proper power mode switching, but there might be a
> case, so it will be easier to spot in the source code in future. I
> would not remove it, if that is what you are proposing.

I meant leave it as EINVAL. The users of ECHRNG are very very
few in number, so I don't have a good understanding of it's expected
uses.. 
> 
> > > ---
> > >  drivers/iio/temperature/mlx90632.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c
> > > index 37edd324d6a1..d511d36942d3 100644
> > > --- a/drivers/iio/temperature/mlx90632.c
> > > +++ b/drivers/iio/temperature/mlx90632.c
> > > @@ -435,7 +435,7 @@ static int mlx90632_channel_new_select(int perform_ret, uint8_t *channel_new,
> > >               *channel_old = 1;
> > >               break;
> > >       default:
> > > -             return -EINVAL;
> > > +             return -ECHRNG;
> > >       }
> > >
> > >       return 0;  
> >
Andy Shevchenko Sept. 4, 2022, 7:19 p.m. UTC | #4
On Sun, Sep 4, 2022 at 7:30 PM Jonathan Cameron <jic23@kernel.org> wrote:
> On Sun, 4 Sep 2022 17:27:28 +0200
> Crt Mori <cmo@melexis.com> wrote:
> > On Sun, 4 Sept 2022 at 17:23, Jonathan Cameron <jic23@kernel.org> wrote:
> > > On Sun,  4 Sep 2022 00:24:22 +0200
> > > cmo@melexis.com wrote:
> > >
> > > > From: Crt Mori <cmo@melexis.com>
> > > >
> > > > The current EINVAL value is more applicable to embedded library, where
> > > > user can actually put the fixed value to the sensor. In case of the
> > > > driver if the value of the channel is invalid it is better in inform
> > > > userspace that Channel was out of range as that implies more to internal
> > > > driver error than invalid input. It also makes for easier debugging of
> > > > where the error comes from during the development.
> > > >
> > > > Signed-off-by: Crt Mori <cmo@melexis.com>
> > > Hmm. That's an obscure return value - I think it's mostly going to confuse
> > > anyone who ever gets it.  So not sure this change is wise even though the
> > > descriptive text for that one does seem very much suited to this usecase.
> > >
> > I did get it few times during the development due to read when sensor
> > is not busy, but the measurement data not yet updated correctly due to
> > powermode switch. I think I added enough delays all around to avoid
> > hitting it and with proper power mode switching, but there might be a
> > case, so it will be easier to spot in the source code in future. I
> > would not remove it, if that is what you are proposing.
>
> I meant leave it as EINVAL. The users of ECHRNG are very very
> few in number, so I don't have a good understanding of it's expected
> uses..

The problem with EINVAL is that it happens in 95% of error cases and
you really need to rebuild the module to get it where it occurs. I
kinda tend to acknowledge the patch, because we still miss the JSON
error reporting in the kernel which would fix most annoying problems
with debugging kernel code.
diff mbox series

Patch

diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c
index 37edd324d6a1..d511d36942d3 100644
--- a/drivers/iio/temperature/mlx90632.c
+++ b/drivers/iio/temperature/mlx90632.c
@@ -435,7 +435,7 @@  static int mlx90632_channel_new_select(int perform_ret, uint8_t *channel_new,
 		*channel_old = 1;
 		break;
 	default:
-		return -EINVAL;
+		return -ECHRNG;
 	}
 
 	return 0;