[PATCH] iio: humidity: ens210: remove compiler warning workaround

David Lechner posted 1 patch 2 days, 17 hours ago
drivers/iio/humidity/ens210.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
[PATCH] iio: humidity: ens210: remove compiler warning workaround
Posted by David Lechner 2 days, 17 hours ago
Rewrite IIO_CHAN_INFO_RAW case to avoid needing to add unreachable code
to work around a compiler warning.

When scoped_guard() was first introduced, compilers could not see when
it returned unconditionally from inside the hidden for loop. This has
since been fixed in the macro definition. So removing the `return
-EINVAL` should be enough. Still, we can improve readability, decrease
indentation and avoid the hidden for loop by rewriting the case without
scoped_guard().

Signed-off-by: David Lechner <dlechner@baylibre.com>
---
 drivers/iio/humidity/ens210.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/iio/humidity/ens210.c b/drivers/iio/humidity/ens210.c
index 22ad208e6aa6..49543fc389bf 100644
--- a/drivers/iio/humidity/ens210.c
+++ b/drivers/iio/humidity/ens210.c
@@ -149,15 +149,16 @@ static int ens210_read_raw(struct iio_dev *indio_dev,
 	int ret;
 
 	switch (mask) {
-	case IIO_CHAN_INFO_RAW:
-		scoped_guard(mutex, &data->lock) {
-			ret = ens210_get_measurement(
-				indio_dev, channel->type == IIO_TEMP, val);
-			if (ret)
-				return ret;
-			return IIO_VAL_INT;
-		}
-		return -EINVAL; /* compiler warning workaround */
+	case IIO_CHAN_INFO_RAW: {
+		guard(mutex)(&data->lock);
+
+		ret = ens210_get_measurement(indio_dev, channel->type == IIO_TEMP,
+					     val);
+		if (ret)
+			return ret;
+
+		return IIO_VAL_INT;
+	}
 	case IIO_CHAN_INFO_SCALE:
 		if (channel->type == IIO_TEMP) {
 			*val = 15;

---
base-commit: e1a29334a9c043defe7a9363fa76d399d3fdfbec
change-id: 20260521-iio-humidity-ens210-remove-hack-7c5a6496547c

Best regards,
--  
David Lechner <dlechner@baylibre.com>
Re: [PATCH] iio: humidity: ens210: remove compiler warning workaround
Posted by Maxwell Doose 2 days, 13 hours ago
Hi David,

On Thu, May 21, 2026 at 8:26 PM David Lechner <dlechner@baylibre.com> wrote:
>
> Rewrite IIO_CHAN_INFO_RAW case to avoid needing to add unreachable code
> to work around a compiler warning.
>
> When scoped_guard() was first introduced, compilers could not see when
> it returned unconditionally from inside the hidden for loop. This has
> since been fixed in the macro definition. So removing the `return
> -EINVAL` should be enough. Still, we can improve readability, decrease
> indentation and avoid the hidden for loop by rewriting the case without
> scoped_guard().
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
> ---
>  drivers/iio/humidity/ens210.c | 19 ++++++++++---------
>  1 file changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/iio/humidity/ens210.c b/drivers/iio/humidity/ens210.c
> index 22ad208e6aa6..49543fc389bf 100644
> --- a/drivers/iio/humidity/ens210.c
> +++ b/drivers/iio/humidity/ens210.c
> @@ -149,15 +149,16 @@ static int ens210_read_raw(struct iio_dev *indio_dev,
>         int ret;
>
>         switch (mask) {
> -       case IIO_CHAN_INFO_RAW:
> -               scoped_guard(mutex, &data->lock) {
> -                       ret = ens210_get_measurement(
> -                               indio_dev, channel->type == IIO_TEMP, val);
> -                       if (ret)
> -                               return ret;
> -                       return IIO_VAL_INT;
> -               }
> -               return -EINVAL; /* compiler warning workaround */
> +       case IIO_CHAN_INFO_RAW: {
> +               guard(mutex)(&data->lock);
> +
> +               ret = ens210_get_measurement(indio_dev, channel->type == IIO_TEMP,
> +                                            val);
> +               if (ret)
> +                       return ret;
> +
> +               return IIO_VAL_INT;
> +       }
>         case IIO_CHAN_INFO_SCALE:
>                 if (channel->type == IIO_TEMP) {
>                         *val = 15;
>

I'm questioning how that initial commit got merged at all, they
could've just used guard()() with {} (the kind of thing to make me
want to take a look at this file even further!). Visually looks good
to me but will follow-up later with rb if it all checks out.

best regards,
max


> ---
> base-commit: e1a29334a9c043defe7a9363fa76d399d3fdfbec
> change-id: 20260521-iio-humidity-ens210-remove-hack-7c5a6496547c
>
> Best regards,
> --
> David Lechner <dlechner@baylibre.com>
>
>
Re: [PATCH] iio: humidity: ens210: remove compiler warning workaround
Posted by Jonathan Cameron 2 days, 6 hours ago
On Fri, 22 May 2026 00:25:08 -0500
Maxwell Doose <m32285159@gmail.com> wrote:

> Hi David,
> 
> On Thu, May 21, 2026 at 8:26 PM David Lechner <dlechner@baylibre.com> wrote:
> >
> > Rewrite IIO_CHAN_INFO_RAW case to avoid needing to add unreachable code
> > to work around a compiler warning.
> >
> > When scoped_guard() was first introduced, compilers could not see when
> > it returned unconditionally from inside the hidden for loop. This has
> > since been fixed in the macro definition. So removing the `return
> > -EINVAL` should be enough. Still, we can improve readability, decrease
> > indentation and avoid the hidden for loop by rewriting the case without
> > scoped_guard().
> >
> > Signed-off-by: David Lechner <dlechner@baylibre.com>
> > ---
> >  drivers/iio/humidity/ens210.c | 19 ++++++++++---------
> >  1 file changed, 10 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/iio/humidity/ens210.c b/drivers/iio/humidity/ens210.c
> > index 22ad208e6aa6..49543fc389bf 100644
> > --- a/drivers/iio/humidity/ens210.c
> > +++ b/drivers/iio/humidity/ens210.c
> > @@ -149,15 +149,16 @@ static int ens210_read_raw(struct iio_dev *indio_dev,
> >         int ret;
> >
> >         switch (mask) {
> > -       case IIO_CHAN_INFO_RAW:
> > -               scoped_guard(mutex, &data->lock) {
> > -                       ret = ens210_get_measurement(
> > -                               indio_dev, channel->type == IIO_TEMP, val);
> > -                       if (ret)
> > -                               return ret;
> > -                       return IIO_VAL_INT;
> > -               }
> > -               return -EINVAL; /* compiler warning workaround */
> > +       case IIO_CHAN_INFO_RAW: {
> > +               guard(mutex)(&data->lock);
> > +
> > +               ret = ens210_get_measurement(indio_dev, channel->type == IIO_TEMP,
> > +                                            val);
> > +               if (ret)
> > +                       return ret;
> > +
> > +               return IIO_VAL_INT;
> > +       }
> >         case IIO_CHAN_INFO_SCALE:
> >                 if (channel->type == IIO_TEMP) {
> >                         *val = 15;
> >  
> 
> I'm questioning how that initial commit got merged at all, they
> could've just used guard()() with {} (the kind of thing to make me
> want to take a look at this file even further!). Visually looks good
> to me but will follow-up later with rb if it all checks out.

The guard stuff was fairly new at the time so we were still working out what
patterns make sense. Took a little while for consensus to emerge!

Anyhow patch is obviously correct and a cleanup so applied to the testing
branch of iio.git.  Happy to add tags etc for next few days
(or drop it if I'm missing something!)

Jonathan

> 
> best regards,
> max
> 
> 
> > ---
> > base-commit: e1a29334a9c043defe7a9363fa76d399d3fdfbec
> > change-id: 20260521-iio-humidity-ens210-remove-hack-7c5a6496547c
> >
> > Best regards,
> > --
> > David Lechner <dlechner@baylibre.com>
> >
> >  
> 
Re: [PATCH] iio: humidity: ens210: remove compiler warning workaround
Posted by Maxwell Doose 2 days, 5 hours ago
On Fri, May 22, 2026 at 7:37 AM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Fri, 22 May 2026 00:25:08 -0500
> Maxwell Doose <m32285159@gmail.com> wrote:
>
> > Hi David,
> >
> > On Thu, May 21, 2026 at 8:26 PM David Lechner <dlechner@baylibre.com> wrote:
> > >
> > > Rewrite IIO_CHAN_INFO_RAW case to avoid needing to add unreachable code
> > > to work around a compiler warning.
> > >
> > > When scoped_guard() was first introduced, compilers could not see when
> > > it returned unconditionally from inside the hidden for loop. This has
> > > since been fixed in the macro definition. So removing the `return
> > > -EINVAL` should be enough. Still, we can improve readability, decrease
> > > indentation and avoid the hidden for loop by rewriting the case without
> > > scoped_guard().
> > >
> > > Signed-off-by: David Lechner <dlechner@baylibre.com>
> > > ---
> > >  drivers/iio/humidity/ens210.c | 19 ++++++++++---------
> > >  1 file changed, 10 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/drivers/iio/humidity/ens210.c b/drivers/iio/humidity/ens210.c
> > > index 22ad208e6aa6..49543fc389bf 100644
> > > --- a/drivers/iio/humidity/ens210.c
> > > +++ b/drivers/iio/humidity/ens210.c
> > > @@ -149,15 +149,16 @@ static int ens210_read_raw(struct iio_dev *indio_dev,
> > >         int ret;
> > >
> > >         switch (mask) {
> > > -       case IIO_CHAN_INFO_RAW:
> > > -               scoped_guard(mutex, &data->lock) {
> > > -                       ret = ens210_get_measurement(
> > > -                               indio_dev, channel->type == IIO_TEMP, val);
> > > -                       if (ret)
> > > -                               return ret;
> > > -                       return IIO_VAL_INT;
> > > -               }
> > > -               return -EINVAL; /* compiler warning workaround */
> > > +       case IIO_CHAN_INFO_RAW: {
> > > +               guard(mutex)(&data->lock);
> > > +
> > > +               ret = ens210_get_measurement(indio_dev, channel->type == IIO_TEMP,
> > > +                                            val);
> > > +               if (ret)
> > > +                       return ret;
> > > +
> > > +               return IIO_VAL_INT;
> > > +       }
> > >         case IIO_CHAN_INFO_SCALE:
> > >                 if (channel->type == IIO_TEMP) {
> > >                         *val = 15;
> > >
> >
> > I'm questioning how that initial commit got merged at all, they
> > could've just used guard()() with {} (the kind of thing to make me
> > want to take a look at this file even further!). Visually looks good
> > to me but will follow-up later with rb if it all checks out.
>
> The guard stuff was fairly new at the time so we were still working out what
> patterns make sense. Took a little while for consensus to emerge!
>

Thanks for the insight, I wouldn't have been around here for that
early period of guard()() but still pretty interesting.

>
> Anyhow patch is obviously correct and a cleanup so applied to the testing
> branch of iio.git.  Happy to add tags etc for next few days
> (or drop it if I'm missing something!)
>

Yeah if you want to add my rb you can but don't feel like you have to!

best regards,
max




> Jonathan
>
> >
> > best regards,
> > max
> >
> >
> > > ---
> > > base-commit: e1a29334a9c043defe7a9363fa76d399d3fdfbec
> > > change-id: 20260521-iio-humidity-ens210-remove-hack-7c5a6496547c
> > >
> > > Best regards,
> > > --
> > > David Lechner <dlechner@baylibre.com>
> > >
> > >
> >
>