* [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data
@ 2019-12-05 17:46 Andy Shevchenko
2019-12-05 17:46 ` [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API Andy Shevchenko
2019-12-07 11:09 ` [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data Jonathan Cameron
0 siblings, 2 replies; 5+ messages in thread
From: Andy Shevchenko @ 2019-12-05 17:46 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald-Stadler
Cc: Andy Shevchenko
Platform data is a legacy interface to supply device properties
to the driver. In this case we even don't have in-kernel users
for it. Just remove it for good.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2: no changes
drivers/iio/adc/ti-ads1015.c | 18 ++++++++----------
include/Kbuild | 1 -
include/linux/platform_data/ads1015.h | 23 -----------------------
3 files changed, 8 insertions(+), 34 deletions(-)
delete mode 100644 include/linux/platform_data/ads1015.h
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index a550b132cfb7..3b123b4f0b99 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -21,8 +21,6 @@
#include <linux/mutex.h>
#include <linux/delay.h>
-#include <linux/platform_data/ads1015.h>
-
#include <linux/iio/iio.h>
#include <linux/iio/types.h>
#include <linux/iio/sysfs.h>
@@ -33,6 +31,8 @@
#define ADS1015_DRV_NAME "ads1015"
+#define ADS1015_CHANNELS 8
+
#define ADS1015_CONV_REG 0x00
#define ADS1015_CFG_REG 0x01
#define ADS1015_LO_THRESH_REG 0x02
@@ -219,6 +219,12 @@ static const struct iio_event_spec ads1015_events[] = {
.datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
}
+struct ads1015_channel_data {
+ bool enabled;
+ unsigned int pga;
+ unsigned int data_rate;
+};
+
struct ads1015_thresh_data {
unsigned int comp_queue;
int high_thresh;
@@ -903,14 +909,6 @@ static void ads1015_get_channels_config(struct i2c_client *client)
struct iio_dev *indio_dev = i2c_get_clientdata(client);
struct ads1015_data *data = iio_priv(indio_dev);
- struct ads1015_platform_data *pdata = dev_get_platdata(&client->dev);
-
- /* prefer platform data */
- if (pdata) {
- memcpy(data->channel_data, pdata->channel_data,
- sizeof(data->channel_data));
- return;
- }
#ifdef CONFIG_OF
if (!ads1015_get_channels_config_of(client))
diff --git a/include/Kbuild b/include/Kbuild
index ffba79483cc5..498821e5d9ed 100644
--- a/include/Kbuild
+++ b/include/Kbuild
@@ -443,7 +443,6 @@ header-test- += linux/platform_data/ad7793.h
header-test- += linux/platform_data/ad7887.h
header-test- += linux/platform_data/adau17x1.h
header-test- += linux/platform_data/adp8870.h
-header-test- += linux/platform_data/ads1015.h
header-test- += linux/platform_data/ads7828.h
header-test- += linux/platform_data/apds990x.h
header-test- += linux/platform_data/arm-ux500-pm.h
diff --git a/include/linux/platform_data/ads1015.h b/include/linux/platform_data/ads1015.h
deleted file mode 100644
index 4cc9ffcafcbf..000000000000
--- a/include/linux/platform_data/ads1015.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Platform Data for ADS1015 12-bit 4-input ADC
- * (C) Copyright 2010
- * Dirk Eibach, Guntermann & Drunck GmbH <eibach@gdsys.de>
- */
-
-#ifndef LINUX_ADS1015_H
-#define LINUX_ADS1015_H
-
-#define ADS1015_CHANNELS 8
-
-struct ads1015_channel_data {
- bool enabled;
- unsigned int pga;
- unsigned int data_rate;
-};
-
-struct ads1015_platform_data {
- struct ads1015_channel_data channel_data[ADS1015_CHANNELS];
-};
-
-#endif /* LINUX_ADS1015_H */
--
2.24.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API
2019-12-05 17:46 [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data Andy Shevchenko
@ 2019-12-05 17:46 ` Andy Shevchenko
2019-12-07 11:09 ` Jonathan Cameron
2019-12-07 11:09 ` [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data Jonathan Cameron
1 sibling, 1 reply; 5+ messages in thread
From: Andy Shevchenko @ 2019-12-05 17:46 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald-Stadler
Cc: Andy Shevchenko
Make use of device property API in this driver so that both OF based
system and ACPI based system can use this driver.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2:
- use device_for_each_child_node()
- leave 'node' variable name (reduce churn)
drivers/iio/adc/ti-ads1015.c | 57 ++++++++++++++++--------------------
1 file changed, 26 insertions(+), 31 deletions(-)
diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 3b123b4f0b99..5ea4f45d6bad 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -12,10 +12,10 @@
*/
#include <linux/module.h>
-#include <linux/of_device.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/i2c.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/pm_runtime.h>
#include <linux/mutex.h>
@@ -77,6 +77,7 @@
#define ADS1015_DEFAULT_CHAN 0
enum chip_ids {
+ ADSXXXX = 0,
ADS1015,
ADS1115,
};
@@ -843,65 +844,58 @@ static const struct iio_info ads1115_info = {
.attrs = &ads1115_attribute_group,
};
-#ifdef CONFIG_OF
-static int ads1015_get_channels_config_of(struct i2c_client *client)
+static int ads1015_client_get_channels_config(struct i2c_client *client)
{
struct iio_dev *indio_dev = i2c_get_clientdata(client);
struct ads1015_data *data = iio_priv(indio_dev);
- struct device_node *node;
+ struct device *dev = &client->dev;
+ struct fwnode_handle *node;
+ int i = -1;
- if (!client->dev.of_node ||
- !of_get_next_child(client->dev.of_node, NULL))
- return -EINVAL;
-
- for_each_child_of_node(client->dev.of_node, node) {
+ device_for_each_child_node(dev, node) {
u32 pval;
unsigned int channel;
unsigned int pga = ADS1015_DEFAULT_PGA;
unsigned int data_rate = ADS1015_DEFAULT_DATA_RATE;
- if (of_property_read_u32(node, "reg", &pval)) {
- dev_err(&client->dev, "invalid reg on %pOF\n",
- node);
+ if (fwnode_property_read_u32(node, "reg", &pval)) {
+ dev_err(dev, "invalid reg on %pfw\n", node);
continue;
}
channel = pval;
if (channel >= ADS1015_CHANNELS) {
- dev_err(&client->dev,
- "invalid channel index %d on %pOF\n",
+ dev_err(dev, "invalid channel index %d on %pfw\n",
channel, node);
continue;
}
- if (!of_property_read_u32(node, "ti,gain", &pval)) {
+ if (!fwnode_property_read_u32(node, "ti,gain", &pval)) {
pga = pval;
if (pga > 6) {
- dev_err(&client->dev, "invalid gain on %pOF\n",
- node);
- of_node_put(node);
+ dev_err(dev, "invalid gain on %pfw\n", node);
+ fwnode_handle_put(node);
return -EINVAL;
}
}
- if (!of_property_read_u32(node, "ti,datarate", &pval)) {
+ if (!fwnode_property_read_u32(node, "ti,datarate", &pval)) {
data_rate = pval;
if (data_rate > 7) {
- dev_err(&client->dev,
- "invalid data_rate on %pOF\n",
- node);
- of_node_put(node);
+ dev_err(dev, "invalid data_rate on %pfw\n", node);
+ fwnode_handle_put(node);
return -EINVAL;
}
}
data->channel_data[channel].pga = pga;
data->channel_data[channel].data_rate = data_rate;
+
+ i++;
}
- return 0;
+ return i < 0 ? -EINVAL : 0;
}
-#endif
static void ads1015_get_channels_config(struct i2c_client *client)
{
@@ -910,10 +904,9 @@ static void ads1015_get_channels_config(struct i2c_client *client)
struct iio_dev *indio_dev = i2c_get_clientdata(client);
struct ads1015_data *data = iio_priv(indio_dev);
-#ifdef CONFIG_OF
- if (!ads1015_get_channels_config_of(client))
+ if (!ads1015_client_get_channels_config(client))
return;
-#endif
+
/* fallback on default configuration */
for (k = 0; k < ADS1015_CHANNELS; ++k) {
data->channel_data[k].pga = ADS1015_DEFAULT_PGA;
@@ -951,9 +944,8 @@ static int ads1015_probe(struct i2c_client *client,
indio_dev->name = ADS1015_DRV_NAME;
indio_dev->modes = INDIO_DIRECT_MODE;
- if (client->dev.of_node)
- chip = (enum chip_ids)of_device_get_match_data(&client->dev);
- else
+ chip = (enum chip_ids)device_get_match_data(&client->dev);
+ if (chip == ADSXXXX)
chip = id->driver_data;
switch (chip) {
case ADS1015:
@@ -968,6 +960,9 @@ static int ads1015_probe(struct i2c_client *client,
indio_dev->info = &ads1115_info;
data->data_rate = (unsigned int *) &ads1115_data_rate;
break;
+ default:
+ dev_err(&client->dev, "Unknown chip %d\n", chip);
+ return -EINVAL;
}
data->event_channel = ADS1015_CHANNELS;
--
2.24.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data
2019-12-05 17:46 [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data Andy Shevchenko
2019-12-05 17:46 ` [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API Andy Shevchenko
@ 2019-12-07 11:09 ` Jonathan Cameron
1 sibling, 0 replies; 5+ messages in thread
From: Jonathan Cameron @ 2019-12-07 11:09 UTC (permalink / raw)
To: Andy Shevchenko
Cc: linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald-Stadler
On Thu, 5 Dec 2019 19:46:36 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> Platform data is a legacy interface to supply device properties
> to the driver. In this case we even don't have in-kernel users
> for it. Just remove it for good.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reverted previous version. Please do reply to your own thread when
you do this as sometimes I forget to check if there is a newer version.
Also, whilst reverting I noticed the part number is wrong in the patch
description so fixed that up whilst applying this.
Applied.
J
> ---
> v2: no changes
> drivers/iio/adc/ti-ads1015.c | 18 ++++++++----------
> include/Kbuild | 1 -
> include/linux/platform_data/ads1015.h | 23 -----------------------
> 3 files changed, 8 insertions(+), 34 deletions(-)
> delete mode 100644 include/linux/platform_data/ads1015.h
>
> diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
> index a550b132cfb7..3b123b4f0b99 100644
> --- a/drivers/iio/adc/ti-ads1015.c
> +++ b/drivers/iio/adc/ti-ads1015.c
> @@ -21,8 +21,6 @@
> #include <linux/mutex.h>
> #include <linux/delay.h>
>
> -#include <linux/platform_data/ads1015.h>
> -
> #include <linux/iio/iio.h>
> #include <linux/iio/types.h>
> #include <linux/iio/sysfs.h>
> @@ -33,6 +31,8 @@
>
> #define ADS1015_DRV_NAME "ads1015"
>
> +#define ADS1015_CHANNELS 8
> +
> #define ADS1015_CONV_REG 0x00
> #define ADS1015_CFG_REG 0x01
> #define ADS1015_LO_THRESH_REG 0x02
> @@ -219,6 +219,12 @@ static const struct iio_event_spec ads1015_events[] = {
> .datasheet_name = "AIN"#_chan"-AIN"#_chan2, \
> }
>
> +struct ads1015_channel_data {
> + bool enabled;
> + unsigned int pga;
> + unsigned int data_rate;
> +};
> +
> struct ads1015_thresh_data {
> unsigned int comp_queue;
> int high_thresh;
> @@ -903,14 +909,6 @@ static void ads1015_get_channels_config(struct i2c_client *client)
>
> struct iio_dev *indio_dev = i2c_get_clientdata(client);
> struct ads1015_data *data = iio_priv(indio_dev);
> - struct ads1015_platform_data *pdata = dev_get_platdata(&client->dev);
> -
> - /* prefer platform data */
> - if (pdata) {
> - memcpy(data->channel_data, pdata->channel_data,
> - sizeof(data->channel_data));
> - return;
> - }
>
> #ifdef CONFIG_OF
> if (!ads1015_get_channels_config_of(client))
> diff --git a/include/Kbuild b/include/Kbuild
> index ffba79483cc5..498821e5d9ed 100644
> --- a/include/Kbuild
> +++ b/include/Kbuild
> @@ -443,7 +443,6 @@ header-test- += linux/platform_data/ad7793.h
> header-test- += linux/platform_data/ad7887.h
> header-test- += linux/platform_data/adau17x1.h
> header-test- += linux/platform_data/adp8870.h
> -header-test- += linux/platform_data/ads1015.h
> header-test- += linux/platform_data/ads7828.h
> header-test- += linux/platform_data/apds990x.h
> header-test- += linux/platform_data/arm-ux500-pm.h
> diff --git a/include/linux/platform_data/ads1015.h b/include/linux/platform_data/ads1015.h
> deleted file mode 100644
> index 4cc9ffcafcbf..000000000000
> --- a/include/linux/platform_data/ads1015.h
> +++ /dev/null
> @@ -1,23 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-or-later */
> -/*
> - * Platform Data for ADS1015 12-bit 4-input ADC
> - * (C) Copyright 2010
> - * Dirk Eibach, Guntermann & Drunck GmbH <eibach@gdsys.de>
> - */
> -
> -#ifndef LINUX_ADS1015_H
> -#define LINUX_ADS1015_H
> -
> -#define ADS1015_CHANNELS 8
> -
> -struct ads1015_channel_data {
> - bool enabled;
> - unsigned int pga;
> - unsigned int data_rate;
> -};
> -
> -struct ads1015_platform_data {
> - struct ads1015_channel_data channel_data[ADS1015_CHANNELS];
> -};
> -
> -#endif /* LINUX_ADS1015_H */
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API
2019-12-05 17:46 ` [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API Andy Shevchenko
@ 2019-12-07 11:09 ` Jonathan Cameron
2019-12-09 14:39 ` Andy Shevchenko
0 siblings, 1 reply; 5+ messages in thread
From: Jonathan Cameron @ 2019-12-07 11:09 UTC (permalink / raw)
To: Andy Shevchenko
Cc: linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald-Stadler
On Thu, 5 Dec 2019 19:46:37 +0200
Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> Make use of device property API in this driver so that both OF based
> system and ACPI based system can use this driver.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Applied.
Thanks,
Jonathan
> ---
> v2:
> - use device_for_each_child_node()
> - leave 'node' variable name (reduce churn)
> drivers/iio/adc/ti-ads1015.c | 57 ++++++++++++++++--------------------
> 1 file changed, 26 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
> index 3b123b4f0b99..5ea4f45d6bad 100644
> --- a/drivers/iio/adc/ti-ads1015.c
> +++ b/drivers/iio/adc/ti-ads1015.c
> @@ -12,10 +12,10 @@
> */
>
> #include <linux/module.h>
> -#include <linux/of_device.h>
> #include <linux/init.h>
> #include <linux/irq.h>
> #include <linux/i2c.h>
> +#include <linux/property.h>
> #include <linux/regmap.h>
> #include <linux/pm_runtime.h>
> #include <linux/mutex.h>
> @@ -77,6 +77,7 @@
> #define ADS1015_DEFAULT_CHAN 0
>
> enum chip_ids {
> + ADSXXXX = 0,
> ADS1015,
> ADS1115,
> };
> @@ -843,65 +844,58 @@ static const struct iio_info ads1115_info = {
> .attrs = &ads1115_attribute_group,
> };
>
> -#ifdef CONFIG_OF
> -static int ads1015_get_channels_config_of(struct i2c_client *client)
> +static int ads1015_client_get_channels_config(struct i2c_client *client)
> {
> struct iio_dev *indio_dev = i2c_get_clientdata(client);
> struct ads1015_data *data = iio_priv(indio_dev);
> - struct device_node *node;
> + struct device *dev = &client->dev;
> + struct fwnode_handle *node;
> + int i = -1;
>
> - if (!client->dev.of_node ||
> - !of_get_next_child(client->dev.of_node, NULL))
> - return -EINVAL;
> -
> - for_each_child_of_node(client->dev.of_node, node) {
> + device_for_each_child_node(dev, node) {
> u32 pval;
> unsigned int channel;
> unsigned int pga = ADS1015_DEFAULT_PGA;
> unsigned int data_rate = ADS1015_DEFAULT_DATA_RATE;
>
> - if (of_property_read_u32(node, "reg", &pval)) {
> - dev_err(&client->dev, "invalid reg on %pOF\n",
> - node);
> + if (fwnode_property_read_u32(node, "reg", &pval)) {
> + dev_err(dev, "invalid reg on %pfw\n", node);
> continue;
> }
>
> channel = pval;
> if (channel >= ADS1015_CHANNELS) {
> - dev_err(&client->dev,
> - "invalid channel index %d on %pOF\n",
> + dev_err(dev, "invalid channel index %d on %pfw\n",
> channel, node);
> continue;
> }
>
> - if (!of_property_read_u32(node, "ti,gain", &pval)) {
> + if (!fwnode_property_read_u32(node, "ti,gain", &pval)) {
> pga = pval;
> if (pga > 6) {
> - dev_err(&client->dev, "invalid gain on %pOF\n",
> - node);
> - of_node_put(node);
> + dev_err(dev, "invalid gain on %pfw\n", node);
> + fwnode_handle_put(node);
> return -EINVAL;
> }
> }
>
> - if (!of_property_read_u32(node, "ti,datarate", &pval)) {
> + if (!fwnode_property_read_u32(node, "ti,datarate", &pval)) {
> data_rate = pval;
> if (data_rate > 7) {
> - dev_err(&client->dev,
> - "invalid data_rate on %pOF\n",
> - node);
> - of_node_put(node);
> + dev_err(dev, "invalid data_rate on %pfw\n", node);
> + fwnode_handle_put(node);
> return -EINVAL;
> }
> }
>
> data->channel_data[channel].pga = pga;
> data->channel_data[channel].data_rate = data_rate;
> +
> + i++;
> }
>
> - return 0;
> + return i < 0 ? -EINVAL : 0;
> }
> -#endif
>
> static void ads1015_get_channels_config(struct i2c_client *client)
> {
> @@ -910,10 +904,9 @@ static void ads1015_get_channels_config(struct i2c_client *client)
> struct iio_dev *indio_dev = i2c_get_clientdata(client);
> struct ads1015_data *data = iio_priv(indio_dev);
>
> -#ifdef CONFIG_OF
> - if (!ads1015_get_channels_config_of(client))
> + if (!ads1015_client_get_channels_config(client))
> return;
> -#endif
> +
> /* fallback on default configuration */
> for (k = 0; k < ADS1015_CHANNELS; ++k) {
> data->channel_data[k].pga = ADS1015_DEFAULT_PGA;
> @@ -951,9 +944,8 @@ static int ads1015_probe(struct i2c_client *client,
> indio_dev->name = ADS1015_DRV_NAME;
> indio_dev->modes = INDIO_DIRECT_MODE;
>
> - if (client->dev.of_node)
> - chip = (enum chip_ids)of_device_get_match_data(&client->dev);
> - else
> + chip = (enum chip_ids)device_get_match_data(&client->dev);
> + if (chip == ADSXXXX)
> chip = id->driver_data;
> switch (chip) {
> case ADS1015:
> @@ -968,6 +960,9 @@ static int ads1015_probe(struct i2c_client *client,
> indio_dev->info = &ads1115_info;
> data->data_rate = (unsigned int *) &ads1115_data_rate;
> break;
> + default:
> + dev_err(&client->dev, "Unknown chip %d\n", chip);
> + return -EINVAL;
> }
>
> data->event_channel = ADS1015_CHANNELS;
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API
2019-12-07 11:09 ` Jonathan Cameron
@ 2019-12-09 14:39 ` Andy Shevchenko
0 siblings, 0 replies; 5+ messages in thread
From: Andy Shevchenko @ 2019-12-09 14:39 UTC (permalink / raw)
To: Jonathan Cameron
Cc: linux-iio, Hartmut Knaack, Lars-Peter Clausen,
Peter Meerwald-Stadler
On Sat, Dec 07, 2019 at 11:09:37AM +0000, Jonathan Cameron wrote:
> On Thu, 5 Dec 2019 19:46:37 +0200
> Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>
> > Make use of device property API in this driver so that both OF based
> > system and ACPI based system can use this driver.
> >
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Applied.
Thanks!
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-12-09 14:39 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-05 17:46 [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data Andy Shevchenko
2019-12-05 17:46 ` [PATCH v3 2/2] iio: adc: ti-ads1015: Make use of device property API Andy Shevchenko
2019-12-07 11:09 ` Jonathan Cameron
2019-12-09 14:39 ` Andy Shevchenko
2019-12-07 11:09 ` [PATCH v3 1/2] iio: adc: ti-ads1025: Get rid of legacy platform data Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox