* [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 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
* 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
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