* [PATCH v3 0/2] iio: adc: add LTC2309 support
@ 2023-08-29 2:41 Liam Beguin
2023-08-29 2:41 ` [PATCH v3 1/2] dt-bindings: iio: adc: add lltc,ltc2309 bindings Liam Beguin
2023-08-29 2:41 ` [PATCH v3 2/2] iio: adc: add ltc2309 support Liam Beguin
0 siblings, 2 replies; 7+ messages in thread
From: Liam Beguin @ 2023-08-29 2:41 UTC (permalink / raw)
To: Jonathan Cameron, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-kernel, linux-iio, devicetree, Liam Beguin,
Krzysztof Kozlowski
The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
This implements support for all single-ended and differential channels,
in unipolar mode only.
Signed-off-by: Liam Beguin <liambeguin@gmail.com>
---
Changes in v3:
- fix comments, kerneldoc, and i2c_device_id
- drop DRIVER_NAME
- drop datasheet_name
- drop unused i2c clientdata
- rework .read_raw() locking, adding utility function
- remove reundant parent assignment
- use dev_err_probe
- update devm_regulator_get_optional() error handling
- Link to v2: https://lore.kernel.org/r/20230825-ltc2309-v2-0-6d75f2b3fb50@gmail.com
Changes in v2:
- reduce critical section scope to i2c accesses only
- fixup .probe() commit
- fix unbalanced regulator
- rename refcomp to vref
- update lltc,2497.yaml instead of duplicating bindings
- commit dt-bindings before driver
- fix checkpatch --strict warnings
- Link to v1: https://lore.kernel.org/r/20230824-ltc2309-v1-0-b87b4eb8030c@gmail.com
---
Liam Beguin (2):
dt-bindings: iio: adc: add lltc,ltc2309 bindings
iio: adc: add ltc2309 support
.../devicetree/bindings/iio/adc/lltc,ltc2497.yaml | 20 +-
drivers/iio/adc/Kconfig | 10 +
drivers/iio/adc/Makefile | 1 +
drivers/iio/adc/ltc2309.c | 249 +++++++++++++++++++++
4 files changed, 275 insertions(+), 5 deletions(-)
---
base-commit: a5e505a99ca748583dbe558b691be1b26f05d678
change-id: 20230823-ltc2309-1945e1e94931
Best regards,
--
Liam Beguin <liambeguin@gmail.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/2] dt-bindings: iio: adc: add lltc,ltc2309 bindings
2023-08-29 2:41 [PATCH v3 0/2] iio: adc: add LTC2309 support Liam Beguin
@ 2023-08-29 2:41 ` Liam Beguin
2023-08-29 2:41 ` [PATCH v3 2/2] iio: adc: add ltc2309 support Liam Beguin
1 sibling, 0 replies; 7+ messages in thread
From: Liam Beguin @ 2023-08-29 2:41 UTC (permalink / raw)
To: Jonathan Cameron, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-kernel, linux-iio, devicetree, Liam Beguin,
Krzysztof Kozlowski
Add devicetree bindings for the Linear Technology LTC2309 ADC driver.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Liam Beguin <liambeguin@gmail.com>
---
.../devicetree/bindings/iio/adc/lltc,ltc2497.yaml | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml b/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml
index 875f394576c2..5cc6a9684077 100644
--- a/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/lltc,ltc2497.yaml
@@ -4,21 +4,31 @@
$id: http://devicetree.org/schemas/iio/adc/lltc,ltc2497.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
-title: Linear Technology / Analog Devices LTC2497 ADC
+title: Linear Technology / Analog Devices LTC2497 and LTC2309 ADC
maintainers:
- Michael Hennerich <michael.hennerich@analog.com>
+ - Liam Beguin <liambeguin@gmail.com>
description: |
- 16bit ADC supporting up to 16 single ended or 8 differential inputs.
- I2C interface.
+ LTC2309:
+ low noise, low power, 8-channel, 12-bit successive approximation ADC with an
+ I2C compatible serial interface.
- https://www.analog.com/media/en/technical-documentation/data-sheets/2497fb.pdf
- https://www.analog.com/media/en/technical-documentation/data-sheets/2499fe.pdf
+ https://www.analog.com/media/en/technical-documentation/data-sheets/2309fd.pdf
+
+ LTC2497:
+ LTC2499:
+ 16bit ADC supporting up to 16 single ended or 8 differential inputs.
+ I2C interface.
+
+ https://www.analog.com/media/en/technical-documentation/data-sheets/2497fb.pdf
+ https://www.analog.com/media/en/technical-documentation/data-sheets/2499fe.pdf
properties:
compatible:
enum:
+ - lltc,ltc2309
- lltc,ltc2497
- lltc,ltc2499
--
2.39.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/2] iio: adc: add ltc2309 support
2023-08-29 2:41 [PATCH v3 0/2] iio: adc: add LTC2309 support Liam Beguin
2023-08-29 2:41 ` [PATCH v3 1/2] dt-bindings: iio: adc: add lltc,ltc2309 bindings Liam Beguin
@ 2023-08-29 2:41 ` Liam Beguin
2023-08-29 3:46 ` kernel test robot
2023-09-03 11:43 ` Jonathan Cameron
1 sibling, 2 replies; 7+ messages in thread
From: Liam Beguin @ 2023-08-29 2:41 UTC (permalink / raw)
To: Jonathan Cameron, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-kernel, linux-iio, devicetree, Liam Beguin
The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
This implements support for all single-ended and differential channels,
in unipolar mode only.
Signed-off-by: Liam Beguin <liambeguin@gmail.com>
---
drivers/iio/adc/Kconfig | 10 ++
drivers/iio/adc/Makefile | 1 +
drivers/iio/adc/ltc2309.c | 249 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 260 insertions(+)
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index dc14bde31ac1..6ec18e02faf9 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -607,6 +607,16 @@ config LPC32XX_ADC
activate only one via device tree selection. Provides direct access
via sysfs.
+config LTC2309
+ tristate "Linear Technology LTC2309 ADC driver"
+ depends on I2C
+ help
+ Say yes here to build support for Linear Technology LTC2309, a low
+ noise, low power, 8-channel, 12-bit SAR ADC
+
+ This driver can also be built as a module. If so, the module will
+ be called ltc2309.
+
config LTC2471
tristate "Linear Technology LTC2471 and LTC2473 ADC driver"
depends on I2C
diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
index eb6e891790fb..fbd86184ec94 100644
--- a/drivers/iio/adc/Makefile
+++ b/drivers/iio/adc/Makefile
@@ -56,6 +56,7 @@ obj-$(CONFIG_INTEL_MRFLD_ADC) += intel_mrfld_adc.o
obj-$(CONFIG_LP8788_ADC) += lp8788_adc.o
obj-$(CONFIG_LPC18XX_ADC) += lpc18xx_adc.o
obj-$(CONFIG_LPC32XX_ADC) += lpc32xx_adc.o
+obj-$(CONFIG_LTC2309) += ltc2309.o
obj-$(CONFIG_LTC2471) += ltc2471.o
obj-$(CONFIG_LTC2485) += ltc2485.o
obj-$(CONFIG_LTC2496) += ltc2496.o ltc2497-core.o
diff --git a/drivers/iio/adc/ltc2309.c b/drivers/iio/adc/ltc2309.c
new file mode 100644
index 000000000000..3f8e1d238639
--- /dev/null
+++ b/drivers/iio/adc/ltc2309.c
@@ -0,0 +1,249 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
+ *
+ * Datasheet:
+ * https://www.analog.com/media/en/technical-documentation/data-sheets/2309fd.pdf
+ *
+ * Copyright (c) 2023, Liam Beguin <liambeguin@gmail.com>
+ */
+#include <linux/bitfield.h>
+#include <linux/i2c.h>
+#include <linux/iio/iio.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/regulator/consumer.h>
+
+#define LTC2309_ADC_RESOLUTION 12
+
+#define LTC2309_DIN_CH_MASK GENMASK(7, 4)
+#define LTC2309_DIN_SDN BIT(7)
+#define LTC2309_DIN_OSN BIT(6)
+#define LTC2309_DIN_S1 BIT(5)
+#define LTC2309_DIN_S0 BIT(4)
+#define LTC2309_DIN_UNI BIT(3)
+#define LTC2309_DIN_SLEEP BIT(2)
+
+/**
+ * struct ltc2309 - internal device data structure
+ * @dev: Device reference
+ * @client: I2C reference
+ * @vref: External reference source
+ * @lock: Lock to serialize data access
+ * @vref_mv Internal voltage reference
+ */
+struct ltc2309 {
+ struct device *dev;
+ struct i2c_client *client;
+ struct regulator *vref;
+ struct mutex lock; /* serialize data access */
+ int vref_mv;
+};
+
+/* Order matches expected channel address, See datasheet Table 1. */
+enum ltc2309_channels {
+ LTC2309_CH0_CH1 = 0,
+ LTC2309_CH2_CH3,
+ LTC2309_CH4_CH5,
+ LTC2309_CH6_CH7,
+ LTC2309_CH1_CH0,
+ LTC2309_CH3_CH2,
+ LTC2309_CH5_CH4,
+ LTC2309_CH7_CH6,
+ LTC2309_CH0,
+ LTC2309_CH2,
+ LTC2309_CH4,
+ LTC2309_CH6,
+ LTC2309_CH1,
+ LTC2309_CH3,
+ LTC2309_CH5,
+ LTC2309_CH7,
+};
+
+#define LTC2309_CHAN(_chan, _addr) { \
+ .type = IIO_VOLTAGE, \
+ .indexed = 1, \
+ .address = _addr, \
+ .channel = _chan, \
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
+}
+
+#define LTC2309_DIFF_CHAN(_chan, _chan2, _addr) { \
+ .type = IIO_VOLTAGE, \
+ .differential = 1, \
+ .indexed = 1, \
+ .address = _addr, \
+ .channel = _chan, \
+ .channel2 = _chan2, \
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
+}
+
+static const struct iio_chan_spec ltc2309_channels[] = {
+ LTC2309_CHAN(0, LTC2309_CH0),
+ LTC2309_CHAN(1, LTC2309_CH1),
+ LTC2309_CHAN(2, LTC2309_CH2),
+ LTC2309_CHAN(3, LTC2309_CH3),
+ LTC2309_CHAN(4, LTC2309_CH4),
+ LTC2309_CHAN(5, LTC2309_CH5),
+ LTC2309_CHAN(6, LTC2309_CH6),
+ LTC2309_CHAN(7, LTC2309_CH7),
+ LTC2309_DIFF_CHAN(0, 1, LTC2309_CH0_CH1),
+ LTC2309_DIFF_CHAN(2, 3, LTC2309_CH2_CH3),
+ LTC2309_DIFF_CHAN(4, 5, LTC2309_CH4_CH5),
+ LTC2309_DIFF_CHAN(6, 7, LTC2309_CH6_CH7),
+ LTC2309_DIFF_CHAN(1, 0, LTC2309_CH1_CH0),
+ LTC2309_DIFF_CHAN(3, 2, LTC2309_CH3_CH2),
+ LTC2309_DIFF_CHAN(5, 4, LTC2309_CH5_CH4),
+ LTC2309_DIFF_CHAN(7, 6, LTC2309_CH7_CH6),
+};
+
+static int ltc2309_read_raw_channel(struct ltc2309 *ltc2309,
+ unsigned long address, int *val)
+{
+ int ret;
+ u16 buf;
+ u8 din;
+
+ din = FIELD_PREP(LTC2309_DIN_CH_MASK, address & 0x0f) |
+ FIELD_PREP(LTC2309_DIN_UNI, 1) |
+ FIELD_PREP(LTC2309_DIN_SLEEP, 0);
+
+ ret = i2c_smbus_write_byte(ltc2309->client, din);
+ if (ret < 0) {
+ dev_err(ltc2309->dev, "i2c command failed: %pe\n",
+ ERR_PTR(ret));
+ return ret;
+ }
+
+ ret = i2c_master_recv(ltc2309->client, (char *)&buf, 2);
+ if (ret < 0) {
+ dev_err(ltc2309->dev, "i2c read failed: %pe\n", ERR_PTR(ret));
+ return ret;
+ }
+
+ *val = be16_to_cpu(buf) >> 4;
+
+ return ret;
+}
+
+static int ltc2309_read_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan, int *val,
+ int *val2, long mask)
+{
+ struct ltc2309 *ltc2309 = iio_priv(indio_dev);
+ int ret;
+
+ switch (mask) {
+ case IIO_CHAN_INFO_RAW:
+ mutex_lock(<c2309->lock);
+ ret = ltc2309_read_raw_channel(ltc2309, chan->address, val);
+ mutex_unlock(<c2309->lock);
+ if (ret < 0)
+ return -EINVAL;
+ return IIO_VAL_INT;
+ case IIO_CHAN_INFO_SCALE:
+ *val = ltc2309->vref_mv;
+ *val2 = LTC2309_ADC_RESOLUTION;
+ return IIO_VAL_FRACTIONAL_LOG2;
+ default:
+ return -EINVAL;
+ }
+}
+
+static const struct iio_info ltc2309_info = {
+ .read_raw = ltc2309_read_raw,
+};
+
+void ltc2309_regulator_disable(void *regulator)
+{
+ struct regulator *r = (struct regulator *)regulator;
+
+ regulator_disable(r);
+}
+
+static int ltc2309_probe(struct i2c_client *client)
+{
+ struct iio_dev *indio_dev;
+ struct ltc2309 *ltc2309;
+ int ret;
+
+ indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*ltc2309));
+ if (!indio_dev)
+ return -ENOMEM;
+
+ ltc2309 = iio_priv(indio_dev);
+ ltc2309->dev = &indio_dev->dev;
+ ltc2309->client = client;
+ ltc2309->vref_mv = 4096; /* Default to the internal ref */
+
+ indio_dev->name = "ltc2309";
+ indio_dev->modes = INDIO_DIRECT_MODE;
+ indio_dev->channels = ltc2309_channels;
+ indio_dev->num_channels = ARRAY_SIZE(ltc2309_channels);
+ indio_dev->info = <c2309_info;
+
+ ltc2309->vref = devm_regulator_get_optional(&client->dev, "vref");
+ if (IS_ERR(ltc2309->vref)) {
+ ret = PTR_ERR(ltc2309->vref);
+ if (ret == -ENODEV)
+ ltc2309->vref = NULL;
+ else
+ return ret;
+ }
+
+ if (ltc2309->vref) {
+ ret = regulator_enable(ltc2309->vref);
+ if (ret)
+ return dev_err_probe(ltc2309->dev, ret,
+ "failed to enable vref\n");
+
+ ret = devm_add_action_or_reset(ltc2309->dev,
+ ltc2309_regulator_disable,
+ ltc2309->vref);
+ if (ret) {
+ return dev_err_probe(ltc2309->dev, ret,
+ "failed to add regulator_disable action: %d\n",
+ ret);
+ return ret;
+ }
+
+ ret = regulator_get_voltage(ltc2309->vref);
+ if (ret < 0)
+ return ret;
+
+ ltc2309->vref_mv = ret / 1000;
+ }
+
+ mutex_init(<c2309->lock);
+
+ return devm_iio_device_register(&client->dev, indio_dev);
+}
+
+static const struct of_device_id ltc2309_of_match[] = {
+ { .compatible = "lltc,ltc2309" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, ltc2309_of_match);
+
+static const struct i2c_device_id ltc2309_id[] = {
+ { "ltc2309" },
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, ltc2309_id);
+
+static struct i2c_driver ltc2309_driver = {
+ .driver = {
+ .name = "ltc2309",
+ .of_match_table = ltc2309_of_match,
+ },
+ .probe = ltc2309_probe,
+ .id_table = ltc2309_id,
+};
+module_i2c_driver(ltc2309_driver);
+
+MODULE_AUTHOR("Liam Beguin <liambeguin@gmail.com>");
+MODULE_DESCRIPTION("Linear Technology LTC2309 ADC");
+MODULE_LICENSE("GPL v2");
--
2.39.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] iio: adc: add ltc2309 support
2023-08-29 2:41 ` [PATCH v3 2/2] iio: adc: add ltc2309 support Liam Beguin
@ 2023-08-29 3:46 ` kernel test robot
2023-09-03 11:43 ` Jonathan Cameron
1 sibling, 0 replies; 7+ messages in thread
From: kernel test robot @ 2023-08-29 3:46 UTC (permalink / raw)
To: Liam Beguin, Jonathan Cameron, Lars-Peter Clausen, Liam Girdwood,
Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: oe-kbuild-all, linux-kernel, linux-iio, devicetree, Liam Beguin
Hi Liam,
kernel test robot noticed the following build warnings:
[auto build test WARNING on a5e505a99ca748583dbe558b691be1b26f05d678]
url: https://github.com/intel-lab-lkp/linux/commits/Liam-Beguin/dt-bindings-iio-adc-add-lltc-ltc2309-bindings/20230829-104615
base: a5e505a99ca748583dbe558b691be1b26f05d678
patch link: https://lore.kernel.org/r/20230828-ltc2309-v3-2-338b3a8fab8b%40gmail.com
patch subject: [PATCH v3 2/2] iio: adc: add ltc2309 support
config: sparc-allyesconfig (https://download.01.org/0day-ci/archive/20230829/202308291144.r2JZxP9a-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230829/202308291144.r2JZxP9a-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308291144.r2JZxP9a-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/iio/adc/ltc2309.c:42: warning: Function parameter or member 'vref_mv' not described in 'ltc2309'
vim +42 drivers/iio/adc/ltc2309.c
27
28 /**
29 * struct ltc2309 - internal device data structure
30 * @dev: Device reference
31 * @client: I2C reference
32 * @vref: External reference source
33 * @lock: Lock to serialize data access
34 * @vref_mv Internal voltage reference
35 */
36 struct ltc2309 {
37 struct device *dev;
38 struct i2c_client *client;
39 struct regulator *vref;
40 struct mutex lock; /* serialize data access */
41 int vref_mv;
> 42 };
43
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] iio: adc: add ltc2309 support
2023-08-29 2:41 ` [PATCH v3 2/2] iio: adc: add ltc2309 support Liam Beguin
2023-08-29 3:46 ` kernel test robot
@ 2023-09-03 11:43 ` Jonathan Cameron
2023-09-10 14:03 ` Jonathan Cameron
1 sibling, 1 reply; 7+ messages in thread
From: Jonathan Cameron @ 2023-09-03 11:43 UTC (permalink / raw)
To: Liam Beguin
Cc: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, linux-kernel, linux-iio,
devicetree
On Mon, 28 Aug 2023 22:41:35 -0400
Liam Beguin <liambeguin@gmail.com> wrote:
> The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
>
> This implements support for all single-ended and differential channels,
> in unipolar mode only.
>
> Signed-off-by: Liam Beguin <liambeguin@gmail.com>
Hi Liam,
A few really small editorial bits in here. I'll fix them whilst applying.
Series applied to the togreg branch of iio.git
Note I will be rebasing the tree on rc1 once available and in the meantime
this will only be pushed out as testing.
Thanks,
Jonathan
> +/**
> + * struct ltc2309 - internal device data structure
> + * @dev: Device reference
> + * @client: I2C reference
> + * @vref: External reference source
> + * @lock: Lock to serialize data access
> + * @vref_mv Internal voltage reference
Missing : which is what the bot picked up on.
> + */
> +struct ltc2309 {
> + struct device *dev;
> + struct i2c_client *client;
> + struct regulator *vref;
> + struct mutex lock; /* serialize data access */
> + int vref_mv;
> +};
> +
> +void ltc2309_regulator_disable(void *regulator)
> +{
> + struct regulator *r = (struct regulator *)regulator;
Never any need to explicitly cast from a void * to any other pointer type.
(C spec says it is always fine to do this :)
Given type is obvious from use, can just do
regulator_disable(regulator);
and lose the local variable.
> +
> + regulator_disable(r);
> +}
..
> +
> +static const struct of_device_id ltc2309_of_match[] = {
> + { .compatible = "lltc,ltc2309" },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, ltc2309_of_match);
> +
> +static const struct i2c_device_id ltc2309_id[] = {
> + { "ltc2309" },
> + {}
Trivial but space between { and } for consistency.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] iio: adc: add ltc2309 support
2023-09-03 11:43 ` Jonathan Cameron
@ 2023-09-10 14:03 ` Jonathan Cameron
2023-09-18 16:25 ` Liam Beguin
0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Cameron @ 2023-09-10 14:03 UTC (permalink / raw)
To: Liam Beguin
Cc: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, linux-kernel, linux-iio,
devicetree
On Sun, 3 Sep 2023 12:43:41 +0100
Jonathan Cameron <jic23@kernel.org> wrote:
> On Mon, 28 Aug 2023 22:41:35 -0400
> Liam Beguin <liambeguin@gmail.com> wrote:
>
> > The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
> >
> > This implements support for all single-ended and differential channels,
> > in unipolar mode only.
> >
> > Signed-off-by: Liam Beguin <liambeguin@gmail.com>
> Hi Liam,
>
> A few really small editorial bits in here. I'll fix them whilst applying.
> Series applied to the togreg branch of iio.git
>
> Note I will be rebasing the tree on rc1 once available and in the meantime
> this will only be pushed out as testing.
A couple more static analysis reports came in (unreachable return in one pace
and a missing static. I've fixed up in my tree.
Thanks,
Jonathan
>
> Thanks,
>
> Jonathan
>
>
>
> > +/**
> > + * struct ltc2309 - internal device data structure
> > + * @dev: Device reference
> > + * @client: I2C reference
> > + * @vref: External reference source
> > + * @lock: Lock to serialize data access
> > + * @vref_mv Internal voltage reference
>
> Missing : which is what the bot picked up on.
>
> > + */
> > +struct ltc2309 {
> > + struct device *dev;
> > + struct i2c_client *client;
> > + struct regulator *vref;
> > + struct mutex lock; /* serialize data access */
> > + int vref_mv;
> > +};
>
> > +
> > +void ltc2309_regulator_disable(void *regulator)
> > +{
> > + struct regulator *r = (struct regulator *)regulator;
>
> Never any need to explicitly cast from a void * to any other pointer type.
> (C spec says it is always fine to do this :)
>
> Given type is obvious from use, can just do
> regulator_disable(regulator);
> and lose the local variable.
>
> > +
> > + regulator_disable(r);
> > +}
>
> ..
> > +
> > +static const struct of_device_id ltc2309_of_match[] = {
> > + { .compatible = "lltc,ltc2309" },
> > + { }
> > +};
> > +MODULE_DEVICE_TABLE(of, ltc2309_of_match);
> > +
> > +static const struct i2c_device_id ltc2309_id[] = {
> > + { "ltc2309" },
> > + {}
>
> Trivial but space between { and } for consistency.
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 2/2] iio: adc: add ltc2309 support
2023-09-10 14:03 ` Jonathan Cameron
@ 2023-09-18 16:25 ` Liam Beguin
0 siblings, 0 replies; 7+ messages in thread
From: Liam Beguin @ 2023-09-18 16:25 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Lars-Peter Clausen, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, linux-kernel, linux-iio,
devicetree
Hi Jonathan,
On Sun, Sep 10, 2023 at 03:03:33PM +0100, Jonathan Cameron wrote:
> On Sun, 3 Sep 2023 12:43:41 +0100
> Jonathan Cameron <jic23@kernel.org> wrote:
>
> > On Mon, 28 Aug 2023 22:41:35 -0400
> > Liam Beguin <liambeguin@gmail.com> wrote:
> >
> > > The LTC2309 is an 8-Channel, 12-Bit SAR ADC with an I2C Interface.
> > >
> > > This implements support for all single-ended and differential channels,
> > > in unipolar mode only.
> > >
> > > Signed-off-by: Liam Beguin <liambeguin@gmail.com>
> > Hi Liam,
> >
> > A few really small editorial bits in here. I'll fix them whilst applying.
> > Series applied to the togreg branch of iio.git
> >
> > Note I will be rebasing the tree on rc1 once available and in the meantime
> > this will only be pushed out as testing.
>
> A couple more static analysis reports came in (unreachable return in one pace
> and a missing static. I've fixed up in my tree.
My apologies for the delay, I was away for a few days.
Thanks for making those changes, I'll go over the comments and the
reports, and if there's anything left, I'll send an update.
> Thanks,
>
> Jonathan
Thanks again for your time,
Liam
>
> >
> > Thanks,
> >
> > Jonathan
> >
> >
> >
> > > +/**
> > > + * struct ltc2309 - internal device data structure
> > > + * @dev: Device reference
> > > + * @client: I2C reference
> > > + * @vref: External reference source
> > > + * @lock: Lock to serialize data access
> > > + * @vref_mv Internal voltage reference
> >
> > Missing : which is what the bot picked up on.
> >
> > > + */
> > > +struct ltc2309 {
> > > + struct device *dev;
> > > + struct i2c_client *client;
> > > + struct regulator *vref;
> > > + struct mutex lock; /* serialize data access */
> > > + int vref_mv;
> > > +};
> >
> > > +
> > > +void ltc2309_regulator_disable(void *regulator)
> > > +{
> > > + struct regulator *r = (struct regulator *)regulator;
> >
> > Never any need to explicitly cast from a void * to any other pointer type.
> > (C spec says it is always fine to do this :)
> >
> > Given type is obvious from use, can just do
> > regulator_disable(regulator);
> > and lose the local variable.
> >
> > > +
> > > + regulator_disable(r);
> > > +}
> >
> > ..
> > > +
> > > +static const struct of_device_id ltc2309_of_match[] = {
> > > + { .compatible = "lltc,ltc2309" },
> > > + { }
> > > +};
> > > +MODULE_DEVICE_TABLE(of, ltc2309_of_match);
> > > +
> > > +static const struct i2c_device_id ltc2309_id[] = {
> > > + { "ltc2309" },
> > > + {}
> >
> > Trivial but space between { and } for consistency.
> >
> >
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-09-18 16:25 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-29 2:41 [PATCH v3 0/2] iio: adc: add LTC2309 support Liam Beguin
2023-08-29 2:41 ` [PATCH v3 1/2] dt-bindings: iio: adc: add lltc,ltc2309 bindings Liam Beguin
2023-08-29 2:41 ` [PATCH v3 2/2] iio: adc: add ltc2309 support Liam Beguin
2023-08-29 3:46 ` kernel test robot
2023-09-03 11:43 ` Jonathan Cameron
2023-09-10 14:03 ` Jonathan Cameron
2023-09-18 16:25 ` Liam Beguin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).