diff mbox series

[v2] iio: adc: ad7944: simplify adi,spi-mode property parsing

Message ID 20240319-ad7944-cleanups-v2-1-50e77269351b@baylibre.com (mailing list archive)
State Accepted
Headers show
Series [v2] iio: adc: ad7944: simplify adi,spi-mode property parsing | expand

Commit Message

David Lechner March 19, 2024, 2:27 p.m. UTC
This simplifies the adi,spi-mode property parsing by using
device_property_match_property_string() instead of two separate
functions. Also, the error return value is now more informative
in cases where there was problem parsing the property.

Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
Changes in v2:
- Reorder error path to avoid else statement
- Link to v1: https://lore.kernel.org/r/20240318-ad7944-cleanups-v1-1-0cbb0349a14f@baylibre.com
---
 drivers/iio/adc/ad7944.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)


---
base-commit: 1446d8ef48196409f811c25071b2cc510a49fc60
change-id: 20240318-ad7944-cleanups-9f95a7c598b6

Comments

Andy Shevchenko March 19, 2024, 3:01 p.m. UTC | #1
On Tue, Mar 19, 2024 at 4:28 PM David Lechner <dlechner@baylibre.com> wrote:
>
> This simplifies the adi,spi-mode property parsing by using
> device_property_match_property_string() instead of two separate
> functions. Also, the error return value is now more informative
> in cases where there was problem parsing the property.

a problem

...

> +       ret = device_property_match_property_string(dev, "adi,spi-mode",
> +                                                   ad7944_spi_modes,
> +                                                   ARRAY_SIZE(ad7944_spi_modes));
> +       if (ret < 0) {
> +               if (ret != -EINVAL)
> +                       return dev_err_probe(dev, ret,
> +                                            "getting adi,spi-mode property failed\n");

> -               adc->spi_mode = ret;
> -       } else {

Actually we may even leave these unchanged

>                 /* absence of adi,spi-mode property means default mode */
>                 adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> +       } else {
> +               adc->spi_mode = ret;
>         }

       ret = device_property_match_property_string(dev, "adi,spi-mode",
                                                   ad7944_spi_modes,

ARRAY_SIZE(ad7944_spi_modes));
       if (ret >= 0) {
               adc->spi_mode = ret;
       } else if (ret != -EINVAL) {
                       return dev_err_probe(dev, ret,
                                            "getting adi,spi-mode
property failed\n");
       } else {
               /* absence of adi,spi-mode property means default mode */
               adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
       }

But I can admit this is not an often used approach.
David Lechner March 19, 2024, 3:28 p.m. UTC | #2
On Tue, Mar 19, 2024 at 10:01 AM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
>
> On Tue, Mar 19, 2024 at 4:28 PM David Lechner <dlechner@baylibre.com> wrote:
> >
> > This simplifies the adi,spi-mode property parsing by using
> > device_property_match_property_string() instead of two separate
> > functions. Also, the error return value is now more informative
> > in cases where there was problem parsing the property.
>
> a problem
>
> ...
>
> > +       ret = device_property_match_property_string(dev, "adi,spi-mode",
> > +                                                   ad7944_spi_modes,
> > +                                                   ARRAY_SIZE(ad7944_spi_modes));
> > +       if (ret < 0) {
> > +               if (ret != -EINVAL)
> > +                       return dev_err_probe(dev, ret,
> > +                                            "getting adi,spi-mode property failed\n");
>
> > -               adc->spi_mode = ret;
> > -       } else {
>
> Actually we may even leave these unchanged
>
> >                 /* absence of adi,spi-mode property means default mode */
> >                 adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> > +       } else {
> > +               adc->spi_mode = ret;
> >         }
>
>        ret = device_property_match_property_string(dev, "adi,spi-mode",
>                                                    ad7944_spi_modes,
>
> ARRAY_SIZE(ad7944_spi_modes));
>        if (ret >= 0) {
>                adc->spi_mode = ret;
>        } else if (ret != -EINVAL) {
>                        return dev_err_probe(dev, ret,
>                                             "getting adi,spi-mode
> property failed\n");
>        } else {
>                /* absence of adi,spi-mode property means default mode */
>                adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
>        }
>
> But I can admit this is not an often used approach.
>

I think Jonathan prefers to have the error path first, so I would like
to wait and see if he has an opinion here.
Jonathan Cameron March 23, 2024, 6:29 p.m. UTC | #3
On Tue, 19 Mar 2024 10:28:31 -0500
David Lechner <dlechner@baylibre.com> wrote:

> On Tue, Mar 19, 2024 at 10:01 AM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> >
> > On Tue, Mar 19, 2024 at 4:28 PM David Lechner <dlechner@baylibre.com> wrote:  
> > >
> > > This simplifies the adi,spi-mode property parsing by using
> > > device_property_match_property_string() instead of two separate
> > > functions. Also, the error return value is now more informative
> > > in cases where there was problem parsing the property.  
> >
> > a problem
> >
I'll fix that up.

> > ...
> >  
> > > +       ret = device_property_match_property_string(dev, "adi,spi-mode",
> > > +                                                   ad7944_spi_modes,
> > > +                                                   ARRAY_SIZE(ad7944_spi_modes));
> > > +       if (ret < 0) {
> > > +               if (ret != -EINVAL)
> > > +                       return dev_err_probe(dev, ret,
> > > +                                            "getting adi,spi-mode property failed\n");  
> >  
> > > -               adc->spi_mode = ret;
> > > -       } else {  
> >
> > Actually we may even leave these unchanged
> >  
> > >                 /* absence of adi,spi-mode property means default mode */
> > >                 adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> > > +       } else {
> > > +               adc->spi_mode = ret;
> > >         }  
> >
> >        ret = device_property_match_property_string(dev, "adi,spi-mode",
> >                                                    ad7944_spi_modes,
> >
> > ARRAY_SIZE(ad7944_spi_modes));
> >        if (ret >= 0) {
> >                adc->spi_mode = ret;
> >        } else if (ret != -EINVAL) {
> >                        return dev_err_probe(dev, ret,
> >                                             "getting adi,spi-mode
> > property failed\n");
> >        } else {
> >                /* absence of adi,spi-mode property means default mode */
> >                adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> >        }
> >
> > But I can admit this is not an often used approach.
> >  
> 
> I think Jonathan prefers to have the error path first, so I would like
> to wait and see if he has an opinion here.
I do prefer error paths first.  Thanks.

Jonathan
Jonathan Cameron March 23, 2024, 6:31 p.m. UTC | #4
On Tue, 19 Mar 2024 09:27:45 -0500
David Lechner <dlechner@baylibre.com> wrote:

> This simplifies the adi,spi-mode property parsing by using
> device_property_match_property_string() instead of two separate
> functions. Also, the error return value is now more informative
> in cases where there was problem parsing the property.
> 
> Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied with the patch description tweaked to the togreg-normal branch
of iio.git (I'll unwind that back to my more normal branch handling
next week) and pushed out for 0-day to take a look at it.

Thanks,

Jonathan

> ---
> Changes in v2:
> - Reorder error path to avoid else statement
> - Link to v1: https://lore.kernel.org/r/20240318-ad7944-cleanups-v1-1-0cbb0349a14f@baylibre.com
> ---
>  drivers/iio/adc/ad7944.c | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7944.c b/drivers/iio/adc/ad7944.c
> index d5ec6b5a41c7..261a3f645fd8 100644
> --- a/drivers/iio/adc/ad7944.c
> +++ b/drivers/iio/adc/ad7944.c
> @@ -366,7 +366,6 @@ static int ad7944_probe(struct spi_device *spi)
>  	struct ad7944_adc *adc;
>  	bool have_refin = false;
>  	struct regulator *ref;
> -	const char *str_val;
>  	int ret;
>  
>  	indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
> @@ -382,16 +381,18 @@ static int ad7944_probe(struct spi_device *spi)
>  
>  	adc->timing_spec = chip_info->timing_spec;
>  
> -	if (device_property_read_string(dev, "adi,spi-mode", &str_val) == 0) {
> -		ret = sysfs_match_string(ad7944_spi_modes, str_val);
> -		if (ret < 0)
> -			return dev_err_probe(dev, -EINVAL,
> -					     "unsupported adi,spi-mode\n");
> +	ret = device_property_match_property_string(dev, "adi,spi-mode",
> +						    ad7944_spi_modes,
> +						    ARRAY_SIZE(ad7944_spi_modes));
> +	if (ret < 0) {
> +		if (ret != -EINVAL)
> +			return dev_err_probe(dev, ret,
> +					     "getting adi,spi-mode property failed\n");
>  
> -		adc->spi_mode = ret;
> -	} else {
>  		/* absence of adi,spi-mode property means default mode */
>  		adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> +	} else {
> +		adc->spi_mode = ret;
>  	}
>  
>  	if (adc->spi_mode == AD7944_SPI_MODE_CHAIN)
> 
> ---
> base-commit: 1446d8ef48196409f811c25071b2cc510a49fc60
> change-id: 20240318-ad7944-cleanups-9f95a7c598b6
Andy Shevchenko March 23, 2024, 8:44 p.m. UTC | #5
Sat, Mar 23, 2024 at 06:29:18PM +0000, Jonathan Cameron kirjoitti:
> On Tue, 19 Mar 2024 10:28:31 -0500
> David Lechner <dlechner@baylibre.com> wrote:
> > On Tue, Mar 19, 2024 at 10:01 AM Andy Shevchenko
> > <andy.shevchenko@gmail.com> wrote:
> > > On Tue, Mar 19, 2024 at 4:28 PM David Lechner <dlechner@baylibre.com> wrote:  

...

> > > > +       ret = device_property_match_property_string(dev, "adi,spi-mode",
> > > > +                                                   ad7944_spi_modes,
> > > > +                                                   ARRAY_SIZE(ad7944_spi_modes));
> > > > +       if (ret < 0) {
> > > > +               if (ret != -EINVAL)
> > > > +                       return dev_err_probe(dev, ret,
> > > > +                                            "getting adi,spi-mode property failed\n");  
> > >  
> > > > -               adc->spi_mode = ret;
> > > > -       } else {  
> > >
> > > Actually we may even leave these unchanged
> > >  
> > > >                 /* absence of adi,spi-mode property means default mode */
> > > >                 adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> > > > +       } else {
> > > > +               adc->spi_mode = ret;
> > > >         }  
> > >
> > >        ret = device_property_match_property_string(dev, "adi,spi-mode",
> > >                                                    ad7944_spi_modes,
> > >
> > > ARRAY_SIZE(ad7944_spi_modes));
> > >        if (ret >= 0) {
> > >                adc->spi_mode = ret;
> > >        } else if (ret != -EINVAL) {
> > >                        return dev_err_probe(dev, ret,
> > >                                             "getting adi,spi-mode
> > > property failed\n");
> > >        } else {
> > >                /* absence of adi,spi-mode property means default mode */
> > >                adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> > >        }
> > >
> > > But I can admit this is not an often used approach.
> > >  
> > 
> > I think Jonathan prefers to have the error path first, so I would like
> > to wait and see if he has an opinion here.
> I do prefer error paths first.  Thanks.

Still the above can be refactored to have one line less

	ret = device_property_match_property_string(dev, "adi,spi-mode",
                                                    ad7944_spi_modes,
						    ARRAY_SIZE(ad7944_spi_modes));
	if (ret == -EINVAL) {
		/* absence of adi,spi-mode property means default mode */
		adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
	} else if (ret < 0) {
		return dev_err_probe(dev, ret, "getting adi,spi-mode property failed\n");
	} else {
		adc->spi_mode = ret;
        }
Jonathan Cameron March 24, 2024, 12:18 p.m. UTC | #6
On Sat, 23 Mar 2024 22:44:37 +0200
Andy Shevchenko <andy.shevchenko@gmail.com> wrote:

> Sat, Mar 23, 2024 at 06:29:18PM +0000, Jonathan Cameron kirjoitti:
> > On Tue, 19 Mar 2024 10:28:31 -0500
> > David Lechner <dlechner@baylibre.com> wrote:  
> > > On Tue, Mar 19, 2024 at 10:01 AM Andy Shevchenko
> > > <andy.shevchenko@gmail.com> wrote:  
> > > > On Tue, Mar 19, 2024 at 4:28 PM David Lechner <dlechner@baylibre.com> wrote:    
> 
> ...
> 
> > > > > +       ret = device_property_match_property_string(dev, "adi,spi-mode",
> > > > > +                                                   ad7944_spi_modes,
> > > > > +                                                   ARRAY_SIZE(ad7944_spi_modes));
> > > > > +       if (ret < 0) {
> > > > > +               if (ret != -EINVAL)
> > > > > +                       return dev_err_probe(dev, ret,
> > > > > +                                            "getting adi,spi-mode property failed\n");    
> > > >    
> > > > > -               adc->spi_mode = ret;
> > > > > -       } else {    
> > > >
> > > > Actually we may even leave these unchanged
> > > >    
> > > > >                 /* absence of adi,spi-mode property means default mode */
> > > > >                 adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> > > > > +       } else {
> > > > > +               adc->spi_mode = ret;
> > > > >         }    
> > > >
> > > >        ret = device_property_match_property_string(dev, "adi,spi-mode",
> > > >                                                    ad7944_spi_modes,
> > > >
> > > > ARRAY_SIZE(ad7944_spi_modes));
> > > >        if (ret >= 0) {
> > > >                adc->spi_mode = ret;
> > > >        } else if (ret != -EINVAL) {
> > > >                        return dev_err_probe(dev, ret,
> > > >                                             "getting adi,spi-mode
> > > > property failed\n");
> > > >        } else {
> > > >                /* absence of adi,spi-mode property means default mode */
> > > >                adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> > > >        }
> > > >
> > > > But I can admit this is not an often used approach.
> > > >    
> > > 
> > > I think Jonathan prefers to have the error path first, so I would like
> > > to wait and see if he has an opinion here.  
> > I do prefer error paths first.  Thanks.  
> 
> Still the above can be refactored to have one line less
> 
> 	ret = device_property_match_property_string(dev, "adi,spi-mode",
>                                                     ad7944_spi_modes,
> 						    ARRAY_SIZE(ad7944_spi_modes));
> 	if (ret == -EINVAL) {
> 		/* absence of adi,spi-mode property means default mode */
> 		adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
> 	} else if (ret < 0) {
> 		return dev_err_probe(dev, ret, "getting adi,spi-mode property failed\n");
> 	} else {
> 		adc->spi_mode = ret;
>         }
> 
True.  I'll take a patch doing that, but I'm not going to tweak
it again directly.

Thanks,

Jonathan
diff mbox series

Patch

diff --git a/drivers/iio/adc/ad7944.c b/drivers/iio/adc/ad7944.c
index d5ec6b5a41c7..261a3f645fd8 100644
--- a/drivers/iio/adc/ad7944.c
+++ b/drivers/iio/adc/ad7944.c
@@ -366,7 +366,6 @@  static int ad7944_probe(struct spi_device *spi)
 	struct ad7944_adc *adc;
 	bool have_refin = false;
 	struct regulator *ref;
-	const char *str_val;
 	int ret;
 
 	indio_dev = devm_iio_device_alloc(dev, sizeof(*adc));
@@ -382,16 +381,18 @@  static int ad7944_probe(struct spi_device *spi)
 
 	adc->timing_spec = chip_info->timing_spec;
 
-	if (device_property_read_string(dev, "adi,spi-mode", &str_val) == 0) {
-		ret = sysfs_match_string(ad7944_spi_modes, str_val);
-		if (ret < 0)
-			return dev_err_probe(dev, -EINVAL,
-					     "unsupported adi,spi-mode\n");
+	ret = device_property_match_property_string(dev, "adi,spi-mode",
+						    ad7944_spi_modes,
+						    ARRAY_SIZE(ad7944_spi_modes));
+	if (ret < 0) {
+		if (ret != -EINVAL)
+			return dev_err_probe(dev, ret,
+					     "getting adi,spi-mode property failed\n");
 
-		adc->spi_mode = ret;
-	} else {
 		/* absence of adi,spi-mode property means default mode */
 		adc->spi_mode = AD7944_SPI_MODE_DEFAULT;
+	} else {
+		adc->spi_mode = ret;
 	}
 
 	if (adc->spi_mode == AD7944_SPI_MODE_CHAIN)