* [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-13 9:50 ` Jacopo Mondi 0 siblings, 0 replies; 26+ messages in thread From: Jacopo Mondi @ 2017-01-13 9:50 UTC (permalink / raw) To: wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, jic23-DgEjT+Ai2ygdnm+yROfE0A, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA Hello, sending out v4 splitting device tree bindings documentation and actual ADC driver. No changes in driver code since v3. Same question for iio maintainers here: I would like to have clarified the measure unit returned by read_raw(). Currently (value_raw * value_scale) return the ADC input value in mV. While testing the patch I've been questioned if that should not actually be in uV. This is easily achievable making _scale return a value in uV. I have found no mention of this in the ABI documentation as it speaks of generic voltage. Can we have a final word on this? Thanks Marek for having tested this. v1 -> v2: - incorporated pmeerw's review comments - retrieve vref from dts and use that to convert read_raw result to mV - add device tree bindings documentation v2 -> v3: - add _SCALE bit of read_raw function and change _RAW bit accordingly - call regulator_get_voltage when accessing the _SCALE part of read_raw and not during probe - add back remove function as regulator has to be disabled when detaching the module. Do not use devm_ version of iio_register/unregister functions anymore but do unregister in the remove. - remove mutex as access to SPI bus is protected by SPI core. Thanks marex v3 -> v4: - split device tree binding documentation and actual ADC driver - add "reg" to the list of required properties and use a better namimg for the adc device node in bindings documentation as suggested by Geert. Jacopo Mondi (2): iio: adc: Add Maxim MAX11100 driver dt-bindings: iio: document MAX11100 ADC .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ drivers/iio/adc/Kconfig | 9 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ 4 files changed, 216 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt create mode 100644 drivers/iio/adc/max11100.c -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-13 9:50 ` Jacopo Mondi 0 siblings, 0 replies; 26+ messages in thread From: Jacopo Mondi @ 2017-01-13 9:50 UTC (permalink / raw) To: wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc Hello, sending out v4 splitting device tree bindings documentation and actual ADC driver. No changes in driver code since v3. Same question for iio maintainers here: I would like to have clarified the measure unit returned by read_raw(). Currently (value_raw * value_scale) return the ADC input value in mV. While testing the patch I've been questioned if that should not actually be in uV. This is easily achievable making _scale return a value in uV. I have found no mention of this in the ABI documentation as it speaks of generic voltage. Can we have a final word on this? Thanks Marek for having tested this. v1 -> v2: - incorporated pmeerw's review comments - retrieve vref from dts and use that to convert read_raw result to mV - add device tree bindings documentation v2 -> v3: - add _SCALE bit of read_raw function and change _RAW bit accordingly - call regulator_get_voltage when accessing the _SCALE part of read_raw and not during probe - add back remove function as regulator has to be disabled when detaching the module. Do not use devm_ version of iio_register/unregister functions anymore but do unregister in the remove. - remove mutex as access to SPI bus is protected by SPI core. Thanks marex v3 -> v4: - split device tree binding documentation and actual ADC driver - add "reg" to the list of required properties and use a better namimg for the adc device node in bindings documentation as suggested by Geert. Jacopo Mondi (2): iio: adc: Add Maxim MAX11100 driver dt-bindings: iio: document MAX11100 ADC .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ drivers/iio/adc/Kconfig | 9 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ 4 files changed, 216 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt create mode 100644 drivers/iio/adc/max11100.c -- 2.7.4 ^ permalink raw reply [flat|nested] 26+ messages in thread
[parent not found: <1484301038-16386-1-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>]
* [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver 2017-01-13 9:50 ` Jacopo Mondi @ 2017-01-13 9:50 ` Jacopo Mondi -1 siblings, 0 replies; 26+ messages in thread From: Jacopo Mondi @ 2017-01-13 9:50 UTC (permalink / raw) To: wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, jic23-DgEjT+Ai2ygdnm+yROfE0A, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA From: Jacopo Mondi <jacopo-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> Add iio driver for Maxim MAX11100 single-channel ADC. Signed-off-by: Jacopo Mondi <jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> Tested-by: Marek Vasut <marek.vasut-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> --- drivers/iio/adc/Kconfig | 9 +++ drivers/iio/adc/Makefile | 1 + drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 drivers/iio/adc/max11100.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 38bc319..c32bc7a 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -307,6 +307,15 @@ config MAX1027 To compile this driver as a module, choose M here: the module will be called max1027. +config MAX11100 + tristate "Maxim max11100 ADC driver" + depends on SPI_MASTER + help + Say yes here to build support for Maxim max11100 SPI ADC + + To compile this driver as a module, choose M here: the module will be + called max11100. + config MAX1363 tristate "Maxim max1363 ADC driver" depends on I2C diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index d36c4be..5684369 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o obj-$(CONFIG_LTC2485) += ltc2485.o obj-$(CONFIG_MAX1027) += max1027.o +obj-$(CONFIG_MAX11100) += max11100.o obj-$(CONFIG_MAX1363) += max1363.o obj-$(CONFIG_MCP320X) += mcp320x.o obj-$(CONFIG_MCP3422) += mcp3422.o diff --git a/drivers/iio/adc/max11100.c b/drivers/iio/adc/max11100.c new file mode 100644 index 0000000..78e2a45 --- /dev/null +++ b/drivers/iio/adc/max11100.c @@ -0,0 +1,187 @@ +/* + * iio/adc/max11100.c + * Maxim max11100 ADC Driver with IIO interface + * + * Copyright (C) 2016 Renesas Electronics Corporation + * Copyright (C) 2016 Jacopo Mondi + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/delay.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/regulator/consumer.h> +#include <linux/spi/spi.h> + +#include <linux/iio/iio.h> +#include <linux/iio/buffer.h> +#include <linux/iio/driver.h> + +/* + * LSB is the ADC single digital step + * 1 LSB = (vref_mv / 2 ^ 16) + * + * LSB is used to calculate analog voltage value + * from the number of ADC steps count + * + * Ain = (count * LSB) + */ +#define MAX11100_LSB_DIV (1 << 16) + +struct max11100_state { + const struct max11100_chip_desc *desc; + struct regulator *vref_reg; + struct spi_device *spi; +}; + +static struct iio_chan_spec max11100_channels[] = { + { /* [0] */ + .type = IIO_VOLTAGE, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE), + }, +}; + +static struct max11100_chip_desc { + unsigned int num_chan; + const struct iio_chan_spec *channels; +} max11100_desc = { + .num_chan = ARRAY_SIZE(max11100_channels), + .channels = max11100_channels, +}; + +static int max11100_read_single(struct iio_dev *indio_dev, int *val) +{ + int ret; + struct max11100_state *state = iio_priv(indio_dev); + uint8_t buffer[3]; + + ret = spi_read(state->spi, buffer, sizeof(buffer)); + if (ret) { + dev_err(&indio_dev->dev, "SPI transfer failed\n"); + return ret; + } + + /* the first 8 bits sent out from ADC must be 0s */ + if (buffer[0]) { + dev_err(&indio_dev->dev, "Invalid value: buffer[0] != 0\n"); + return -EINVAL; + } + + *val = (buffer[1] << 8) | buffer[2]; + + return 0; +} + +static int max11100_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long info) +{ + int ret, vref_uv; + struct max11100_state *state = iio_priv(indio_dev); + + switch (info) { + case IIO_CHAN_INFO_RAW: + ret = max11100_read_single(indio_dev, val); + if (ret) + return ret; + + return IIO_VAL_INT; + + case IIO_CHAN_INFO_SCALE: + vref_uv = regulator_get_voltage(state->vref_reg); + if (vref_uv < 0) + /* dummy regulator "get_voltage" returns -EINVAL */ + return -EINVAL; + + *val = vref_uv / 1000; + *val2 = MAX11100_LSB_DIV; + return IIO_VAL_FRACTIONAL; + } + + return -EINVAL; +} + +static const struct iio_info max11100_info = { + .driver_module = THIS_MODULE, + .read_raw = max11100_read_raw, +}; + +static int max11100_probe(struct spi_device *spi) +{ + int ret; + struct iio_dev *indio_dev; + struct max11100_state *state; + + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*state)); + if (!indio_dev) + return -ENOMEM; + + spi_set_drvdata(spi, indio_dev); + + state = iio_priv(indio_dev); + state->spi = spi; + state->desc = &max11100_desc; + + indio_dev->dev.parent = &spi->dev; + indio_dev->dev.of_node = spi->dev.of_node; + indio_dev->info = &max11100_info; + indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->channels = state->desc->channels; + indio_dev->num_channels = state->desc->num_chan; + + state->vref_reg = devm_regulator_get(&spi->dev, "vref"); + if (IS_ERR(state->vref_reg)) + return PTR_ERR(state->vref_reg); + + ret = regulator_enable(state->vref_reg); + if (ret) + return ret; + + ret = iio_device_register(indio_dev); + if (ret) + goto disable_regulator; + + return 0; + +disable_regulator: + regulator_disable(state->vref_reg); + + return ret; +} + +static int max11100_remove(struct spi_device *spi) +{ + struct iio_dev *indio_dev = spi_get_drvdata(spi); + struct max11100_state *state = iio_priv(indio_dev); + + regulator_disable(state->vref_reg); + + iio_device_unregister(indio_dev); + + return 0; +} + +static const struct of_device_id max11100_ids[] = { + {.compatible = "maxim,max11100"}, + { }, +}; +MODULE_DEVICE_TABLE(of, max11100_ids); + +static struct spi_driver max11100_driver = { + .driver = { + .name = "max11100", + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(max11100_ids), + }, + .probe = max11100_probe, + .remove = max11100_remove, +}; + +module_spi_driver(max11100_driver); + +MODULE_AUTHOR("Jacopo Mondi <jacopo-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>"); +MODULE_DESCRIPTION("Maxim max11100 ADC Driver"); +MODULE_LICENSE("GPL v2"); -- 2.7.4 ^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-13 9:50 ` Jacopo Mondi 0 siblings, 0 replies; 26+ messages in thread From: Jacopo Mondi @ 2017-01-13 9:50 UTC (permalink / raw) To: wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc From: Jacopo Mondi <jacopo@jmondi.org> Add iio driver for Maxim MAX11100 single-channel ADC. Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Tested-by: Marek Vasut <marek.vasut@gmail.com> --- drivers/iio/adc/Kconfig | 9 +++ drivers/iio/adc/Makefile | 1 + drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+) create mode 100644 drivers/iio/adc/max11100.c diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig index 38bc319..c32bc7a 100644 --- a/drivers/iio/adc/Kconfig +++ b/drivers/iio/adc/Kconfig @@ -307,6 +307,15 @@ config MAX1027 To compile this driver as a module, choose M here: the module will be called max1027. +config MAX11100 + tristate "Maxim max11100 ADC driver" + depends on SPI_MASTER + help + Say yes here to build support for Maxim max11100 SPI ADC + + To compile this driver as a module, choose M here: the module will be + called max11100. + config MAX1363 tristate "Maxim max1363 ADC driver" depends on I2C diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile index d36c4be..5684369 100644 --- a/drivers/iio/adc/Makefile +++ b/drivers/iio/adc/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o obj-$(CONFIG_LTC2485) += ltc2485.o obj-$(CONFIG_MAX1027) += max1027.o +obj-$(CONFIG_MAX11100) += max11100.o obj-$(CONFIG_MAX1363) += max1363.o obj-$(CONFIG_MCP320X) += mcp320x.o obj-$(CONFIG_MCP3422) += mcp3422.o diff --git a/drivers/iio/adc/max11100.c b/drivers/iio/adc/max11100.c new file mode 100644 index 0000000..78e2a45 --- /dev/null +++ b/drivers/iio/adc/max11100.c @@ -0,0 +1,187 @@ +/* + * iio/adc/max11100.c + * Maxim max11100 ADC Driver with IIO interface + * + * Copyright (C) 2016 Renesas Electronics Corporation + * Copyright (C) 2016 Jacopo Mondi + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/delay.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/regulator/consumer.h> +#include <linux/spi/spi.h> + +#include <linux/iio/iio.h> +#include <linux/iio/buffer.h> +#include <linux/iio/driver.h> + +/* + * LSB is the ADC single digital step + * 1 LSB = (vref_mv / 2 ^ 16) + * + * LSB is used to calculate analog voltage value + * from the number of ADC steps count + * + * Ain = (count * LSB) + */ +#define MAX11100_LSB_DIV (1 << 16) + +struct max11100_state { + const struct max11100_chip_desc *desc; + struct regulator *vref_reg; + struct spi_device *spi; +}; + +static struct iio_chan_spec max11100_channels[] = { + { /* [0] */ + .type = IIO_VOLTAGE, + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE), + }, +}; + +static struct max11100_chip_desc { + unsigned int num_chan; + const struct iio_chan_spec *channels; +} max11100_desc = { + .num_chan = ARRAY_SIZE(max11100_channels), + .channels = max11100_channels, +}; + +static int max11100_read_single(struct iio_dev *indio_dev, int *val) +{ + int ret; + struct max11100_state *state = iio_priv(indio_dev); + uint8_t buffer[3]; + + ret = spi_read(state->spi, buffer, sizeof(buffer)); + if (ret) { + dev_err(&indio_dev->dev, "SPI transfer failed\n"); + return ret; + } + + /* the first 8 bits sent out from ADC must be 0s */ + if (buffer[0]) { + dev_err(&indio_dev->dev, "Invalid value: buffer[0] != 0\n"); + return -EINVAL; + } + + *val = (buffer[1] << 8) | buffer[2]; + + return 0; +} + +static int max11100_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long info) +{ + int ret, vref_uv; + struct max11100_state *state = iio_priv(indio_dev); + + switch (info) { + case IIO_CHAN_INFO_RAW: + ret = max11100_read_single(indio_dev, val); + if (ret) + return ret; + + return IIO_VAL_INT; + + case IIO_CHAN_INFO_SCALE: + vref_uv = regulator_get_voltage(state->vref_reg); + if (vref_uv < 0) + /* dummy regulator "get_voltage" returns -EINVAL */ + return -EINVAL; + + *val = vref_uv / 1000; + *val2 = MAX11100_LSB_DIV; + return IIO_VAL_FRACTIONAL; + } + + return -EINVAL; +} + +static const struct iio_info max11100_info = { + .driver_module = THIS_MODULE, + .read_raw = max11100_read_raw, +}; + +static int max11100_probe(struct spi_device *spi) +{ + int ret; + struct iio_dev *indio_dev; + struct max11100_state *state; + + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*state)); + if (!indio_dev) + return -ENOMEM; + + spi_set_drvdata(spi, indio_dev); + + state = iio_priv(indio_dev); + state->spi = spi; + state->desc = &max11100_desc; + + indio_dev->dev.parent = &spi->dev; + indio_dev->dev.of_node = spi->dev.of_node; + indio_dev->info = &max11100_info; + indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->channels = state->desc->channels; + indio_dev->num_channels = state->desc->num_chan; + + state->vref_reg = devm_regulator_get(&spi->dev, "vref"); + if (IS_ERR(state->vref_reg)) + return PTR_ERR(state->vref_reg); + + ret = regulator_enable(state->vref_reg); + if (ret) + return ret; + + ret = iio_device_register(indio_dev); + if (ret) + goto disable_regulator; + + return 0; + +disable_regulator: + regulator_disable(state->vref_reg); + + return ret; +} + +static int max11100_remove(struct spi_device *spi) +{ + struct iio_dev *indio_dev = spi_get_drvdata(spi); + struct max11100_state *state = iio_priv(indio_dev); + + regulator_disable(state->vref_reg); + + iio_device_unregister(indio_dev); + + return 0; +} + +static const struct of_device_id max11100_ids[] = { + {.compatible = "maxim,max11100"}, + { }, +}; +MODULE_DEVICE_TABLE(of, max11100_ids); + +static struct spi_driver max11100_driver = { + .driver = { + .name = "max11100", + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(max11100_ids), + }, + .probe = max11100_probe, + .remove = max11100_remove, +}; + +module_spi_driver(max11100_driver); + +MODULE_AUTHOR("Jacopo Mondi <jacopo@jmondi.org>"); +MODULE_DESCRIPTION("Maxim max11100 ADC Driver"); +MODULE_LICENSE("GPL v2"); -- 2.7.4 ^ permalink raw reply related [flat|nested] 26+ messages in thread
[parent not found: <1484301038-16386-2-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver 2017-01-13 9:50 ` Jacopo Mondi @ 2017-01-14 10:22 ` Jonathan Cameron -1 siblings, 0 replies; 26+ messages in thread From: Jonathan Cameron @ 2017-01-14 10:22 UTC (permalink / raw) To: Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA On 13/01/17 09:50, Jacopo Mondi wrote: > From: Jacopo Mondi <jacopo-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> > > Add iio driver for Maxim MAX11100 single-channel ADC. > > Signed-off-by: Jacopo Mondi <jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> > Tested-by: Marek Vasut <marek.vasut-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > Small issue with DMA using SPI controllers and the location of buffer in your read. Otherwise looks good to me. Jonathan > --- > drivers/iio/adc/Kconfig | 9 +++ > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 197 insertions(+) > create mode 100644 drivers/iio/adc/max11100.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 38bc319..c32bc7a 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -307,6 +307,15 @@ config MAX1027 > To compile this driver as a module, choose M here: the module will be > called max1027. > > +config MAX11100 > + tristate "Maxim max11100 ADC driver" > + depends on SPI_MASTER > + help > + Say yes here to build support for Maxim max11100 SPI ADC > + > + To compile this driver as a module, choose M here: the module will be > + called max11100. > + > config MAX1363 > tristate "Maxim max1363 ADC driver" > depends on I2C > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index d36c4be..5684369 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -31,6 +31,7 @@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o > obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o > obj-$(CONFIG_LTC2485) += ltc2485.o > obj-$(CONFIG_MAX1027) += max1027.o > +obj-$(CONFIG_MAX11100) += max11100.o > obj-$(CONFIG_MAX1363) += max1363.o > obj-$(CONFIG_MCP320X) += mcp320x.o > obj-$(CONFIG_MCP3422) += mcp3422.o > diff --git a/drivers/iio/adc/max11100.c b/drivers/iio/adc/max11100.c > new file mode 100644 > index 0000000..78e2a45 > --- /dev/null > +++ b/drivers/iio/adc/max11100.c > @@ -0,0 +1,187 @@ > +/* > + * iio/adc/max11100.c > + * Maxim max11100 ADC Driver with IIO interface > + * > + * Copyright (C) 2016 Renesas Electronics Corporation > + * Copyright (C) 2016 Jacopo Mondi > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > +#include <linux/delay.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/regulator/consumer.h> > +#include <linux/spi/spi.h> > + > +#include <linux/iio/iio.h> > +#include <linux/iio/buffer.h> > +#include <linux/iio/driver.h> > + > +/* > + * LSB is the ADC single digital step > + * 1 LSB = (vref_mv / 2 ^ 16) > + * > + * LSB is used to calculate analog voltage value > + * from the number of ADC steps count > + * > + * Ain = (count * LSB) > + */ > +#define MAX11100_LSB_DIV (1 << 16) > + > +struct max11100_state { > + const struct max11100_chip_desc *desc; > + struct regulator *vref_reg; > + struct spi_device *spi; > +}; > + > +static struct iio_chan_spec max11100_channels[] = { > + { /* [0] */ > + .type = IIO_VOLTAGE, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | > + BIT(IIO_CHAN_INFO_SCALE), > + }, > +}; > + > +static struct max11100_chip_desc { > + unsigned int num_chan; > + const struct iio_chan_spec *channels; > +} max11100_desc = { > + .num_chan = ARRAY_SIZE(max11100_channels), > + .channels = max11100_channels, > +}; > + > +static int max11100_read_single(struct iio_dev *indio_dev, int *val) > +{ > + int ret; > + struct max11100_state *state = iio_priv(indio_dev); > + uint8_t buffer[3]; > + > + ret = spi_read(state->spi, buffer, sizeof(buffer)); Buffer needs to be __cacheline_aligned to safely use spi_read on spi controllers that use DMA. Two easy ways of doing this, either allocate buffer using kmalloc or take advantage of the fact that spi_priv() is cache line aligned and stick you buffer at the end of your private structure and mark it __cacheline_aligned to ensure it also appropriately aligned in it's own cacheline. > + if (ret) { > + dev_err(&indio_dev->dev, "SPI transfer failed\n"); > + return ret; > + } > + > + /* the first 8 bits sent out from ADC must be 0s */ > + if (buffer[0]) { > + dev_err(&indio_dev->dev, "Invalid value: buffer[0] != 0\n"); > + return -EINVAL; > + } > + > + *val = (buffer[1] << 8) | buffer[2]; > + > + return 0; > +} > + > +static int max11100_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, > + int *val, int *val2, long info) > +{ > + int ret, vref_uv; > + struct max11100_state *state = iio_priv(indio_dev); > + > + switch (info) { > + case IIO_CHAN_INFO_RAW: > + ret = max11100_read_single(indio_dev, val); > + if (ret) > + return ret; > + > + return IIO_VAL_INT; > + > + case IIO_CHAN_INFO_SCALE: > + vref_uv = regulator_get_voltage(state->vref_reg); > + if (vref_uv < 0) > + /* dummy regulator "get_voltage" returns -EINVAL */ > + return -EINVAL; > + > + *val = vref_uv / 1000; > + *val2 = MAX11100_LSB_DIV; > + return IIO_VAL_FRACTIONAL; > + } > + > + return -EINVAL; > +} > + > +static const struct iio_info max11100_info = { > + .driver_module = THIS_MODULE, > + .read_raw = max11100_read_raw, > +}; > + > +static int max11100_probe(struct spi_device *spi) > +{ > + int ret; > + struct iio_dev *indio_dev; > + struct max11100_state *state; > + > + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*state)); > + if (!indio_dev) > + return -ENOMEM; > + > + spi_set_drvdata(spi, indio_dev); > + > + state = iio_priv(indio_dev); > + state->spi = spi; > + state->desc = &max11100_desc; > + > + indio_dev->dev.parent = &spi->dev; > + indio_dev->dev.of_node = spi->dev.of_node; > + indio_dev->info = &max11100_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + indio_dev->channels = state->desc->channels; > + indio_dev->num_channels = state->desc->num_chan; > + > + state->vref_reg = devm_regulator_get(&spi->dev, "vref"); > + if (IS_ERR(state->vref_reg)) > + return PTR_ERR(state->vref_reg); > + > + ret = regulator_enable(state->vref_reg); > + if (ret) > + return ret; > + > + ret = iio_device_register(indio_dev); > + if (ret) > + goto disable_regulator; > + > + return 0; > + > +disable_regulator: > + regulator_disable(state->vref_reg); > + > + return ret; > +} > + > +static int max11100_remove(struct spi_device *spi) > +{ > + struct iio_dev *indio_dev = spi_get_drvdata(spi); > + struct max11100_state *state = iio_priv(indio_dev); > + > + regulator_disable(state->vref_reg); > + > + iio_device_unregister(indio_dev); > + > + return 0; > +} > + > +static const struct of_device_id max11100_ids[] = { > + {.compatible = "maxim,max11100"}, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, max11100_ids); > + > +static struct spi_driver max11100_driver = { > + .driver = { > + .name = "max11100", > + .owner = THIS_MODULE, > + .of_match_table = of_match_ptr(max11100_ids), > + }, > + .probe = max11100_probe, > + .remove = max11100_remove, > +}; > + > +module_spi_driver(max11100_driver); > + > +MODULE_AUTHOR("Jacopo Mondi <jacopo-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>"); > +MODULE_DESCRIPTION("Maxim max11100 ADC Driver"); > +MODULE_LICENSE("GPL v2"); > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-14 10:22 ` Jonathan Cameron 0 siblings, 0 replies; 26+ messages in thread From: Jonathan Cameron @ 2017-01-14 10:22 UTC (permalink / raw) To: Jacopo Mondi, wsa+renesas, magnus.damm, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc On 13/01/17 09:50, Jacopo Mondi wrote: > From: Jacopo Mondi <jacopo@jmondi.org> > > Add iio driver for Maxim MAX11100 single-channel ADC. > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> > Tested-by: Marek Vasut <marek.vasut@gmail.com> > Small issue with DMA using SPI controllers and the location of buffer in your read. Otherwise looks good to me. Jonathan > --- > drivers/iio/adc/Kconfig | 9 +++ > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 197 insertions(+) > create mode 100644 drivers/iio/adc/max11100.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 38bc319..c32bc7a 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -307,6 +307,15 @@ config MAX1027 > To compile this driver as a module, choose M here: the module will be > called max1027. > > +config MAX11100 > + tristate "Maxim max11100 ADC driver" > + depends on SPI_MASTER > + help > + Say yes here to build support for Maxim max11100 SPI ADC > + > + To compile this driver as a module, choose M here: the module will be > + called max11100. > + > config MAX1363 > tristate "Maxim max1363 ADC driver" > depends on I2C > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index d36c4be..5684369 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -31,6 +31,7 @@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o > obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o > obj-$(CONFIG_LTC2485) += ltc2485.o > obj-$(CONFIG_MAX1027) += max1027.o > +obj-$(CONFIG_MAX11100) += max11100.o > obj-$(CONFIG_MAX1363) += max1363.o > obj-$(CONFIG_MCP320X) += mcp320x.o > obj-$(CONFIG_MCP3422) += mcp3422.o > diff --git a/drivers/iio/adc/max11100.c b/drivers/iio/adc/max11100.c > new file mode 100644 > index 0000000..78e2a45 > --- /dev/null > +++ b/drivers/iio/adc/max11100.c > @@ -0,0 +1,187 @@ > +/* > + * iio/adc/max11100.c > + * Maxim max11100 ADC Driver with IIO interface > + * > + * Copyright (C) 2016 Renesas Electronics Corporation > + * Copyright (C) 2016 Jacopo Mondi > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > +#include <linux/delay.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/regulator/consumer.h> > +#include <linux/spi/spi.h> > + > +#include <linux/iio/iio.h> > +#include <linux/iio/buffer.h> > +#include <linux/iio/driver.h> > + > +/* > + * LSB is the ADC single digital step > + * 1 LSB = (vref_mv / 2 ^ 16) > + * > + * LSB is used to calculate analog voltage value > + * from the number of ADC steps count > + * > + * Ain = (count * LSB) > + */ > +#define MAX11100_LSB_DIV (1 << 16) > + > +struct max11100_state { > + const struct max11100_chip_desc *desc; > + struct regulator *vref_reg; > + struct spi_device *spi; > +}; > + > +static struct iio_chan_spec max11100_channels[] = { > + { /* [0] */ > + .type = IIO_VOLTAGE, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | > + BIT(IIO_CHAN_INFO_SCALE), > + }, > +}; > + > +static struct max11100_chip_desc { > + unsigned int num_chan; > + const struct iio_chan_spec *channels; > +} max11100_desc = { > + .num_chan = ARRAY_SIZE(max11100_channels), > + .channels = max11100_channels, > +}; > + > +static int max11100_read_single(struct iio_dev *indio_dev, int *val) > +{ > + int ret; > + struct max11100_state *state = iio_priv(indio_dev); > + uint8_t buffer[3]; > + > + ret = spi_read(state->spi, buffer, sizeof(buffer)); Buffer needs to be __cacheline_aligned to safely use spi_read on spi controllers that use DMA. Two easy ways of doing this, either allocate buffer using kmalloc or take advantage of the fact that spi_priv() is cache line aligned and stick you buffer at the end of your private structure and mark it __cacheline_aligned to ensure it also appropriately aligned in it's own cacheline. > + if (ret) { > + dev_err(&indio_dev->dev, "SPI transfer failed\n"); > + return ret; > + } > + > + /* the first 8 bits sent out from ADC must be 0s */ > + if (buffer[0]) { > + dev_err(&indio_dev->dev, "Invalid value: buffer[0] != 0\n"); > + return -EINVAL; > + } > + > + *val = (buffer[1] << 8) | buffer[2]; > + > + return 0; > +} > + > +static int max11100_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, > + int *val, int *val2, long info) > +{ > + int ret, vref_uv; > + struct max11100_state *state = iio_priv(indio_dev); > + > + switch (info) { > + case IIO_CHAN_INFO_RAW: > + ret = max11100_read_single(indio_dev, val); > + if (ret) > + return ret; > + > + return IIO_VAL_INT; > + > + case IIO_CHAN_INFO_SCALE: > + vref_uv = regulator_get_voltage(state->vref_reg); > + if (vref_uv < 0) > + /* dummy regulator "get_voltage" returns -EINVAL */ > + return -EINVAL; > + > + *val = vref_uv / 1000; > + *val2 = MAX11100_LSB_DIV; > + return IIO_VAL_FRACTIONAL; > + } > + > + return -EINVAL; > +} > + > +static const struct iio_info max11100_info = { > + .driver_module = THIS_MODULE, > + .read_raw = max11100_read_raw, > +}; > + > +static int max11100_probe(struct spi_device *spi) > +{ > + int ret; > + struct iio_dev *indio_dev; > + struct max11100_state *state; > + > + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*state)); > + if (!indio_dev) > + return -ENOMEM; > + > + spi_set_drvdata(spi, indio_dev); > + > + state = iio_priv(indio_dev); > + state->spi = spi; > + state->desc = &max11100_desc; > + > + indio_dev->dev.parent = &spi->dev; > + indio_dev->dev.of_node = spi->dev.of_node; > + indio_dev->info = &max11100_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + indio_dev->channels = state->desc->channels; > + indio_dev->num_channels = state->desc->num_chan; > + > + state->vref_reg = devm_regulator_get(&spi->dev, "vref"); > + if (IS_ERR(state->vref_reg)) > + return PTR_ERR(state->vref_reg); > + > + ret = regulator_enable(state->vref_reg); > + if (ret) > + return ret; > + > + ret = iio_device_register(indio_dev); > + if (ret) > + goto disable_regulator; > + > + return 0; > + > +disable_regulator: > + regulator_disable(state->vref_reg); > + > + return ret; > +} > + > +static int max11100_remove(struct spi_device *spi) > +{ > + struct iio_dev *indio_dev = spi_get_drvdata(spi); > + struct max11100_state *state = iio_priv(indio_dev); > + > + regulator_disable(state->vref_reg); > + > + iio_device_unregister(indio_dev); > + > + return 0; > +} > + > +static const struct of_device_id max11100_ids[] = { > + {.compatible = "maxim,max11100"}, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, max11100_ids); > + > +static struct spi_driver max11100_driver = { > + .driver = { > + .name = "max11100", > + .owner = THIS_MODULE, > + .of_match_table = of_match_ptr(max11100_ids), > + }, > + .probe = max11100_probe, > + .remove = max11100_remove, > +}; > + > +module_spi_driver(max11100_driver); > + > +MODULE_AUTHOR("Jacopo Mondi <jacopo@jmondi.org>"); > +MODULE_DESCRIPTION("Maxim max11100 ADC Driver"); > +MODULE_LICENSE("GPL v2"); > ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver 2017-01-13 9:50 ` Jacopo Mondi @ 2017-01-15 12:18 ` Lars-Peter Clausen -1 siblings, 0 replies; 26+ messages in thread From: Lars-Peter Clausen @ 2017-01-15 12:18 UTC (permalink / raw) To: Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, jic23-DgEjT+Ai2ygdnm+yROfE0A, knaack.h-Mmb7MZpHnFY, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA On 01/13/2017 10:50 AM, Jacopo Mondi wrote: > From: Jacopo Mondi <jacopo-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> > > Add iio driver for Maxim MAX11100 single-channel ADC. > > Signed-off-by: Jacopo Mondi <jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> > Tested-by: Marek Vasut <marek.vasut-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > > --- > drivers/iio/adc/Kconfig | 9 +++ > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 197 insertions(+) > create mode 100644 drivers/iio/adc/max11100.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 38bc319..c32bc7a 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -307,6 +307,15 @@ config MAX1027 > To compile this driver as a module, choose M here: the module will be > called max1027. > > +config MAX11100 > + tristate "Maxim max11100 ADC driver" > + depends on SPI_MASTER > + help > + Say yes here to build support for Maxim max11100 SPI ADC > + > + To compile this driver as a module, choose M here: the module will be > + called max11100. > + > config MAX1363 > tristate "Maxim max1363 ADC driver" > depends on I2C > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index d36c4be..5684369 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -31,6 +31,7 @@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o > obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o > obj-$(CONFIG_LTC2485) += ltc2485.o > obj-$(CONFIG_MAX1027) += max1027.o > +obj-$(CONFIG_MAX11100) += max11100.o > obj-$(CONFIG_MAX1363) += max1363.o > obj-$(CONFIG_MCP320X) += mcp320x.o > obj-$(CONFIG_MCP3422) += mcp3422.o > diff --git a/drivers/iio/adc/max11100.c b/drivers/iio/adc/max11100.c > new file mode 100644 > index 0000000..78e2a45 > --- /dev/null > +++ b/drivers/iio/adc/max11100.c > @@ -0,0 +1,187 @@ > +/* > + * iio/adc/max11100.c > + * Maxim max11100 ADC Driver with IIO interface > + * > + * Copyright (C) 2016 Renesas Electronics Corporation > + * Copyright (C) 2016 Jacopo Mondi > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > +#include <linux/delay.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/regulator/consumer.h> > +#include <linux/spi/spi.h> > + > +#include <linux/iio/iio.h> > +#include <linux/iio/buffer.h> > +#include <linux/iio/driver.h> > + > +/* > + * LSB is the ADC single digital step > + * 1 LSB = (vref_mv / 2 ^ 16) > + * > + * LSB is used to calculate analog voltage value > + * from the number of ADC steps count > + * > + * Ain = (count * LSB) > + */ > +#define MAX11100_LSB_DIV (1 << 16) > + > +struct max11100_state { > + const struct max11100_chip_desc *desc; > + struct regulator *vref_reg; > + struct spi_device *spi; > +}; > + > +static struct iio_chan_spec max11100_channels[] = { > + { /* [0] */ > + .type = IIO_VOLTAGE, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | > + BIT(IIO_CHAN_INFO_SCALE), > + }, > +}; > + > +static struct max11100_chip_desc { > + unsigned int num_chan; > + const struct iio_chan_spec *channels; > +} max11100_desc = { > + .num_chan = ARRAY_SIZE(max11100_channels), > + .channels = max11100_channels, > +}; > + > +static int max11100_read_single(struct iio_dev *indio_dev, int *val) > +{ > + int ret; > + struct max11100_state *state = iio_priv(indio_dev); > + uint8_t buffer[3]; > + > + ret = spi_read(state->spi, buffer, sizeof(buffer)); > + if (ret) { > + dev_err(&indio_dev->dev, "SPI transfer failed\n"); > + return ret; > + } > + > + /* the first 8 bits sent out from ADC must be 0s */ > + if (buffer[0]) { > + dev_err(&indio_dev->dev, "Invalid value: buffer[0] != 0\n"); > + return -EINVAL; > + } > + > + *val = (buffer[1] << 8) | buffer[2]; > + > + return 0; > +} > + > +static int max11100_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, > + int *val, int *val2, long info) > +{ > + int ret, vref_uv; > + struct max11100_state *state = iio_priv(indio_dev); > + > + switch (info) { > + case IIO_CHAN_INFO_RAW: > + ret = max11100_read_single(indio_dev, val); > + if (ret) > + return ret; > + > + return IIO_VAL_INT; > + > + case IIO_CHAN_INFO_SCALE: > + vref_uv = regulator_get_voltage(state->vref_reg); > + if (vref_uv < 0) > + /* dummy regulator "get_voltage" returns -EINVAL */ > + return -EINVAL; > + > + *val = vref_uv / 1000; > + *val2 = MAX11100_LSB_DIV; > + return IIO_VAL_FRACTIONAL; > + } > + > + return -EINVAL; > +} > + > +static const struct iio_info max11100_info = { > + .driver_module = THIS_MODULE, > + .read_raw = max11100_read_raw, > +}; > + > +static int max11100_probe(struct spi_device *spi) > +{ > + int ret; > + struct iio_dev *indio_dev; > + struct max11100_state *state; > + > + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*state)); > + if (!indio_dev) > + return -ENOMEM; > + > + spi_set_drvdata(spi, indio_dev); > + > + state = iio_priv(indio_dev); > + state->spi = spi; > + state->desc = &max11100_desc; > + > + indio_dev->dev.parent = &spi->dev; > + indio_dev->dev.of_node = spi->dev.of_node; > + indio_dev->info = &max11100_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + indio_dev->channels = state->desc->channels; > + indio_dev->num_channels = state->desc->num_chan; Consider setting indio_dev->name= "max11100"; so userspace can identify the type of the device. ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-15 12:18 ` Lars-Peter Clausen 0 siblings, 0 replies; 26+ messages in thread From: Lars-Peter Clausen @ 2017-01-15 12:18 UTC (permalink / raw) To: Jacopo Mondi, wsa+renesas, magnus.damm, jic23, knaack.h, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc On 01/13/2017 10:50 AM, Jacopo Mondi wrote: > From: Jacopo Mondi <jacopo@jmondi.org> > > Add iio driver for Maxim MAX11100 single-channel ADC. > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> > Tested-by: Marek Vasut <marek.vasut@gmail.com> > > --- > drivers/iio/adc/Kconfig | 9 +++ > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 197 insertions(+) > create mode 100644 drivers/iio/adc/max11100.c > > diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig > index 38bc319..c32bc7a 100644 > --- a/drivers/iio/adc/Kconfig > +++ b/drivers/iio/adc/Kconfig > @@ -307,6 +307,15 @@ config MAX1027 > To compile this driver as a module, choose M here: the module will be > called max1027. > > +config MAX11100 > + tristate "Maxim max11100 ADC driver" > + depends on SPI_MASTER > + help > + Say yes here to build support for Maxim max11100 SPI ADC > + > + To compile this driver as a module, choose M here: the module will be > + called max11100. > + > config MAX1363 > tristate "Maxim max1363 ADC driver" > depends on I2C > diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile > index d36c4be..5684369 100644 > --- a/drivers/iio/adc/Makefile > +++ b/drivers/iio/adc/Makefile > @@ -31,6 +31,7 @@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o > obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o > obj-$(CONFIG_LTC2485) += ltc2485.o > obj-$(CONFIG_MAX1027) += max1027.o > +obj-$(CONFIG_MAX11100) += max11100.o > obj-$(CONFIG_MAX1363) += max1363.o > obj-$(CONFIG_MCP320X) += mcp320x.o > obj-$(CONFIG_MCP3422) += mcp3422.o > diff --git a/drivers/iio/adc/max11100.c b/drivers/iio/adc/max11100.c > new file mode 100644 > index 0000000..78e2a45 > --- /dev/null > +++ b/drivers/iio/adc/max11100.c > @@ -0,0 +1,187 @@ > +/* > + * iio/adc/max11100.c > + * Maxim max11100 ADC Driver with IIO interface > + * > + * Copyright (C) 2016 Renesas Electronics Corporation > + * Copyright (C) 2016 Jacopo Mondi > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > +#include <linux/delay.h> > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/regulator/consumer.h> > +#include <linux/spi/spi.h> > + > +#include <linux/iio/iio.h> > +#include <linux/iio/buffer.h> > +#include <linux/iio/driver.h> > + > +/* > + * LSB is the ADC single digital step > + * 1 LSB = (vref_mv / 2 ^ 16) > + * > + * LSB is used to calculate analog voltage value > + * from the number of ADC steps count > + * > + * Ain = (count * LSB) > + */ > +#define MAX11100_LSB_DIV (1 << 16) > + > +struct max11100_state { > + const struct max11100_chip_desc *desc; > + struct regulator *vref_reg; > + struct spi_device *spi; > +}; > + > +static struct iio_chan_spec max11100_channels[] = { > + { /* [0] */ > + .type = IIO_VOLTAGE, > + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | > + BIT(IIO_CHAN_INFO_SCALE), > + }, > +}; > + > +static struct max11100_chip_desc { > + unsigned int num_chan; > + const struct iio_chan_spec *channels; > +} max11100_desc = { > + .num_chan = ARRAY_SIZE(max11100_channels), > + .channels = max11100_channels, > +}; > + > +static int max11100_read_single(struct iio_dev *indio_dev, int *val) > +{ > + int ret; > + struct max11100_state *state = iio_priv(indio_dev); > + uint8_t buffer[3]; > + > + ret = spi_read(state->spi, buffer, sizeof(buffer)); > + if (ret) { > + dev_err(&indio_dev->dev, "SPI transfer failed\n"); > + return ret; > + } > + > + /* the first 8 bits sent out from ADC must be 0s */ > + if (buffer[0]) { > + dev_err(&indio_dev->dev, "Invalid value: buffer[0] != 0\n"); > + return -EINVAL; > + } > + > + *val = (buffer[1] << 8) | buffer[2]; > + > + return 0; > +} > + > +static int max11100_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, > + int *val, int *val2, long info) > +{ > + int ret, vref_uv; > + struct max11100_state *state = iio_priv(indio_dev); > + > + switch (info) { > + case IIO_CHAN_INFO_RAW: > + ret = max11100_read_single(indio_dev, val); > + if (ret) > + return ret; > + > + return IIO_VAL_INT; > + > + case IIO_CHAN_INFO_SCALE: > + vref_uv = regulator_get_voltage(state->vref_reg); > + if (vref_uv < 0) > + /* dummy regulator "get_voltage" returns -EINVAL */ > + return -EINVAL; > + > + *val = vref_uv / 1000; > + *val2 = MAX11100_LSB_DIV; > + return IIO_VAL_FRACTIONAL; > + } > + > + return -EINVAL; > +} > + > +static const struct iio_info max11100_info = { > + .driver_module = THIS_MODULE, > + .read_raw = max11100_read_raw, > +}; > + > +static int max11100_probe(struct spi_device *spi) > +{ > + int ret; > + struct iio_dev *indio_dev; > + struct max11100_state *state; > + > + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*state)); > + if (!indio_dev) > + return -ENOMEM; > + > + spi_set_drvdata(spi, indio_dev); > + > + state = iio_priv(indio_dev); > + state->spi = spi; > + state->desc = &max11100_desc; > + > + indio_dev->dev.parent = &spi->dev; > + indio_dev->dev.of_node = spi->dev.of_node; > + indio_dev->info = &max11100_info; > + indio_dev->modes = INDIO_DIRECT_MODE; > + indio_dev->channels = state->desc->channels; > + indio_dev->num_channels = state->desc->num_chan; Consider setting indio_dev->name= "max11100"; so userspace can identify the type of the device. ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver 2017-01-13 9:50 ` Jacopo Mondi @ 2017-01-17 21:02 ` Wolfram Sang -1 siblings, 0 replies; 26+ messages in thread From: Wolfram Sang @ 2017-01-17 21:02 UTC (permalink / raw) To: Jacopo Mondi Cc: wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, jic23-DgEjT+Ai2ygdnm+yROfE0A, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA > + * Copyright (C) 2016 Renesas Electronics Corporation > + * Copyright (C) 2016 Jacopo Mondi In case you need to resend: 2016-17? -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 1/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-17 21:02 ` Wolfram Sang 0 siblings, 0 replies; 26+ messages in thread From: Wolfram Sang @ 2017-01-17 21:02 UTC (permalink / raw) To: Jacopo Mondi Cc: wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland, linux-iio, devicetree, linux-renesas-soc > + * Copyright (C) 2016 Renesas Electronics Corporation > + * Copyright (C) 2016 Jacopo Mondi In case you need to resend: 2016-17? ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver 2017-01-13 9:50 ` Jacopo Mondi @ 2017-01-15 14:13 ` jacopo mondi -1 siblings, 0 replies; 26+ messages in thread From: jacopo mondi @ 2017-01-15 14:13 UTC (permalink / raw) To: Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, jic23-DgEjT+Ai2ygdnm+yROfE0A, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA Hi Jonathan, thanks for review, On 13/01/2017 10:50, Jacopo Mondi wrote: > Hello, > sending out v4 splitting device tree bindings documentation and actual ADC > driver. > No changes in driver code since v3. > > Same question for iio maintainers here: > I would like to have clarified the measure unit returned by read_raw(). > Currently (value_raw * value_scale) return the ADC input value in mV. > While testing the patch I've been questioned if that should not actually > be in uV. This is easily achievable making _scale return a value in uV. > I have found no mention of this in the ABI documentation as it speaks of > generic voltage. > Can we have a final word on this? I see you have reviewed the driver without complaining for the read_raw() measure unit, so I assume this replies to the above question as well... Thanks j > > Thanks Marek for having tested this. > > v1 -> v2: > - incorporated pmeerw's review comments > - retrieve vref from dts and use that to convert read_raw result > to mV > - add device tree bindings documentation > > v2 -> v3: > - add _SCALE bit of read_raw function and change _RAW bit accordingly > - call regulator_get_voltage when accessing the _SCALE part of read_raw > and not during probe > - add back remove function as regulator has to be disabled when detaching > the module. Do not use devm_ version of iio_register/unregister functions > anymore but do unregister in the remove. > - remove mutex as access to SPI bus is protected by SPI core. Thanks marex > > v3 -> v4: > - split device tree binding documentation and actual ADC driver > - add "reg" to the list of required properties and use a better > namimg for the adc device node in bindings documentation as suggested > by Geert. > > Jacopo Mondi (2): > iio: adc: Add Maxim MAX11100 driver > dt-bindings: iio: document MAX11100 ADC > > .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ > drivers/iio/adc/Kconfig | 9 + > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ > 4 files changed, 216 insertions(+) > create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt > create mode 100644 drivers/iio/adc/max11100.c > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-15 14:13 ` jacopo mondi 0 siblings, 0 replies; 26+ messages in thread From: jacopo mondi @ 2017-01-15 14:13 UTC (permalink / raw) To: Jacopo Mondi, wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc Hi Jonathan, thanks for review, On 13/01/2017 10:50, Jacopo Mondi wrote: > Hello, > sending out v4 splitting device tree bindings documentation and actual ADC > driver. > No changes in driver code since v3. > > Same question for iio maintainers here: > I would like to have clarified the measure unit returned by read_raw(). > Currently (value_raw * value_scale) return the ADC input value in mV. > While testing the patch I've been questioned if that should not actually > be in uV. This is easily achievable making _scale return a value in uV. > I have found no mention of this in the ABI documentation as it speaks of > generic voltage. > Can we have a final word on this? I see you have reviewed the driver without complaining for the read_raw() measure unit, so I assume this replies to the above question as well... Thanks j > > Thanks Marek for having tested this. > > v1 -> v2: > - incorporated pmeerw's review comments > - retrieve vref from dts and use that to convert read_raw result > to mV > - add device tree bindings documentation > > v2 -> v3: > - add _SCALE bit of read_raw function and change _RAW bit accordingly > - call regulator_get_voltage when accessing the _SCALE part of read_raw > and not during probe > - add back remove function as regulator has to be disabled when detaching > the module. Do not use devm_ version of iio_register/unregister functions > anymore but do unregister in the remove. > - remove mutex as access to SPI bus is protected by SPI core. Thanks marex > > v3 -> v4: > - split device tree binding documentation and actual ADC driver > - add "reg" to the list of required properties and use a better > namimg for the adc device node in bindings documentation as suggested > by Geert. > > Jacopo Mondi (2): > iio: adc: Add Maxim MAX11100 driver > dt-bindings: iio: document MAX11100 ADC > > .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ > drivers/iio/adc/Kconfig | 9 + > drivers/iio/adc/Makefile | 1 + > drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ > 4 files changed, 216 insertions(+) > create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt > create mode 100644 drivers/iio/adc/max11100.c > ^ permalink raw reply [flat|nested] 26+ messages in thread
[parent not found: <502b12a0-6011-c0eb-06b4-a40245d1d8db-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver 2017-01-15 14:13 ` jacopo mondi @ 2017-01-15 14:31 ` Jonathan Cameron -1 siblings, 0 replies; 26+ messages in thread From: Jonathan Cameron @ 2017-01-15 14:31 UTC (permalink / raw) To: jacopo mondi, Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA On 15/01/17 14:13, jacopo mondi wrote: > Hi Jonathan, > thanks for review, > > On 13/01/2017 10:50, Jacopo Mondi wrote: >> Hello, >> sending out v4 splitting device tree bindings documentation and actual ADC >> driver. >> No changes in driver code since v3. >> >> Same question for iio maintainers here: >> I would like to have clarified the measure unit returned by read_raw(). >> Currently (value_raw * value_scale) return the ADC input value in mV. Good. >> While testing the patch I've been questioned if that should not actually >> be in uV. This is easily achievable making _scale return a value in uV. >> I have found no mention of this in the ABI documentation as it speaks of >> generic voltage. Can we have a final word on this? > > I see you have reviewed the driver without complaining for the > read_raw() measure unit, so I assume this replies to the above > question as well... > The units are specified in Documentation/ABI/testing/sysfs-bus-iio. > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw > KernelVersion: 2.6.35 > Contact: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > Description: > Raw (unscaled no bias removal etc.) voltage measurement from > channel Y. In special cases where the channel does not > correspond to externally available input one of the named > versions may be used. The number must always be specified and > unique to allow association with event codes. Units after > application of scale and offset are millivolts. So millivolts. This comes from a, perhaps ill judged, decision to match hwmon units were we could. Jonathan > Thanks j > >> >> Thanks Marek for having tested this. >> >> v1 -> v2: >> - incorporated pmeerw's review comments >> - retrieve vref from dts and use that to convert read_raw result >> to mV >> - add device tree bindings documentation >> >> v2 -> v3: >> - add _SCALE bit of read_raw function and change _RAW bit accordingly >> - call regulator_get_voltage when accessing the _SCALE part of read_raw >> and not during probe >> - add back remove function as regulator has to be disabled when detaching >> the module. Do not use devm_ version of iio_register/unregister functions >> anymore but do unregister in the remove. >> - remove mutex as access to SPI bus is protected by SPI core. Thanks marex >> >> v3 -> v4: >> - split device tree binding documentation and actual ADC driver >> - add "reg" to the list of required properties and use a better >> namimg for the adc device node in bindings documentation as suggested >> by Geert. >> >> Jacopo Mondi (2): >> iio: adc: Add Maxim MAX11100 driver >> dt-bindings: iio: document MAX11100 ADC >> >> .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ >> drivers/iio/adc/Kconfig | 9 + >> drivers/iio/adc/Makefile | 1 + >> drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ >> 4 files changed, 216 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt >> create mode 100644 drivers/iio/adc/max11100.c >> > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-15 14:31 ` Jonathan Cameron 0 siblings, 0 replies; 26+ messages in thread From: Jonathan Cameron @ 2017-01-15 14:31 UTC (permalink / raw) To: jacopo mondi, Jacopo Mondi, wsa+renesas, magnus.damm, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc On 15/01/17 14:13, jacopo mondi wrote: > Hi Jonathan, > thanks for review, > > On 13/01/2017 10:50, Jacopo Mondi wrote: >> Hello, >> sending out v4 splitting device tree bindings documentation and actual ADC >> driver. >> No changes in driver code since v3. >> >> Same question for iio maintainers here: >> I would like to have clarified the measure unit returned by read_raw(). >> Currently (value_raw * value_scale) return the ADC input value in mV. Good. >> While testing the patch I've been questioned if that should not actually >> be in uV. This is easily achievable making _scale return a value in uV. >> I have found no mention of this in the ABI documentation as it speaks of >> generic voltage. Can we have a final word on this? > > I see you have reviewed the driver without complaining for the > read_raw() measure unit, so I assume this replies to the above > question as well... > The units are specified in Documentation/ABI/testing/sysfs-bus-iio. > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw > What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw > KernelVersion: 2.6.35 > Contact: linux-iio@vger.kernel.org > Description: > Raw (unscaled no bias removal etc.) voltage measurement from > channel Y. In special cases where the channel does not > correspond to externally available input one of the named > versions may be used. The number must always be specified and > unique to allow association with event codes. Units after > application of scale and offset are millivolts. So millivolts. This comes from a, perhaps ill judged, decision to match hwmon units were we could. Jonathan > Thanks j > >> >> Thanks Marek for having tested this. >> >> v1 -> v2: >> - incorporated pmeerw's review comments >> - retrieve vref from dts and use that to convert read_raw result >> to mV >> - add device tree bindings documentation >> >> v2 -> v3: >> - add _SCALE bit of read_raw function and change _RAW bit accordingly >> - call regulator_get_voltage when accessing the _SCALE part of read_raw >> and not during probe >> - add back remove function as regulator has to be disabled when detaching >> the module. Do not use devm_ version of iio_register/unregister functions >> anymore but do unregister in the remove. >> - remove mutex as access to SPI bus is protected by SPI core. Thanks marex >> >> v3 -> v4: >> - split device tree binding documentation and actual ADC driver >> - add "reg" to the list of required properties and use a better >> namimg for the adc device node in bindings documentation as suggested >> by Geert. >> >> Jacopo Mondi (2): >> iio: adc: Add Maxim MAX11100 driver >> dt-bindings: iio: document MAX11100 ADC >> >> .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ >> drivers/iio/adc/Kconfig | 9 + >> drivers/iio/adc/Makefile | 1 + >> drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ >> 4 files changed, 216 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt >> create mode 100644 drivers/iio/adc/max11100.c >> > ^ permalink raw reply [flat|nested] 26+ messages in thread
[parent not found: <a4fe9cd7-4854-d916-ae30-50a7668cec4e-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver 2017-01-15 14:31 ` Jonathan Cameron @ 2017-01-15 14:41 ` jacopo mondi -1 siblings, 0 replies; 26+ messages in thread From: jacopo mondi @ 2017-01-15 14:41 UTC (permalink / raw) To: Jonathan Cameron, Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA Hi Jonathan, On 15/01/2017 15:31, Jonathan Cameron wrote: > On 15/01/17 14:13, jacopo mondi wrote: >> Hi Jonathan, >> thanks for review, >> >> On 13/01/2017 10:50, Jacopo Mondi wrote: >>> Hello, >>> sending out v4 splitting device tree bindings documentation and actual ADC >>> driver. >>> No changes in driver code since v3. >>> >>> Same question for iio maintainers here: >>> I would like to have clarified the measure unit returned by read_raw(). >>> Currently (value_raw * value_scale) return the ADC input value in mV. > Good. >>> While testing the patch I've been questioned if that should not actually >>> be in uV. This is easily achievable making _scale return a value in uV. >>> I have found no mention of this in the ABI documentation as it speaks of >>> generic voltage. Can we have a final word on this? >> >> I see you have reviewed the driver without complaining for the >> read_raw() measure unit, so I assume this replies to the above >> question as well... >> > The units are specified in Documentation/ABI/testing/sysfs-bus-iio. > >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw >> KernelVersion: 2.6.35 >> Contact: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> Description: >> Raw (unscaled no bias removal etc.) voltage measurement from >> channel Y. In special cases where the channel does not >> correspond to externally available input one of the named >> versions may be used. The number must always be specified and >> unique to allow association with event codes. Units after >> application of scale and offset are millivolts. > > So millivolts. This comes from a, perhaps ill judged, decision to match > hwmon units were we could. > Thank you! The "generic voltage" I said is mentioned in the ABI documentation is in _scale attributes description. I assume then the measure unit of the value returned by _scale is not relevant as long as the _raw one with scale applied returns millivolts. Thanks, as soon as I have feedbacks on DTS binding docs, I'll send v5 and we can hopefully close this one ;) Thanks j > Jonathan > >> Thanks j >> >>> >>> Thanks Marek for having tested this. >>> >>> v1 -> v2: >>> - incorporated pmeerw's review comments >>> - retrieve vref from dts and use that to convert read_raw result >>> to mV >>> - add device tree bindings documentation >>> >>> v2 -> v3: >>> - add _SCALE bit of read_raw function and change _RAW bit accordingly >>> - call regulator_get_voltage when accessing the _SCALE part of read_raw >>> and not during probe >>> - add back remove function as regulator has to be disabled when detaching >>> the module. Do not use devm_ version of iio_register/unregister functions >>> anymore but do unregister in the remove. >>> - remove mutex as access to SPI bus is protected by SPI core. Thanks marex >>> >>> v3 -> v4: >>> - split device tree binding documentation and actual ADC driver >>> - add "reg" to the list of required properties and use a better >>> namimg for the adc device node in bindings documentation as suggested >>> by Geert. >>> >>> Jacopo Mondi (2): >>> iio: adc: Add Maxim MAX11100 driver >>> dt-bindings: iio: document MAX11100 ADC >>> >>> .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ >>> drivers/iio/adc/Kconfig | 9 + >>> drivers/iio/adc/Makefile | 1 + >>> drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ >>> 4 files changed, 216 insertions(+) >>> create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt >>> create mode 100644 drivers/iio/adc/max11100.c >>> >> > ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-15 14:41 ` jacopo mondi 0 siblings, 0 replies; 26+ messages in thread From: jacopo mondi @ 2017-01-15 14:41 UTC (permalink / raw) To: Jonathan Cameron, Jacopo Mondi, wsa+renesas, magnus.damm, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc Hi Jonathan, On 15/01/2017 15:31, Jonathan Cameron wrote: > On 15/01/17 14:13, jacopo mondi wrote: >> Hi Jonathan, >> thanks for review, >> >> On 13/01/2017 10:50, Jacopo Mondi wrote: >>> Hello, >>> sending out v4 splitting device tree bindings documentation and actual ADC >>> driver. >>> No changes in driver code since v3. >>> >>> Same question for iio maintainers here: >>> I would like to have clarified the measure unit returned by read_raw(). >>> Currently (value_raw * value_scale) return the ADC input value in mV. > Good. >>> While testing the patch I've been questioned if that should not actually >>> be in uV. This is easily achievable making _scale return a value in uV. >>> I have found no mention of this in the ABI documentation as it speaks of >>> generic voltage. Can we have a final word on this? >> >> I see you have reviewed the driver without complaining for the >> read_raw() measure unit, so I assume this replies to the above >> question as well... >> > The units are specified in Documentation/ABI/testing/sysfs-bus-iio. > >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw >> KernelVersion: 2.6.35 >> Contact: linux-iio@vger.kernel.org >> Description: >> Raw (unscaled no bias removal etc.) voltage measurement from >> channel Y. In special cases where the channel does not >> correspond to externally available input one of the named >> versions may be used. The number must always be specified and >> unique to allow association with event codes. Units after >> application of scale and offset are millivolts. > > So millivolts. This comes from a, perhaps ill judged, decision to match > hwmon units were we could. > Thank you! The "generic voltage" I said is mentioned in the ABI documentation is in _scale attributes description. I assume then the measure unit of the value returned by _scale is not relevant as long as the _raw one with scale applied returns millivolts. Thanks, as soon as I have feedbacks on DTS binding docs, I'll send v5 and we can hopefully close this one ;) Thanks j > Jonathan > >> Thanks j >> >>> >>> Thanks Marek for having tested this. >>> >>> v1 -> v2: >>> - incorporated pmeerw's review comments >>> - retrieve vref from dts and use that to convert read_raw result >>> to mV >>> - add device tree bindings documentation >>> >>> v2 -> v3: >>> - add _SCALE bit of read_raw function and change _RAW bit accordingly >>> - call regulator_get_voltage when accessing the _SCALE part of read_raw >>> and not during probe >>> - add back remove function as regulator has to be disabled when detaching >>> the module. Do not use devm_ version of iio_register/unregister functions >>> anymore but do unregister in the remove. >>> - remove mutex as access to SPI bus is protected by SPI core. Thanks marex >>> >>> v3 -> v4: >>> - split device tree binding documentation and actual ADC driver >>> - add "reg" to the list of required properties and use a better >>> namimg for the adc device node in bindings documentation as suggested >>> by Geert. >>> >>> Jacopo Mondi (2): >>> iio: adc: Add Maxim MAX11100 driver >>> dt-bindings: iio: document MAX11100 ADC >>> >>> .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ >>> drivers/iio/adc/Kconfig | 9 + >>> drivers/iio/adc/Makefile | 1 + >>> drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ >>> 4 files changed, 216 insertions(+) >>> create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt >>> create mode 100644 drivers/iio/adc/max11100.c >>> >> > ^ permalink raw reply [flat|nested] 26+ messages in thread
[parent not found: <a1866192-dd3b-7ea8-bb03-1bbbf0678226-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver 2017-01-15 14:41 ` jacopo mondi @ 2017-01-15 14:45 ` Jonathan Cameron -1 siblings, 0 replies; 26+ messages in thread From: Jonathan Cameron @ 2017-01-15 14:45 UTC (permalink / raw) To: jacopo mondi, Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA On 15/01/17 14:41, jacopo mondi wrote: > Hi Jonathan, > > On 15/01/2017 15:31, Jonathan Cameron wrote: >> On 15/01/17 14:13, jacopo mondi wrote: >>> Hi Jonathan, >>> thanks for review, >>> >>> On 13/01/2017 10:50, Jacopo Mondi wrote: >>>> Hello, >>>> sending out v4 splitting device tree bindings documentation and actual ADC >>>> driver. >>>> No changes in driver code since v3. >>>> >>>> Same question for iio maintainers here: >>>> I would like to have clarified the measure unit returned by read_raw(). >>>> Currently (value_raw * value_scale) return the ADC input value in mV. >> Good. >>>> While testing the patch I've been questioned if that should not actually >>>> be in uV. This is easily achievable making _scale return a value in uV. >>>> I have found no mention of this in the ABI documentation as it speaks of >>>> generic voltage. Can we have a final word on this? >>> >>> I see you have reviewed the driver without complaining for the >>> read_raw() measure unit, so I assume this replies to the above >>> question as well... >>> >> The units are specified in Documentation/ABI/testing/sysfs-bus-iio. >> >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw >>> KernelVersion: 2.6.35 >>> Contact: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >>> Description: >>> Raw (unscaled no bias removal etc.) voltage measurement from >>> channel Y. In special cases where the channel does not >>> correspond to externally available input one of the named >>> versions may be used. The number must always be specified and >>> unique to allow association with event codes. Units after >>> application of scale and offset are millivolts. >> >> So millivolts. This comes from a, perhaps ill judged, decision to match >> hwmon units were we could. >> > > Thank you! The "generic voltage" I said is mentioned in the ABI > documentation is in _scale attributes description. I assume then the > measure unit of the value returned by _scale is not relevant as long > as the _raw one with scale applied returns millivolts. Yes. Scale is inherently a ratio really rather than a quantity with units at all. It just happens to correspond to the voltage represented by 1LSB. > > Thanks, as soon as I have feedbacks on DTS binding docs, I'll send v5 > and we can hopefully close this one ;) Cool. Got a while in this cycle yet, but I know it's always nice to get patches out of your personal queue! Jonathan > > Thanks j > > > >> Jonathan >> >>> Thanks j >>> >>>> >>>> Thanks Marek for having tested this. >>>> >>>> v1 -> v2: >>>> - incorporated pmeerw's review comments >>>> - retrieve vref from dts and use that to convert read_raw result >>>> to mV >>>> - add device tree bindings documentation >>>> >>>> v2 -> v3: >>>> - add _SCALE bit of read_raw function and change _RAW bit accordingly >>>> - call regulator_get_voltage when accessing the _SCALE part of read_raw >>>> and not during probe >>>> - add back remove function as regulator has to be disabled when detaching >>>> the module. Do not use devm_ version of iio_register/unregister functions >>>> anymore but do unregister in the remove. >>>> - remove mutex as access to SPI bus is protected by SPI core. Thanks marex >>>> >>>> v3 -> v4: >>>> - split device tree binding documentation and actual ADC driver >>>> - add "reg" to the list of required properties and use a better >>>> namimg for the adc device node in bindings documentation as suggested >>>> by Geert. >>>> >>>> Jacopo Mondi (2): >>>> iio: adc: Add Maxim MAX11100 driver >>>> dt-bindings: iio: document MAX11100 ADC >>>> >>>> .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ >>>> drivers/iio/adc/Kconfig | 9 + >>>> drivers/iio/adc/Makefile | 1 + >>>> drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ >>>> 4 files changed, 216 insertions(+) >>>> create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt >>>> create mode 100644 drivers/iio/adc/max11100.c >>>> >>> >> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-iio" in > the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-15 14:45 ` Jonathan Cameron 0 siblings, 0 replies; 26+ messages in thread From: Jonathan Cameron @ 2017-01-15 14:45 UTC (permalink / raw) To: jacopo mondi, Jacopo Mondi, wsa+renesas, magnus.damm, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc On 15/01/17 14:41, jacopo mondi wrote: > Hi Jonathan, > > On 15/01/2017 15:31, Jonathan Cameron wrote: >> On 15/01/17 14:13, jacopo mondi wrote: >>> Hi Jonathan, >>> thanks for review, >>> >>> On 13/01/2017 10:50, Jacopo Mondi wrote: >>>> Hello, >>>> sending out v4 splitting device tree bindings documentation and actual ADC >>>> driver. >>>> No changes in driver code since v3. >>>> >>>> Same question for iio maintainers here: >>>> I would like to have clarified the measure unit returned by read_raw(). >>>> Currently (value_raw * value_scale) return the ADC input value in mV. >> Good. >>>> While testing the patch I've been questioned if that should not actually >>>> be in uV. This is easily achievable making _scale return a value in uV. >>>> I have found no mention of this in the ABI documentation as it speaks of >>>> generic voltage. Can we have a final word on this? >>> >>> I see you have reviewed the driver without complaining for the >>> read_raw() measure unit, so I assume this replies to the above >>> question as well... >>> >> The units are specified in Documentation/ABI/testing/sysfs-bus-iio. >> >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw >>> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw >>> KernelVersion: 2.6.35 >>> Contact: linux-iio@vger.kernel.org >>> Description: >>> Raw (unscaled no bias removal etc.) voltage measurement from >>> channel Y. In special cases where the channel does not >>> correspond to externally available input one of the named >>> versions may be used. The number must always be specified and >>> unique to allow association with event codes. Units after >>> application of scale and offset are millivolts. >> >> So millivolts. This comes from a, perhaps ill judged, decision to match >> hwmon units were we could. >> > > Thank you! The "generic voltage" I said is mentioned in the ABI > documentation is in _scale attributes description. I assume then the > measure unit of the value returned by _scale is not relevant as long > as the _raw one with scale applied returns millivolts. Yes. Scale is inherently a ratio really rather than a quantity with units at all. It just happens to correspond to the voltage represented by 1LSB. > > Thanks, as soon as I have feedbacks on DTS binding docs, I'll send v5 > and we can hopefully close this one ;) Cool. Got a while in this cycle yet, but I know it's always nice to get patches out of your personal queue! Jonathan > > Thanks j > > > >> Jonathan >> >>> Thanks j >>> >>>> >>>> Thanks Marek for having tested this. >>>> >>>> v1 -> v2: >>>> - incorporated pmeerw's review comments >>>> - retrieve vref from dts and use that to convert read_raw result >>>> to mV >>>> - add device tree bindings documentation >>>> >>>> v2 -> v3: >>>> - add _SCALE bit of read_raw function and change _RAW bit accordingly >>>> - call regulator_get_voltage when accessing the _SCALE part of read_raw >>>> and not during probe >>>> - add back remove function as regulator has to be disabled when detaching >>>> the module. Do not use devm_ version of iio_register/unregister functions >>>> anymore but do unregister in the remove. >>>> - remove mutex as access to SPI bus is protected by SPI core. Thanks marex >>>> >>>> v3 -> v4: >>>> - split device tree binding documentation and actual ADC driver >>>> - add "reg" to the list of required properties and use a better >>>> namimg for the adc device node in bindings documentation as suggested >>>> by Geert. >>>> >>>> Jacopo Mondi (2): >>>> iio: adc: Add Maxim MAX11100 driver >>>> dt-bindings: iio: document MAX11100 ADC >>>> >>>> .../devicetree/bindings/iio/adc/max11100.txt | 19 +++ >>>> drivers/iio/adc/Kconfig | 9 + >>>> drivers/iio/adc/Makefile | 1 + >>>> drivers/iio/adc/max11100.c | 187 +++++++++++++++++++++ >>>> 4 files changed, 216 insertions(+) >>>> create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt >>>> create mode 100644 drivers/iio/adc/max11100.c >>>> >>> >> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-iio" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver 2017-01-15 14:31 ` Jonathan Cameron @ 2017-01-15 15:41 ` Marek Vasut -1 siblings, 0 replies; 26+ messages in thread From: Marek Vasut @ 2017-01-15 15:41 UTC (permalink / raw) To: Jonathan Cameron, jacopo mondi, Jacopo Mondi, wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8 Cc: linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA On 01/15/2017 03:31 PM, Jonathan Cameron wrote: > On 15/01/17 14:13, jacopo mondi wrote: >> Hi Jonathan, >> thanks for review, >> >> On 13/01/2017 10:50, Jacopo Mondi wrote: >>> Hello, >>> sending out v4 splitting device tree bindings documentation and actual ADC >>> driver. >>> No changes in driver code since v3. >>> >>> Same question for iio maintainers here: >>> I would like to have clarified the measure unit returned by read_raw(). >>> Currently (value_raw * value_scale) return the ADC input value in mV. > Good. >>> While testing the patch I've been questioned if that should not actually >>> be in uV. This is easily achievable making _scale return a value in uV. >>> I have found no mention of this in the ABI documentation as it speaks of >>> generic voltage. Can we have a final word on this? >> >> I see you have reviewed the driver without complaining for the >> read_raw() measure unit, so I assume this replies to the above >> question as well... >> > The units are specified in Documentation/ABI/testing/sysfs-bus-iio. > >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw >> KernelVersion: 2.6.35 >> Contact: linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >> Description: >> Raw (unscaled no bias removal etc.) voltage measurement from >> channel Y. In special cases where the channel does not >> correspond to externally available input one of the named >> versions may be used. The number must always be specified and >> unique to allow association with event codes. Units after >> application of scale and offset are millivolts. > > So millivolts. This comes from a, perhaps ill judged, decision to match > hwmon units were we could. Fun, regulator framework returns values in uV to add to the chaos :) -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver @ 2017-01-15 15:41 ` Marek Vasut 0 siblings, 0 replies; 26+ messages in thread From: Marek Vasut @ 2017-01-15 15:41 UTC (permalink / raw) To: Jonathan Cameron, jacopo mondi, Jacopo Mondi, wsa+renesas, magnus.damm, knaack.h, lars, pmeerw, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc On 01/15/2017 03:31 PM, Jonathan Cameron wrote: > On 15/01/17 14:13, jacopo mondi wrote: >> Hi Jonathan, >> thanks for review, >> >> On 13/01/2017 10:50, Jacopo Mondi wrote: >>> Hello, >>> sending out v4 splitting device tree bindings documentation and actual ADC >>> driver. >>> No changes in driver code since v3. >>> >>> Same question for iio maintainers here: >>> I would like to have clarified the measure unit returned by read_raw(). >>> Currently (value_raw * value_scale) return the ADC input value in mV. > Good. >>> While testing the patch I've been questioned if that should not actually >>> be in uV. This is easily achievable making _scale return a value in uV. >>> I have found no mention of this in the ABI documentation as it speaks of >>> generic voltage. Can we have a final word on this? >> >> I see you have reviewed the driver without complaining for the >> read_raw() measure unit, so I assume this replies to the above >> question as well... >> > The units are specified in Documentation/ABI/testing/sysfs-bus-iio. > >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_supply_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_i_raw >> What: /sys/bus/iio/devices/iio:deviceX/in_voltageY_q_raw >> KernelVersion: 2.6.35 >> Contact: linux-iio@vger.kernel.org >> Description: >> Raw (unscaled no bias removal etc.) voltage measurement from >> channel Y. In special cases where the channel does not >> correspond to externally available input one of the named >> versions may be used. The number must always be specified and >> unique to allow association with event codes. Units after >> application of scale and offset are millivolts. > > So millivolts. This comes from a, perhaps ill judged, decision to match > hwmon units were we could. Fun, regulator framework returns values in uV to add to the chaos :) -- Best regards, Marek Vasut ^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC 2017-01-13 9:50 ` Jacopo Mondi (?) (?) @ 2017-01-13 9:50 ` Jacopo Mondi [not found] ` <1484301038-16386-3-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> -1 siblings, 1 reply; 26+ messages in thread From: Jacopo Mondi @ 2017-01-13 9:50 UTC (permalink / raw) To: wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland Cc: linux-iio, devicetree, linux-renesas-soc Add device tree bindings documentation for Maxim MAX11100 single-channel ADC Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> --- .../devicetree/bindings/iio/adc/max11100.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/adc/max11100.txt diff --git a/Documentation/devicetree/bindings/iio/adc/max11100.txt b/Documentation/devicetree/bindings/iio/adc/max11100.txt new file mode 100644 index 0000000..ad0bc31 --- /dev/null +++ b/Documentation/devicetree/bindings/iio/adc/max11100.txt @@ -0,0 +1,19 @@ +* Maxim max11100 Analog to Digital Converter (ADC) + +Required properties: + - compatible: Should be "maxim,max11100" + - reg: the adc unit address + - vref-supply: phandle to the regulator that provides reference voltage + +Optional properties: + - spi-max-frequency: SPI maximum frequency + +Example: + +max11100: adc@0 { + compatible = "maxim,max11100"; + reg = <0>; + vref-supply = <&adc0_vref>; + spi-max-frequency = <240000>; +}; + -- 2.7.4 ^ permalink raw reply related [flat|nested] 26+ messages in thread
[parent not found: <1484301038-16386-3-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC 2017-01-13 9:50 ` [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC Jacopo Mondi @ 2017-01-13 10:04 ` Geert Uytterhoeven 0 siblings, 0 replies; 26+ messages in thread From: Geert Uytterhoeven @ 2017-01-13 10:04 UTC (permalink / raw) To: Jacopo Mondi Cc: Wolfram Sang, Magnus Damm, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Marek Vasut, Rob Herring, Mark Rutland, linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, Linux-Renesas On Fri, Jan 13, 2017 at 10:50 AM, Jacopo Mondi <jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> wrote: > Add device tree bindings documentation for Maxim MAX11100 single-channel > ADC > > Signed-off-by: Jacopo Mondi <jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> Reviewed-by: Geert Uytterhoeven <geert+renesas-gXvu3+zWzMSzQB+pC5nmwQ@public.gmane.org> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert-Td1EMuHUCqxL1ZNQvxDV9g@public.gmane.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC @ 2017-01-13 10:04 ` Geert Uytterhoeven 0 siblings, 0 replies; 26+ messages in thread From: Geert Uytterhoeven @ 2017-01-13 10:04 UTC (permalink / raw) To: Jacopo Mondi Cc: Wolfram Sang, Magnus Damm, Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen, Peter Meerwald, Marek Vasut, Rob Herring, Mark Rutland, linux-iio, devicetree, Linux-Renesas On Fri, Jan 13, 2017 at 10:50 AM, Jacopo Mondi <jacopo+renesas@jmondi.org> wrote: > Add device tree bindings documentation for Maxim MAX11100 single-channel > ADC > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC 2017-01-13 9:50 ` [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC Jacopo Mondi [not found] ` <1484301038-16386-3-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> @ 2017-01-17 21:03 ` Wolfram Sang 0 siblings, 0 replies; 26+ messages in thread From: Wolfram Sang @ 2017-01-17 21:03 UTC (permalink / raw) To: Jacopo Mondi Cc: wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/, magnus.damm-Re5JQEeQqe8AvxtiuMwx3w, jic23-DgEjT+Ai2ygdnm+yROfE0A, knaack.h-Mmb7MZpHnFY, lars-Qo5EllUWu/uELgA04lAiVw, pmeerw-jW+XmwGofnusTnJN9+BGXg, marek.vasut-Re5JQEeQqe8AvxtiuMwx3w, geert-Td1EMuHUCqxL1ZNQvxDV9g, robh+dt-DgEjT+Ai2ygdnm+yROfE0A, mark.rutland-5wv7dgnIgG8, linux-iio-u79uwXL29TY76Z2rM5mHXA, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA On Fri, Jan 13, 2017 at 10:50:38AM +0100, Jacopo Mondi wrote: > Add device tree bindings documentation for Maxim MAX11100 single-channel > ADC > > Signed-off-by: Jacopo Mondi <jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> Acked-by: Wolfram Sang <wsa+renesas-jBu1N2QxHDJrcw3mvpCnnVaTQe2KTcn/@public.gmane.org> ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC @ 2017-01-17 21:03 ` Wolfram Sang 0 siblings, 0 replies; 26+ messages in thread From: Wolfram Sang @ 2017-01-17 21:03 UTC (permalink / raw) To: Jacopo Mondi Cc: wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland, linux-iio, devicetree, linux-renesas-soc On Fri, Jan 13, 2017 at 10:50:38AM +0100, Jacopo Mondi wrote: > Add device tree bindings documentation for Maxim MAX11100 single-channel > ADC >=20 > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com> ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC @ 2017-01-17 21:03 ` Wolfram Sang 0 siblings, 0 replies; 26+ messages in thread From: Wolfram Sang @ 2017-01-17 21:03 UTC (permalink / raw) To: Jacopo Mondi Cc: wsa+renesas, magnus.damm, jic23, knaack.h, lars, pmeerw, marek.vasut, geert, robh+dt, mark.rutland, linux-iio, devicetree, linux-renesas-soc On Fri, Jan 13, 2017 at 10:50:38AM +0100, Jacopo Mondi wrote: > Add device tree bindings documentation for Maxim MAX11100 single-channel > ADC > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com> ^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2017-01-17 21:03 UTC | newest] Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-01-13 9:50 [PATCH v4 0/2] iio: adc: Add Maxim MAX11100 driver Jacopo Mondi 2017-01-13 9:50 ` Jacopo Mondi [not found] ` <1484301038-16386-1-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> 2017-01-13 9:50 ` [PATCH v4 1/2] " Jacopo Mondi 2017-01-13 9:50 ` Jacopo Mondi [not found] ` <1484301038-16386-2-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> 2017-01-14 10:22 ` Jonathan Cameron 2017-01-14 10:22 ` Jonathan Cameron 2017-01-15 12:18 ` Lars-Peter Clausen 2017-01-15 12:18 ` Lars-Peter Clausen 2017-01-17 21:02 ` Wolfram Sang 2017-01-17 21:02 ` Wolfram Sang 2017-01-15 14:13 ` [PATCH v4 0/2] " jacopo mondi 2017-01-15 14:13 ` jacopo mondi [not found] ` <502b12a0-6011-c0eb-06b4-a40245d1d8db-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> 2017-01-15 14:31 ` Jonathan Cameron 2017-01-15 14:31 ` Jonathan Cameron [not found] ` <a4fe9cd7-4854-d916-ae30-50a7668cec4e-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> 2017-01-15 14:41 ` jacopo mondi 2017-01-15 14:41 ` jacopo mondi [not found] ` <a1866192-dd3b-7ea8-bb03-1bbbf0678226-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> 2017-01-15 14:45 ` Jonathan Cameron 2017-01-15 14:45 ` Jonathan Cameron 2017-01-15 15:41 ` Marek Vasut 2017-01-15 15:41 ` Marek Vasut 2017-01-13 9:50 ` [PATCH v4 2/2] dt-bindings: iio: document MAX11100 ADC Jacopo Mondi [not found] ` <1484301038-16386-3-git-send-email-jacopo+renesas-AW8dsiIh9cEdnm+yROfE0A@public.gmane.org> 2017-01-13 10:04 ` Geert Uytterhoeven 2017-01-13 10:04 ` Geert Uytterhoeven 2017-01-17 21:03 ` Wolfram Sang 2017-01-17 21:03 ` Wolfram Sang 2017-01-17 21:03 ` Wolfram Sang
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.