diff mbox series

[v1,1/2] iio: adc: ti-adc128s052: Switch to use spi_get_device_match_data()

Message ID 20221214114944.83790-1-andriy.shevchenko@linux.intel.com (mailing list archive)
State Changes Requested
Headers show
Series [v1,1/2] iio: adc: ti-adc128s052: Switch to use spi_get_device_match_data() | expand

Commit Message

Andy Shevchenko Dec. 14, 2022, 11:49 a.m. UTC
The spi_get_device_match_data() helps to get driver data from the
firmware node or SPI ID table. Use it instead of open coding.

While at it, switch ID tables to provide an acrual pointers to
the configuration data.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---

Requires aea672d054a2 ("spi: Introduce spi_get_device_match_data()
helper") which is part of upstream as of today.

 drivers/iio/adc/ti-adc128s052.c | 39 +++++++++++++++------------------
 1 file changed, 18 insertions(+), 21 deletions(-)

Comments

Jonathan Cameron Dec. 23, 2022, 3:22 p.m. UTC | #1
On Wed, 14 Dec 2022 13:49:43 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:

> The spi_get_device_match_data() helps to get driver data from the
> firmware node or SPI ID table. Use it instead of open coding.
> 
> While at it, switch ID tables to provide an acrual pointers to
> the configuration data.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> 
> Requires aea672d054a2 ("spi: Introduce spi_get_device_match_data()
> helper") which is part of upstream as of today.

I rebased to get that (will rebase again on rc1).

Applied to the togreg branch of iio.git and pushed out as testing
to keep 0-day busy over my holidays.

Jonathan

> 
>  drivers/iio/adc/ti-adc128s052.c | 39 +++++++++++++++------------------
>  1 file changed, 18 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
> index b3d5b9b7255b..9dfc625100b6 100644
> --- a/drivers/iio/adc/ti-adc128s052.c
> +++ b/drivers/iio/adc/ti-adc128s052.c
> @@ -139,16 +139,11 @@ static void adc128_disable_regulator(void *reg)
>  
>  static int adc128_probe(struct spi_device *spi)
>  {
> +	const struct adc128_configuration *config;
>  	struct iio_dev *indio_dev;
> -	unsigned int config;
>  	struct adc128 *adc;
>  	int ret;
>  
> -	if (dev_fwnode(&spi->dev))
> -		config = (unsigned long) device_get_match_data(&spi->dev);
> -	else
> -		config = spi_get_device_id(spi)->driver_data;
> -
>  	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
>  	if (!indio_dev)
>  		return -ENOMEM;
> @@ -160,6 +155,8 @@ static int adc128_probe(struct spi_device *spi)
>  	indio_dev->modes = INDIO_DIRECT_MODE;
>  	indio_dev->info = &adc128_info;
>  
> +	config = spi_get_device_match_data(&spi->dev);
> +
>  	indio_dev->channels = adc128_config[config].channels;
>  	indio_dev->num_channels = adc128_config[config].num_channels;
>  
> @@ -181,32 +178,32 @@ static int adc128_probe(struct spi_device *spi)
>  }
>  
>  static const struct of_device_id adc128_of_match[] = {
> -	{ .compatible = "ti,adc128s052", .data = (void*)0L, },
> -	{ .compatible = "ti,adc122s021", .data = (void*)1L, },
> -	{ .compatible = "ti,adc122s051", .data = (void*)1L, },
> -	{ .compatible = "ti,adc122s101", .data = (void*)1L, },
> -	{ .compatible = "ti,adc124s021", .data = (void*)2L, },
> -	{ .compatible = "ti,adc124s051", .data = (void*)2L, },
> -	{ .compatible = "ti,adc124s101", .data = (void*)2L, },
> +	{ .compatible = "ti,adc128s052", .data = &adc128_config[0] },
> +	{ .compatible = "ti,adc122s021", .data = &adc128_config[1] },
> +	{ .compatible = "ti,adc122s051", .data = &adc128_config[1] },
> +	{ .compatible = "ti,adc122s101", .data = &adc128_config[1] },
> +	{ .compatible = "ti,adc124s021", .data = &adc128_config[2] },
> +	{ .compatible = "ti,adc124s051", .data = &adc128_config[2] },
> +	{ .compatible = "ti,adc124s101", .data = &adc128_config[2] },
>  	{ /* sentinel */ },
>  };
>  MODULE_DEVICE_TABLE(of, adc128_of_match);
>  
>  static const struct spi_device_id adc128_id[] = {
> -	{ "adc128s052", 0 },	/* index into adc128_config */
> -	{ "adc122s021",	1 },
> -	{ "adc122s051",	1 },
> -	{ "adc122s101",	1 },
> -	{ "adc124s021", 2 },
> -	{ "adc124s051", 2 },
> -	{ "adc124s101", 2 },
> +	{ "adc128s052", (kernel_ulong_t)&adc128_config[0] },
> +	{ "adc122s021",	(kernel_ulong_t)&adc128_config[1] },
> +	{ "adc122s051",	(kernel_ulong_t)&adc128_config[1] },
> +	{ "adc122s101",	(kernel_ulong_t)&adc128_config[1] },
> +	{ "adc124s021", (kernel_ulong_t)&adc128_config[2] },
> +	{ "adc124s051", (kernel_ulong_t)&adc128_config[2] },
> +	{ "adc124s101", (kernel_ulong_t)&adc128_config[2] },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(spi, adc128_id);
>  
>  #ifdef CONFIG_ACPI
>  static const struct acpi_device_id adc128_acpi_match[] = {
> -	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
> +	{ "AANT1280", (kernel_ulong_t)&adc128_config[2] },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);
Jonathan Cameron Dec. 23, 2022, 3:44 p.m. UTC | #2
On Fri, 23 Dec 2022 15:22:42 +0000
Jonathan Cameron <jic23@kernel.org> wrote:

> On Wed, 14 Dec 2022 13:49:43 +0200
> Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> 
> > The spi_get_device_match_data() helps to get driver data from the
> > firmware node or SPI ID table. Use it instead of open coding.
> > 
> > While at it, switch ID tables to provide an acrual pointers to
> > the configuration data.
> > 
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> > 
> > Requires aea672d054a2 ("spi: Introduce spi_get_device_match_data()
> > helper") which is part of upstream as of today.  
> 
> I rebased to get that (will rebase again on rc1).
> 
> Applied to the togreg branch of iio.git and pushed out as testing
> to keep 0-day busy over my holidays.

I take it back...  Build test failed...

> 
> Jonathan
> 
> > 
> >  drivers/iio/adc/ti-adc128s052.c | 39 +++++++++++++++------------------
> >  1 file changed, 18 insertions(+), 21 deletions(-)
> > 
> > diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
> > index b3d5b9b7255b..9dfc625100b6 100644
> > --- a/drivers/iio/adc/ti-adc128s052.c
> > +++ b/drivers/iio/adc/ti-adc128s052.c
> > @@ -139,16 +139,11 @@ static void adc128_disable_regulator(void *reg)
> >  
> >  static int adc128_probe(struct spi_device *spi)
> >  {
> > +	const struct adc128_configuration *config;
> >  	struct iio_dev *indio_dev;
> > -	unsigned int config;
> >  	struct adc128 *adc;
> >  	int ret;
> >  
> > -	if (dev_fwnode(&spi->dev))
> > -		config = (unsigned long) device_get_match_data(&spi->dev);
> > -	else
> > -		config = spi_get_device_id(spi)->driver_data;
> > -
> >  	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
> >  	if (!indio_dev)
> >  		return -ENOMEM;
> > @@ -160,6 +155,8 @@ static int adc128_probe(struct spi_device *spi)
> >  	indio_dev->modes = INDIO_DIRECT_MODE;
> >  	indio_dev->info = &adc128_info;
> >  
> > +	config = spi_get_device_match_data(&spi->dev);
Takes a struct spi_device*

Also, having opened code up to fix this, we have a spi_get_device_id() left
just above that needs dealing with.

And a lot of uses of config below that need fixing.

I'm dropping this series until that's all fixed up.

Jonathan



> > +
> >  	indio_dev->channels = adc128_config[config].channels;
> >  	indio_dev->num_channels = adc128_config[config].num_channels;
> >  
> > @@ -181,32 +178,32 @@ static int adc128_probe(struct spi_device *spi)
> >  }
> >  
> >  static const struct of_device_id adc128_of_match[] = {
> > -	{ .compatible = "ti,adc128s052", .data = (void*)0L, },
> > -	{ .compatible = "ti,adc122s021", .data = (void*)1L, },
> > -	{ .compatible = "ti,adc122s051", .data = (void*)1L, },
> > -	{ .compatible = "ti,adc122s101", .data = (void*)1L, },
> > -	{ .compatible = "ti,adc124s021", .data = (void*)2L, },
> > -	{ .compatible = "ti,adc124s051", .data = (void*)2L, },
> > -	{ .compatible = "ti,adc124s101", .data = (void*)2L, },
> > +	{ .compatible = "ti,adc128s052", .data = &adc128_config[0] },
> > +	{ .compatible = "ti,adc122s021", .data = &adc128_config[1] },
> > +	{ .compatible = "ti,adc122s051", .data = &adc128_config[1] },
> > +	{ .compatible = "ti,adc122s101", .data = &adc128_config[1] },
> > +	{ .compatible = "ti,adc124s021", .data = &adc128_config[2] },
> > +	{ .compatible = "ti,adc124s051", .data = &adc128_config[2] },
> > +	{ .compatible = "ti,adc124s101", .data = &adc128_config[2] },
> >  	{ /* sentinel */ },
> >  };
> >  MODULE_DEVICE_TABLE(of, adc128_of_match);
> >  
> >  static const struct spi_device_id adc128_id[] = {
> > -	{ "adc128s052", 0 },	/* index into adc128_config */
> > -	{ "adc122s021",	1 },
> > -	{ "adc122s051",	1 },
> > -	{ "adc122s101",	1 },
> > -	{ "adc124s021", 2 },
> > -	{ "adc124s051", 2 },
> > -	{ "adc124s101", 2 },
> > +	{ "adc128s052", (kernel_ulong_t)&adc128_config[0] },
> > +	{ "adc122s021",	(kernel_ulong_t)&adc128_config[1] },
> > +	{ "adc122s051",	(kernel_ulong_t)&adc128_config[1] },
> > +	{ "adc122s101",	(kernel_ulong_t)&adc128_config[1] },
> > +	{ "adc124s021", (kernel_ulong_t)&adc128_config[2] },
> > +	{ "adc124s051", (kernel_ulong_t)&adc128_config[2] },
> > +	{ "adc124s101", (kernel_ulong_t)&adc128_config[2] },
> >  	{ }
> >  };
> >  MODULE_DEVICE_TABLE(spi, adc128_id);
> >  
> >  #ifdef CONFIG_ACPI
> >  static const struct acpi_device_id adc128_acpi_match[] = {
> > -	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
> > +	{ "AANT1280", (kernel_ulong_t)&adc128_config[2] },
> >  	{ }
> >  };
> >  MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);  
>
Andy Shevchenko Dec. 28, 2022, 9:59 a.m. UTC | #3
On Fri, Dec 23, 2022 at 03:44:50PM +0000, Jonathan Cameron wrote:
> On Fri, 23 Dec 2022 15:22:42 +0000
> Jonathan Cameron <jic23@kernel.org> wrote:
> 
> > On Wed, 14 Dec 2022 13:49:43 +0200
> > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > 
> > > The spi_get_device_match_data() helps to get driver data from the
> > > firmware node or SPI ID table. Use it instead of open coding.
> > > 
> > > While at it, switch ID tables to provide an acrual pointers to
> > > the configuration data.
> > > 
> > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > > ---
> > > 
> > > Requires aea672d054a2 ("spi: Introduce spi_get_device_match_data()
> > > helper") which is part of upstream as of today.  
> > 
> > I rebased to get that (will rebase again on rc1).
> > 
> > Applied to the togreg branch of iio.git and pushed out as testing
> > to keep 0-day busy over my holidays.
> 
> I take it back...  Build test failed...

As comment on the first patch stays this requires an SPI core patch, which is
now the part of the v6.2-rc1.

Can you reapply it taking the above into consideration?
Jonathan Cameron Dec. 31, 2022, 2:45 p.m. UTC | #4
On Wed, 28 Dec 2022 11:59:53 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:

> On Fri, Dec 23, 2022 at 03:44:50PM +0000, Jonathan Cameron wrote:
> > On Fri, 23 Dec 2022 15:22:42 +0000
> > Jonathan Cameron <jic23@kernel.org> wrote:
> >   
> > > On Wed, 14 Dec 2022 13:49:43 +0200
> > > Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > >   
> > > > The spi_get_device_match_data() helps to get driver data from the
> > > > firmware node or SPI ID table. Use it instead of open coding.
> > > > 
> > > > While at it, switch ID tables to provide an acrual pointers to
> > > > the configuration data.
> > > > 
> > > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > > > ---
> > > > 
> > > > Requires aea672d054a2 ("spi: Introduce spi_get_device_match_data()
> > > > helper") which is part of upstream as of today.    
> > > 
> > > I rebased to get that (will rebase again on rc1).
> > > 
> > > Applied to the togreg branch of iio.git and pushed out as testing
> > > to keep 0-day busy over my holidays.  
> > 
> > I take it back...  Build test failed...  
> 
> As comment on the first patch stays this requires an SPI core patch, which is
> now the part of the v6.2-rc1.
> 
> Can you reapply it taking the above into consideration?
>

I should have been more specific though I do mention rebasing to get the
patch above.. Doesn't build with it.

Signature of spi_get_device_match_data is:
extern const void *
spi_get_device_match_data(const struct spi_device *sdev);

and you are passing it a struct device * which rather implies you didn't
successfully build test this.

Jonathan
Andy Shevchenko Dec. 31, 2022, 6:24 p.m. UTC | #5
On Sat, Dec 31, 2022 at 02:45:58PM +0000, Jonathan Cameron wrote:
> On Wed, 28 Dec 2022 11:59:53 +0200
> Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:

...

> I should have been more specific though I do mention rebasing to get the
> patch above.. Doesn't build with it.
> 
> Signature of spi_get_device_match_data is:
> extern const void *
> spi_get_device_match_data(const struct spi_device *sdev);
> 
> and you are passing it a struct device * which rather implies you didn't
> successfully build test this.

Definitely. Thanks for spotting this, I'll investigate what happened on my side
that it wasn't built.
diff mbox series

Patch

diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c
index b3d5b9b7255b..9dfc625100b6 100644
--- a/drivers/iio/adc/ti-adc128s052.c
+++ b/drivers/iio/adc/ti-adc128s052.c
@@ -139,16 +139,11 @@  static void adc128_disable_regulator(void *reg)
 
 static int adc128_probe(struct spi_device *spi)
 {
+	const struct adc128_configuration *config;
 	struct iio_dev *indio_dev;
-	unsigned int config;
 	struct adc128 *adc;
 	int ret;
 
-	if (dev_fwnode(&spi->dev))
-		config = (unsigned long) device_get_match_data(&spi->dev);
-	else
-		config = spi_get_device_id(spi)->driver_data;
-
 	indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*adc));
 	if (!indio_dev)
 		return -ENOMEM;
@@ -160,6 +155,8 @@  static int adc128_probe(struct spi_device *spi)
 	indio_dev->modes = INDIO_DIRECT_MODE;
 	indio_dev->info = &adc128_info;
 
+	config = spi_get_device_match_data(&spi->dev);
+
 	indio_dev->channels = adc128_config[config].channels;
 	indio_dev->num_channels = adc128_config[config].num_channels;
 
@@ -181,32 +178,32 @@  static int adc128_probe(struct spi_device *spi)
 }
 
 static const struct of_device_id adc128_of_match[] = {
-	{ .compatible = "ti,adc128s052", .data = (void*)0L, },
-	{ .compatible = "ti,adc122s021", .data = (void*)1L, },
-	{ .compatible = "ti,adc122s051", .data = (void*)1L, },
-	{ .compatible = "ti,adc122s101", .data = (void*)1L, },
-	{ .compatible = "ti,adc124s021", .data = (void*)2L, },
-	{ .compatible = "ti,adc124s051", .data = (void*)2L, },
-	{ .compatible = "ti,adc124s101", .data = (void*)2L, },
+	{ .compatible = "ti,adc128s052", .data = &adc128_config[0] },
+	{ .compatible = "ti,adc122s021", .data = &adc128_config[1] },
+	{ .compatible = "ti,adc122s051", .data = &adc128_config[1] },
+	{ .compatible = "ti,adc122s101", .data = &adc128_config[1] },
+	{ .compatible = "ti,adc124s021", .data = &adc128_config[2] },
+	{ .compatible = "ti,adc124s051", .data = &adc128_config[2] },
+	{ .compatible = "ti,adc124s101", .data = &adc128_config[2] },
 	{ /* sentinel */ },
 };
 MODULE_DEVICE_TABLE(of, adc128_of_match);
 
 static const struct spi_device_id adc128_id[] = {
-	{ "adc128s052", 0 },	/* index into adc128_config */
-	{ "adc122s021",	1 },
-	{ "adc122s051",	1 },
-	{ "adc122s101",	1 },
-	{ "adc124s021", 2 },
-	{ "adc124s051", 2 },
-	{ "adc124s101", 2 },
+	{ "adc128s052", (kernel_ulong_t)&adc128_config[0] },
+	{ "adc122s021",	(kernel_ulong_t)&adc128_config[1] },
+	{ "adc122s051",	(kernel_ulong_t)&adc128_config[1] },
+	{ "adc122s101",	(kernel_ulong_t)&adc128_config[1] },
+	{ "adc124s021", (kernel_ulong_t)&adc128_config[2] },
+	{ "adc124s051", (kernel_ulong_t)&adc128_config[2] },
+	{ "adc124s101", (kernel_ulong_t)&adc128_config[2] },
 	{ }
 };
 MODULE_DEVICE_TABLE(spi, adc128_id);
 
 #ifdef CONFIG_ACPI
 static const struct acpi_device_id adc128_acpi_match[] = {
-	{ "AANT1280", 2 }, /* ADC124S021 compatible ACPI ID */
+	{ "AANT1280", (kernel_ulong_t)&adc128_config[2] },
 	{ }
 };
 MODULE_DEVICE_TABLE(acpi, adc128_acpi_match);