hwmon: Add device tree support for adcxx
Subsystems (2)
v3 cover hwmon: Add device tree support for adcxx
Changes v2:
- Use regular voltag binding
Changes v3:
--nothing--
No progress or feed back so try to get this upstream again.
Florian Eckert (2):
hwmon: (adcxx) add devictree bindings documentation
hwmon: (adcxx) Add device tree support
Documentation/devicetree/bindings/hwmon/adcxx.txt | 24 +++++++++ drivers/hwmon/adcxx.c | 62 ++++++++++++++++++++--- 2 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 Documentation/devicetree/bindings/hwmon/adcxx.txt
Signature · 1 line
2.11.0
PATCH v3 1/2 hwmon: (adcxx) add devictree bindings documentation
Document the devicetree bindings for the adcxx.
--- Documentation/devicetree/bindings/hwmon/adcxx.txt | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/adcxx.txt
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +24 -0
@@ -0,0 +1,24 @@ +adcxx properties + +Required properties: +- compatible: Must be one of the following: + - "national,adcxx1s" for adcxx1s + - "national,adcxx2s" for adcxx2s + - "national,adcxx4s" for adcxx4s + - "national,adcxx8s" for adcxx8s +- reg: SPI address for chip + +Optional properties: + +- vref-supply + The external reference in microvolt for this device is set to this value. + If it does not exists the reference will be set to 3300000uV (3.3V). + +Example: + +adc@6 { + compatible = "national,adcxx2s"; + reg = <6 0>; + spi-max-frequency = <1000000>; + vref-supply = <&vref>; +};
Signature · 1 line
2.11.0
PATCH v3 2/2 hwmon: (adcxx) Add device tree support
In reply to Florian EckertAdd device tree supoort for this driver.
Set reference voltage of ADC with the regulator device tree property. If not set use default 3300000uV (3.3V).
- vref-supply
--- drivers/hwmon/adcxx.c | 62 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 7 deletions(-)
drivers/hwmon/adcxx.c +55 -7
@@ -4,6 +4,7 @@* The adcxx4s is an AD converter family from National Semiconductor (NS). * * Copyright (c) 2008 Marc Pignat <[email protected]> +* Copyright (c) 2017 Florian Eckert <[email protected]> * * The adcxx4s communicates with a host processor via an SPI/Microwire Bus * interface. This driver supports the whole family of devices with name
@@ -46,9 +47,16 @@#include <linux/mutex.h> #include <linux/mod_devicetable.h> #include <linux/spi/spi.h> +#include <linux/of_device.h> +#include <linux/regulator/consumer.h> #define DRVNAME "adcxx" +#define ADCXX1S 1 +#define ADCXX2S 2 +#define ADCXX4S 4 +#define ADCXX8S 8 +struct adcxx {struct device *hwmon_dev;struct mutex lock;
@@ -159,21 +167,60 @@ static struct sensor_device_attribute ad_input[] = { SENSOR_ATTR(in7_input, S_IRUGO, adcxx_read, NULL, 7), }; +#ifdef CONFIG_OF +static const struct of_device_id adcxx_of_ids[] = { + { + .compatible ="national,adcxx1s" , + .data = (void *)ADCXX1S , + }, + { + .compatible ="national,adcxx2s" , + .data = (void *)ADCXX2S , + }, + { + .compatible ="national,adcxx4s" , + .data = (void *)ADCXX4S , + }, + { + .compatible ="national,adcxx8s" , + . data = (void *)ADCXX8S , + }, + {}, +}; +MODULE_DEVICE_TABLE (of, adcxx_of_ids); +#endif +/*----------------------------------------------------------------------*/ static int adcxx_probe (struct spi_device *spi) { -int channels =spi_get_device_id (spi)->driver_data; +const struct of_device_id *match; +struct regulator *vref; +int vref_uv; +int channels;struct adcxx *adc;int status;int i; + match =of_match_device (adcxx_of_ids, &spi->dev); +if (match) + channels = (int )(uintptr_t )match->data; +else + channels =spi_get_device_id (spi)->driver_data; + adc =devm_kzalloc (&spi->dev,sizeof (*adc),GFP_KERNEL );if (!adc)return -ENOMEM ; -/* set a default value for the reference */ - adc->reference =3300 ; + vref =devm_regulator_get_optional (&spi->dev,"vref" ); +if (!IS_ERR (vref)) { + vref_uv =regulator_get_voltage (vref); + adc->reference =DIV_ROUND_CLOSEST (vref_uv,1000 ); + } +if (!adc->reference) + adc->reference =3300 ; +dev_dbg (&spi->dev,"Reference voltage set to %dmV\n" , adc->reference); + adc->channels = channels;mutex_init (&adc->lock);
@@ -223,10 +270,10 @@ static int adcxx_remove(struct spi_device *spi) }static const struct spi_device_id adcxx_ids[] = { - {"adcxx1s" ,1 }, - {"adcxx2s" ,2 }, - {"adcxx4s" ,4 }, - {"adcxx8s" ,8 }, + {"adcxx1s" ,ADCXX1S }, + {"adcxx2s" ,ADCXX2S }, + {"adcxx4s" ,ADCXX4S }, + {"adcxx8s" ,ADCXX8S }, { }, };MODULE_DEVICE_TABLE (spi, adcxx_ids);
@@ -234,6 +281,7 @@ MODULE_DEVICE_TABLE(spi, adcxx_ids);static struct spi_driver adcxx_driver = { .driver = { .name ="adcxx" , + .of_match_table =of_match_ptr (adcxx_of_ids), }, .id_table = adcxx_ids, .probe = adcxx_probe,
Signature · 1 line
2.11.0
Rob Herring
maintainerRe: [PATCH v3 1/2] hwmon: (adcxx) add devictree bindings documentation
In reply to Florian EckertQuoted 14 lines · Florian Eckert
Document the devicetree bindings for the adcxx.
Signed-off-by Florian Eckert <[email protected]>--- Documentation/devicetree/bindings/hwmon/adcxx.txt | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/adcxx.txtDocumentation/devicetree/bindings/hwmon/adcxx.txt new file +0
-0
Documentation/devicetree/bindings/hwmon/adcxx.txt line 1
Quoted 1 line
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +1
-0@@ -0,0 +1,24 @@ +adcxx properties
Needs a better description of what this h/w is.
ADCs go in iio/adc/
Documentation/devicetree/bindings/hwmon/adcxx.txt line 8
Quoted 7 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +7
-0+ +Required properties: +- compatible: Must be one of the following: + - "national,adcxx1s" for adcxx1s + - "national,adcxx2s" for adcxx2s + - "national,adcxx4s" for adcxx4s + - "national,adcxx8s" for adcxx8s
Don't use wildcards in compatible strings.
Documentation/devicetree/bindings/hwmon/adcxx.txt line 21
Quoted 13 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +13
-0+- reg: SPI address for chip + +Optional properties: + +- vref-supply + The external reference in microvolt for this device is set to this value. + If it does not exists the reference will be set to 3300000uV (3.3V). + +Example: + +adc@6 { + compatible = "national,adcxx2s"; + reg = <6 0>;
? SPI addresses are a single cell.
Quoted 6 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +3
-0+ spi-max-frequency = <1000000>; + vref-supply = <&vref>; +};Signature · 1 line
2.11.0
Guenter Roeck
maintainerRe: [PATCH v3 1/2] hwmon: (adcxx) add devictree bindings documentation
Quoted 19 lines · Rob Herring
Quoted 14 lines · Florian Eckert
Document the devicetree bindings for the adcxx.
Signed-off-by Florian Eckert <[email protected]>--- Documentation/devicetree/bindings/hwmon/adcxx.txt | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/adcxx.txtDocumentation/devicetree/bindings/hwmon/adcxx.txt new file +0
-0Documentation/devicetree/bindings/hwmon/adcxx.txt line 1
Quoted 1 line
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +1
-0@@ -0,0 +1,24 @@ +adcxx propertiesNeeds a better description of what this h/w is.
Quoted 2 lines
ADCs go in iio/adc/
FWIW, the hwmon driver for this chip series would be a perfect candidate for a conversion to an iio driver. The driver predates the existence of iio.
Florian, any interest doing that ? It is quite likely that the chip isn't used for hardware monitoring.
Quoted 10 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt line 8
Quoted 7 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +7
-0+ +Required properties: +- compatible: Must be one of the following: + - "national,adcxx1s" for adcxx1s + - "national,adcxx2s" for adcxx2s + - "national,adcxx4s" for adcxx4s + - "national,adcxx8s" for adcxx8sDon't use wildcards in compatible strings.
Should we list all of them ?
ADC121S021 ADC121S051 ADC121S101
ADC101S021 ADC101S051 ADC101S101
ADC081S021 ADC081S051 ADC081S101
ADC121S625 ADC121S655 ADC121S705
ADC122S021 ADC122S051 ADC122S101
ADC102S021 ADC102S051 ADC102S101
ADC082S021 ADC082S051 ADC082S101
ADC122S625 ADC122S655 ADC122S706
ADC124S021 ADC124S051 ADC124S101
ADC104S021 ADC104S051 ADC104S101
ADC084S021 ADC084S051 ADC084S101
ADC128S022 ADC128S052 ADC128S102
I hope I didn't miss any.
Guenter
Quoted 22 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt line 21
Quoted 13 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +13
-0+- reg: SPI address for chip + +Optional properties: + +- vref-supply + The external reference in microvolt for this device is set to this value. + If it does not exists the reference will be set to 3300000uV (3.3V). + +Example: + +adc@6 { + compatible = "national,adcxx2s"; + reg = <6 0>;? SPI addresses are a single cell.
Quoted 6 lines
Documentation/devicetree/bindings/hwmon/adcxx.txt new file +3
-0+ spi-max-frequency = <1000000>; + vref-supply = <&vref>; +};Signature · 1 line
2.11.0
Re: [PATCH v3 1/2] hwmon: (adcxx) add devictree bindings documentation
Hello Guenter,
Quoted 11 lines
Quoted 5 lines
Needs a better description of what this h/w is.
ADCs go in iio/adc/
FWIW, the hwmon driver for this chip series would be a perfect candidate for a conversion to an iio driver. The driver predates the existence of iio.
Florian, any interest doing that ? It is quite likely that the chip isn't used for hardware monitoring.
I will have a look on the next week about your suggestion to port this device to iio/adc.
- Florian