diff mbox series

[v3] iio: dac: ad5755: make use of of_device_id table

Message ID 20240413154511.52576-1-krzysztof.kozlowski@linaro.org (mailing list archive)
State Accepted
Headers show
Series [v3] iio: dac: ad5755: make use of of_device_id table | expand

Commit Message

Krzysztof Kozlowski April 13, 2024, 3:45 p.m. UTC
Store pointers to chip info (struct ad5755_chip_info) in driver match
data, instead of enum, so every value will be != 0, populate the
of_device_id table and use it in driver.  Even though it is one change,
it gives multiple benefits:
1. Allows to use spi_get_device_match_data() dropping local 'type'
   variable.
2. Makes both ID tables usable, so kernel can match via any of these
   methods.
3. Code is more obvious as both tables are properly filled.
4. Fixes W=1 warning:
   ad5755.c:866:34: error: unused variable 'ad5755_of_match' [-Werror,-Wunused-const-variable]

Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

---

Changes in v3:
1. Use pointers, according to Jonathan comments.

v2: https://lore.kernel.org/all/20240226192555.14aa178e@jic23-huawei/

An old v1:
https://lore.kernel.org/all/20230810111933.205619-1-krzysztof.kozlowski@linaro.org/
---
 drivers/iio/dac/ad5755.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

Comments

Jonathan Cameron April 13, 2024, 5:13 p.m. UTC | #1
On Sat, 13 Apr 2024 17:45:11 +0200
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote:

> Store pointers to chip info (struct ad5755_chip_info) in driver match
> data, instead of enum, so every value will be != 0, populate the
> of_device_id table and use it in driver.  Even though it is one change,
> it gives multiple benefits:
> 1. Allows to use spi_get_device_match_data() dropping local 'type'
>    variable.
> 2. Makes both ID tables usable, so kernel can match via any of these
>    methods.
> 3. Code is more obvious as both tables are properly filled.
> 4. Fixes W=1 warning:
>    ad5755.c:866:34: error: unused variable 'ad5755_of_match' [-Werror,-Wunused-const-variable]
> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> 
Applied but only pushed out as testing for 0-day so far, so I can rebase
to add tags (or pull it if anyone finds an issue!)

Thanks for doing this Krzysztof.

Jonathan

> ---
> 
> Changes in v3:
> 1. Use pointers, according to Jonathan comments.
> 
> v2: https://lore.kernel.org/all/20240226192555.14aa178e@jic23-huawei/
> 
> An old v1:
> https://lore.kernel.org/all/20230810111933.205619-1-krzysztof.kozlowski@linaro.org/
> ---
>  drivers/iio/dac/ad5755.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/iio/dac/ad5755.c b/drivers/iio/dac/ad5755.c
> index 404865e35460..0b24cb19ac9d 100644
> --- a/drivers/iio/dac/ad5755.c
> +++ b/drivers/iio/dac/ad5755.c
> @@ -809,7 +809,6 @@ static struct ad5755_platform_data *ad5755_parse_fw(struct device *dev)
>  
>  static int ad5755_probe(struct spi_device *spi)
>  {
> -	enum ad5755_type type = spi_get_device_id(spi)->driver_data;
>  	const struct ad5755_platform_data *pdata;
>  	struct iio_dev *indio_dev;
>  	struct ad5755_state *st;
> @@ -824,7 +823,7 @@ static int ad5755_probe(struct spi_device *spi)
>  	st = iio_priv(indio_dev);
>  	spi_set_drvdata(spi, indio_dev);
>  
> -	st->chip_info = &ad5755_chip_info_tbl[type];
> +	st->chip_info = spi_get_device_match_data(spi);
>  	st->spi = spi;
>  	st->pwr_down = 0xf;
>  
> @@ -854,21 +853,21 @@ static int ad5755_probe(struct spi_device *spi)
>  }
>  
>  static const struct spi_device_id ad5755_id[] = {
> -	{ "ad5755", ID_AD5755 },
> -	{ "ad5755-1", ID_AD5755 },
> -	{ "ad5757", ID_AD5757 },
> -	{ "ad5735", ID_AD5735 },
> -	{ "ad5737", ID_AD5737 },
> +	{ "ad5755", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5755] },
> +	{ "ad5755-1", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5755] },
> +	{ "ad5757", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5757] },
> +	{ "ad5735", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5735] },
> +	{ "ad5737", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5737] },
>  	{}
>  };
>  MODULE_DEVICE_TABLE(spi, ad5755_id);
>  
>  static const struct of_device_id ad5755_of_match[] = {
> -	{ .compatible = "adi,ad5755" },
> -	{ .compatible = "adi,ad5755-1" },
> -	{ .compatible = "adi,ad5757" },
> -	{ .compatible = "adi,ad5735" },
> -	{ .compatible = "adi,ad5737" },
> +	{ .compatible = "adi,ad5755", &ad5755_chip_info_tbl[ID_AD5755] },
> +	{ .compatible = "adi,ad5755-1", &ad5755_chip_info_tbl[ID_AD5755] },
> +	{ .compatible = "adi,ad5757", &ad5755_chip_info_tbl[ID_AD5757] },
> +	{ .compatible = "adi,ad5735", &ad5755_chip_info_tbl[ID_AD5735] },
> +	{ .compatible = "adi,ad5737", &ad5755_chip_info_tbl[ID_AD5737] },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(of, ad5755_of_match);
> @@ -876,6 +875,7 @@ MODULE_DEVICE_TABLE(of, ad5755_of_match);
>  static struct spi_driver ad5755_driver = {
>  	.driver = {
>  		.name = "ad5755",
> +		.of_match_table = ad5755_of_match,
>  	},
>  	.probe = ad5755_probe,
>  	.id_table = ad5755_id,
diff mbox series

Patch

diff --git a/drivers/iio/dac/ad5755.c b/drivers/iio/dac/ad5755.c
index 404865e35460..0b24cb19ac9d 100644
--- a/drivers/iio/dac/ad5755.c
+++ b/drivers/iio/dac/ad5755.c
@@ -809,7 +809,6 @@  static struct ad5755_platform_data *ad5755_parse_fw(struct device *dev)
 
 static int ad5755_probe(struct spi_device *spi)
 {
-	enum ad5755_type type = spi_get_device_id(spi)->driver_data;
 	const struct ad5755_platform_data *pdata;
 	struct iio_dev *indio_dev;
 	struct ad5755_state *st;
@@ -824,7 +823,7 @@  static int ad5755_probe(struct spi_device *spi)
 	st = iio_priv(indio_dev);
 	spi_set_drvdata(spi, indio_dev);
 
-	st->chip_info = &ad5755_chip_info_tbl[type];
+	st->chip_info = spi_get_device_match_data(spi);
 	st->spi = spi;
 	st->pwr_down = 0xf;
 
@@ -854,21 +853,21 @@  static int ad5755_probe(struct spi_device *spi)
 }
 
 static const struct spi_device_id ad5755_id[] = {
-	{ "ad5755", ID_AD5755 },
-	{ "ad5755-1", ID_AD5755 },
-	{ "ad5757", ID_AD5757 },
-	{ "ad5735", ID_AD5735 },
-	{ "ad5737", ID_AD5737 },
+	{ "ad5755", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5755] },
+	{ "ad5755-1", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5755] },
+	{ "ad5757", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5757] },
+	{ "ad5735", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5735] },
+	{ "ad5737", (kernel_ulong_t)&ad5755_chip_info_tbl[ID_AD5737] },
 	{}
 };
 MODULE_DEVICE_TABLE(spi, ad5755_id);
 
 static const struct of_device_id ad5755_of_match[] = {
-	{ .compatible = "adi,ad5755" },
-	{ .compatible = "adi,ad5755-1" },
-	{ .compatible = "adi,ad5757" },
-	{ .compatible = "adi,ad5735" },
-	{ .compatible = "adi,ad5737" },
+	{ .compatible = "adi,ad5755", &ad5755_chip_info_tbl[ID_AD5755] },
+	{ .compatible = "adi,ad5755-1", &ad5755_chip_info_tbl[ID_AD5755] },
+	{ .compatible = "adi,ad5757", &ad5755_chip_info_tbl[ID_AD5757] },
+	{ .compatible = "adi,ad5735", &ad5755_chip_info_tbl[ID_AD5735] },
+	{ .compatible = "adi,ad5737", &ad5755_chip_info_tbl[ID_AD5737] },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, ad5755_of_match);
@@ -876,6 +875,7 @@  MODULE_DEVICE_TABLE(of, ad5755_of_match);
 static struct spi_driver ad5755_driver = {
 	.driver = {
 		.name = "ad5755",
+		.of_match_table = ad5755_of_match,
 	},
 	.probe = ad5755_probe,
 	.id_table = ad5755_id,