All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string
@ 2022-03-10  0:33 Marek Vasut
  2022-03-10  0:33 ` [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 " Marek Vasut
                   ` (5 more replies)
  0 siblings, 6 replies; 15+ messages in thread
From: Marek Vasut @ 2022-03-10  0:33 UTC (permalink / raw)
  To: linux-iio
  Cc: Marek Vasut, Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron, Rob Herring, devicetree

Add missing ti,ads1115 compatible string. This compatible string is
supported by the Linux kernel driver and the ads1015 is a 12bit ADC
while ads1115 is 16bit ADC. Add the missing compatible string.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: devicetree@vger.kernel.org
---
 Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml b/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml
index 2c2d01bbc296d..c31c80989cc9a 100644
--- a/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml
@@ -4,7 +4,7 @@
 $id: http://devicetree.org/schemas/iio/adc/ti,ads1015.yaml#
 $schema: http://devicetree.org/meta-schemas/core.yaml#
 
-title: TI ADS1015 4 channel I2C analog to digital converter
+title: TI ADS1015/ADS1115 4 channel I2C analog to digital converter
 
 maintainers:
   - Daniel Baluta <daniel.baluta@nxp.com>
@@ -15,7 +15,9 @@ description: |
 
 properties:
   compatible:
-    const: ti,ads1015
+    enum:
+      - ti,ads1015
+      - ti,ads1115
 
   reg:
     maxItems: 1
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 compatible string
  2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
@ 2022-03-10  0:33 ` Marek Vasut
  2022-03-10 12:52   ` Krzysztof Kozlowski
  2022-03-10  0:33 ` [PATCH 3/6] iio: adc: ti-ads1015: Switch to static const writeable ranges table Marek Vasut
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2022-03-10  0:33 UTC (permalink / raw)
  To: linux-iio
  Cc: Marek Vasut, Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron, Rob Herring, devicetree

Add ti,tla2024 compatible string. This device is compatible with
ADS1015 except it has no on-chip comparator.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: devicetree@vger.kernel.org
---
 Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml b/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml
index c31c80989cc9a..a3b79438a13a5 100644
--- a/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml
@@ -18,6 +18,7 @@ properties:
     enum:
       - ti,ads1015
       - ti,ads1115
+      - ti,tla2024
 
   reg:
     maxItems: 1
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/6] iio: adc: ti-ads1015: Switch to static const writeable ranges table
  2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
  2022-03-10  0:33 ` [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 " Marek Vasut
@ 2022-03-10  0:33 ` Marek Vasut
  2022-03-10  0:34 ` [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros Marek Vasut
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 15+ messages in thread
From: Marek Vasut @ 2022-03-10  0:33 UTC (permalink / raw)
  To: linux-iio
  Cc: Marek Vasut, Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron

Switch the driver from code implementing test whether a regmap register
is writeable to static const tables describing the test. No functional
change.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti-ads1015.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 068efbce17103..85932b9dc166a 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -273,23 +273,20 @@ static void ads1015_event_channel_disable(struct ads1015_data *data, int chan)
 	data->event_channel = ADS1015_CHANNELS;
 }
 
-static bool ads1015_is_writeable_reg(struct device *dev, unsigned int reg)
-{
-	switch (reg) {
-	case ADS1015_CFG_REG:
-	case ADS1015_LO_THRESH_REG:
-	case ADS1015_HI_THRESH_REG:
-		return true;
-	default:
-		return false;
-	}
-}
+static const struct regmap_range ads1015_writeable_ranges[] = {
+	regmap_reg_range(ADS1015_CFG_REG, ADS1015_HI_THRESH_REG),
+};
+
+static const struct regmap_access_table ads1015_writeable_table = {
+	.yes_ranges = ads1015_writeable_ranges,
+	.n_yes_ranges = ARRAY_SIZE(ads1015_writeable_ranges),
+};
 
 static const struct regmap_config ads1015_regmap_config = {
 	.reg_bits = 8,
 	.val_bits = 16,
 	.max_register = ADS1015_HI_THRESH_REG,
-	.writeable_reg = ads1015_is_writeable_reg,
+	.wr_table = &ads1015_writeable_table,
 };
 
 static const struct iio_chan_spec ads1015_channels[] = {
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
  2022-03-10  0:33 ` [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 " Marek Vasut
  2022-03-10  0:33 ` [PATCH 3/6] iio: adc: ti-ads1015: Switch to static const writeable ranges table Marek Vasut
@ 2022-03-10  0:34 ` Marek Vasut
  2022-03-10 14:25   ` Andy Shevchenko
  2022-03-10  0:34 ` [PATCH 5/6] iio: adc: ti-ads1015: Make channel event_spec optional Marek Vasut
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2022-03-10  0:34 UTC (permalink / raw)
  To: linux-iio
  Cc: Marek Vasut, Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron

These macros differ only in the number of valid bits of each ADC sample
and the shift of those bits, i.e. ADS1015 is 12bit ADC shifted by 4 left,
ADS1115 is 16bit ADC shifted by 0. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti-ads1015.c | 86 +++++++++---------------------------
 1 file changed, 22 insertions(+), 64 deletions(-)

diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 85932b9dc166a..fc3381ff34710 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -134,7 +134,7 @@ static const struct iio_event_spec ads1015_events[] = {
 	},
 };
 
-#define ADS1015_V_CHAN(_chan, _addr) {				\
+#define ADS1015_V_CHAN(_chan, _addr, _realbits, _shift) {	\
 	.type = IIO_VOLTAGE,					\
 	.indexed = 1,						\
 	.address = _addr,					\
@@ -145,9 +145,9 @@ static const struct iio_event_spec ads1015_events[] = {
 	.scan_index = _addr,					\
 	.scan_type = {						\
 		.sign = 's',					\
-		.realbits = 12,					\
+		.realbits = (_realbits),			\
 		.storagebits = 16,				\
-		.shift = 4,					\
+		.shift = (_shift),				\
 		.endianness = IIO_CPU,				\
 	},							\
 	.event_spec = ads1015_events,				\
@@ -155,7 +155,7 @@ static const struct iio_event_spec ads1015_events[] = {
 	.datasheet_name = "AIN"#_chan,				\
 }
 
-#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr) {		\
+#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr, _realbits, _shift) { \
 	.type = IIO_VOLTAGE,					\
 	.differential = 1,					\
 	.indexed = 1,						\
@@ -168,51 +168,9 @@ static const struct iio_event_spec ads1015_events[] = {
 	.scan_index = _addr,					\
 	.scan_type = {						\
 		.sign = 's',					\
-		.realbits = 12,					\
-		.storagebits = 16,				\
-		.shift = 4,					\
-		.endianness = IIO_CPU,				\
-	},							\
-	.event_spec = ads1015_events,				\
-	.num_event_specs = ARRAY_SIZE(ads1015_events),		\
-	.datasheet_name = "AIN"#_chan"-AIN"#_chan2,		\
-}
-
-#define ADS1115_V_CHAN(_chan, _addr) {				\
-	.type = IIO_VOLTAGE,					\
-	.indexed = 1,						\
-	.address = _addr,					\
-	.channel = _chan,					\
-	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |		\
-				BIT(IIO_CHAN_INFO_SCALE) |	\
-				BIT(IIO_CHAN_INFO_SAMP_FREQ),	\
-	.scan_index = _addr,					\
-	.scan_type = {						\
-		.sign = 's',					\
-		.realbits = 16,					\
-		.storagebits = 16,				\
-		.endianness = IIO_CPU,				\
-	},							\
-	.event_spec = ads1015_events,				\
-	.num_event_specs = ARRAY_SIZE(ads1015_events),		\
-	.datasheet_name = "AIN"#_chan,				\
-}
-
-#define ADS1115_V_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) |		\
-				BIT(IIO_CHAN_INFO_SCALE) |	\
-				BIT(IIO_CHAN_INFO_SAMP_FREQ),	\
-	.scan_index = _addr,					\
-	.scan_type = {						\
-		.sign = 's',					\
-		.realbits = 16,					\
+		.realbits = (_realbits),			\
 		.storagebits = 16,				\
+		.shift = (_shift),				\
 		.endianness = IIO_CPU,				\
 	},							\
 	.event_spec = ads1015_events,				\
@@ -290,26 +248,26 @@ static const struct regmap_config ads1015_regmap_config = {
 };
 
 static const struct iio_chan_spec ads1015_channels[] = {
-	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
-	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
-	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
-	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
-	ADS1015_V_CHAN(0, ADS1015_AIN0),
-	ADS1015_V_CHAN(1, ADS1015_AIN1),
-	ADS1015_V_CHAN(2, ADS1015_AIN2),
-	ADS1015_V_CHAN(3, ADS1015_AIN3),
+	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4),
+	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 12, 4),
+	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 12, 4),
+	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 12, 4),
+	ADS1015_V_CHAN(0, ADS1015_AIN0, 12, 4),
+	ADS1015_V_CHAN(1, ADS1015_AIN1, 12, 4),
+	ADS1015_V_CHAN(2, ADS1015_AIN2, 12, 4),
+	ADS1015_V_CHAN(3, ADS1015_AIN3, 12, 4),
 	IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
 };
 
 static const struct iio_chan_spec ads1115_channels[] = {
-	ADS1115_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1),
-	ADS1115_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3),
-	ADS1115_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3),
-	ADS1115_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3),
-	ADS1115_V_CHAN(0, ADS1015_AIN0),
-	ADS1115_V_CHAN(1, ADS1015_AIN1),
-	ADS1115_V_CHAN(2, ADS1015_AIN2),
-	ADS1115_V_CHAN(3, ADS1015_AIN3),
+	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 16, 0),
+	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 16, 0),
+	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 16, 0),
+	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 16, 0),
+	ADS1015_V_CHAN(0, ADS1015_AIN0, 16, 0),
+	ADS1015_V_CHAN(1, ADS1015_AIN1, 16, 0),
+	ADS1015_V_CHAN(2, ADS1015_AIN2, 16, 0),
+	ADS1015_V_CHAN(3, ADS1015_AIN3, 16, 0),
 	IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
 };
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 5/6] iio: adc: ti-ads1015: Make channel event_spec optional
  2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
                   ` (2 preceding siblings ...)
  2022-03-10  0:34 ` [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros Marek Vasut
@ 2022-03-10  0:34 ` Marek Vasut
  2022-03-10  0:34 ` [PATCH 6/6] iio: adc: ti-ads1015: Add TLA2024 support Marek Vasut
  2022-03-10 12:51 ` [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Krzysztof Kozlowski
  5 siblings, 0 replies; 15+ messages in thread
From: Marek Vasut @ 2022-03-10  0:34 UTC (permalink / raw)
  To: linux-iio
  Cc: Marek Vasut, Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron

Pass event_spec and num_event_specs to ADS1015_V_CHAN and ADS1015_V_DIFF_CHAN
macros, to make it possible to pass no event_spec at all for chips which have
no comparator and thus no events. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti-ads1015.c | 60 +++++++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 22 deletions(-)

diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index fc3381ff34710..7d0c0552f425c 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -134,7 +134,7 @@ static const struct iio_event_spec ads1015_events[] = {
 	},
 };
 
-#define ADS1015_V_CHAN(_chan, _addr, _realbits, _shift) {	\
+#define ADS1015_V_CHAN(_chan, _addr, _realbits, _shift, _event_spec, _num_event_specs) { \
 	.type = IIO_VOLTAGE,					\
 	.indexed = 1,						\
 	.address = _addr,					\
@@ -150,12 +150,12 @@ static const struct iio_event_spec ads1015_events[] = {
 		.shift = (_shift),				\
 		.endianness = IIO_CPU,				\
 	},							\
-	.event_spec = ads1015_events,				\
-	.num_event_specs = ARRAY_SIZE(ads1015_events),		\
+	.event_spec = (_event_spec),				\
+	.num_event_specs = (_num_event_specs),			\
 	.datasheet_name = "AIN"#_chan,				\
 }
 
-#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr, _realbits, _shift) { \
+#define ADS1015_V_DIFF_CHAN(_chan, _chan2, _addr, _realbits, _shift, _event_spec, _num_event_specs) { \
 	.type = IIO_VOLTAGE,					\
 	.differential = 1,					\
 	.indexed = 1,						\
@@ -173,8 +173,8 @@ static const struct iio_event_spec ads1015_events[] = {
 		.shift = (_shift),				\
 		.endianness = IIO_CPU,				\
 	},							\
-	.event_spec = ads1015_events,				\
-	.num_event_specs = ARRAY_SIZE(ads1015_events),		\
+	.event_spec = (_event_spec),				\
+	.num_event_specs = (_num_event_specs),			\
 	.datasheet_name = "AIN"#_chan"-AIN"#_chan2,		\
 }
 
@@ -248,26 +248,42 @@ static const struct regmap_config ads1015_regmap_config = {
 };
 
 static const struct iio_chan_spec ads1015_channels[] = {
-	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4),
-	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 12, 4),
-	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 12, 4),
-	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 12, 4),
-	ADS1015_V_CHAN(0, ADS1015_AIN0, 12, 4),
-	ADS1015_V_CHAN(1, ADS1015_AIN1, 12, 4),
-	ADS1015_V_CHAN(2, ADS1015_AIN2, 12, 4),
-	ADS1015_V_CHAN(3, ADS1015_AIN3, 12, 4),
+	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 12, 4,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 12, 4,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 12, 4,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(0, ADS1015_AIN0, 12, 4,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(1, ADS1015_AIN1, 12, 4,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(2, ADS1015_AIN2, 12, 4,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(3, ADS1015_AIN3, 12, 4,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
 	IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
 };
 
 static const struct iio_chan_spec ads1115_channels[] = {
-	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 16, 0),
-	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 16, 0),
-	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 16, 0),
-	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 16, 0),
-	ADS1015_V_CHAN(0, ADS1015_AIN0, 16, 0),
-	ADS1015_V_CHAN(1, ADS1015_AIN1, 16, 0),
-	ADS1015_V_CHAN(2, ADS1015_AIN2, 16, 0),
-	ADS1015_V_CHAN(3, ADS1015_AIN3, 16, 0),
+	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 16, 0,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 16, 0,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 16, 0,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 16, 0,
+			    ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(0, ADS1015_AIN0, 16, 0,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(1, ADS1015_AIN1, 16, 0,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(2, ADS1015_AIN2, 16, 0,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
+	ADS1015_V_CHAN(3, ADS1015_AIN3, 16, 0,
+		       ads1015_events, ARRAY_SIZE(ads1015_events)),
 	IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
 };
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 6/6] iio: adc: ti-ads1015: Add TLA2024 support
  2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
                   ` (3 preceding siblings ...)
  2022-03-10  0:34 ` [PATCH 5/6] iio: adc: ti-ads1015: Make channel event_spec optional Marek Vasut
@ 2022-03-10  0:34 ` Marek Vasut
  2022-03-10 12:51 ` [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Krzysztof Kozlowski
  5 siblings, 0 replies; 15+ messages in thread
From: Marek Vasut @ 2022-03-10  0:34 UTC (permalink / raw)
  To: linux-iio
  Cc: Marek Vasut, Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron

Add support for TI TLA2024 ADC. This chip is compatible with ADS1015
except it has no comparator in it, hence the comparator configuration
bits are missing in Configuration Register and the Hi_Thresh/Lo_Thresh
registers are missing as well and so is event support.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Daniel Baluta <daniel.baluta@nxp.com>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/adc/ti-ads1015.c | 53 ++++++++++++++++++++++++++++++++++--
 1 file changed, 51 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
index 7d0c0552f425c..dd36fe0a45cba 100644
--- a/drivers/iio/adc/ti-ads1015.c
+++ b/drivers/iio/adc/ti-ads1015.c
@@ -80,6 +80,7 @@ enum chip_ids {
 	ADSXXXX = 0,
 	ADS1015,
 	ADS1115,
+	TLA2024,
 };
 
 enum ads1015_channels {
@@ -247,6 +248,22 @@ static const struct regmap_config ads1015_regmap_config = {
 	.wr_table = &ads1015_writeable_table,
 };
 
+static const struct regmap_range tla2024_writeable_ranges[] = {
+	regmap_reg_range(ADS1015_CFG_REG, ADS1015_CFG_REG),
+};
+
+static const struct regmap_access_table tla2024_writeable_table = {
+	.yes_ranges = tla2024_writeable_ranges,
+	.n_yes_ranges = ARRAY_SIZE(tla2024_writeable_ranges),
+};
+
+static const struct regmap_config tla2024_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 16,
+	.max_register = ADS1015_CFG_REG,
+	.wr_table = &tla2024_writeable_table,
+};
+
 static const struct iio_chan_spec ads1015_channels[] = {
 	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4,
 			    ads1015_events, ARRAY_SIZE(ads1015_events)),
@@ -287,6 +304,19 @@ static const struct iio_chan_spec ads1115_channels[] = {
 	IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
 };
 
+static const struct iio_chan_spec tla2024_channels[] = {
+	ADS1015_V_DIFF_CHAN(0, 1, ADS1015_AIN0_AIN1, 12, 4, NULL, 0),
+	ADS1015_V_DIFF_CHAN(0, 3, ADS1015_AIN0_AIN3, 12, 4, NULL, 0),
+	ADS1015_V_DIFF_CHAN(1, 3, ADS1015_AIN1_AIN3, 12, 4, NULL, 0),
+	ADS1015_V_DIFF_CHAN(2, 3, ADS1015_AIN2_AIN3, 12, 4, NULL, 0),
+	ADS1015_V_CHAN(0, ADS1015_AIN0, 12, 4, NULL, 0),
+	ADS1015_V_CHAN(1, ADS1015_AIN1, 12, 4, NULL, 0),
+	ADS1015_V_CHAN(2, ADS1015_AIN2, 12, 4, NULL, 0),
+	ADS1015_V_CHAN(3, ADS1015_AIN3, 12, 4, NULL, 0),
+	IIO_CHAN_SOFT_TIMESTAMP(ADS1015_TIMESTAMP),
+};
+
+
 #ifdef CONFIG_PM
 static int ads1015_set_power_state(struct ads1015_data *data, bool on)
 {
@@ -823,6 +853,12 @@ static const struct iio_info ads1115_info = {
 	.attrs          = &ads1115_attribute_group,
 };
 
+static const struct iio_info tla2024_info = {
+	.read_raw	= ads1015_read_raw,
+	.write_raw	= ads1015_write_raw,
+	.attrs          = &ads1115_attribute_group,
+};
+
 static int ads1015_client_get_channels_config(struct i2c_client *client)
 {
 	struct iio_dev *indio_dev = i2c_get_clientdata(client);
@@ -937,6 +973,12 @@ static int ads1015_probe(struct i2c_client *client,
 		indio_dev->info = &ads1115_info;
 		data->data_rate = (unsigned int *) &ads1115_data_rate;
 		break;
+	case TLA2024:
+		indio_dev->channels = tla2024_channels;
+		indio_dev->num_channels = ARRAY_SIZE(tla2024_channels);
+		indio_dev->info = &tla2024_info;
+		data->data_rate = (unsigned int *) &ads1015_data_rate;
+		break;
 	default:
 		dev_err(&client->dev, "Unknown chip %d\n", chip);
 		return -EINVAL;
@@ -957,7 +999,9 @@ static int ads1015_probe(struct i2c_client *client,
 	/* we need to keep this ABI the same as used by hwmon ADS1015 driver */
 	ads1015_get_channels_config(client);
 
-	data->regmap = devm_regmap_init_i2c(client, &ads1015_regmap_config);
+	data->regmap = devm_regmap_init_i2c(client, (chip == TLA2024) ?
+					    &tla2024_regmap_config :
+					    &ads1015_regmap_config);
 	if (IS_ERR(data->regmap)) {
 		dev_err(&client->dev, "Failed to allocate register map\n");
 		return PTR_ERR(data->regmap);
@@ -971,7 +1015,7 @@ static int ads1015_probe(struct i2c_client *client,
 		return ret;
 	}
 
-	if (client->irq) {
+	if (client->irq && chip != TLA2024) {
 		unsigned long irq_trig =
 			irqd_get_trigger_type(irq_get_irq_data(client->irq));
 		unsigned int cfg_comp_mask = ADS1015_CFG_COMP_QUE_MASK |
@@ -1073,6 +1117,7 @@ static const struct dev_pm_ops ads1015_pm_ops = {
 static const struct i2c_device_id ads1015_id[] = {
 	{"ads1015", ADS1015},
 	{"ads1115", ADS1115},
+	{"tla2024", TLA2024},
 	{}
 };
 MODULE_DEVICE_TABLE(i2c, ads1015_id);
@@ -1086,6 +1131,10 @@ static const struct of_device_id ads1015_of_match[] = {
 		.compatible = "ti,ads1115",
 		.data = (void *)ADS1115
 	},
+	{
+		.compatible = "ti,tla2024",
+		.data = (void *)TLA2024
+	},
 	{}
 };
 MODULE_DEVICE_TABLE(of, ads1015_of_match);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string
  2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
                   ` (4 preceding siblings ...)
  2022-03-10  0:34 ` [PATCH 6/6] iio: adc: ti-ads1015: Add TLA2024 support Marek Vasut
@ 2022-03-10 12:51 ` Krzysztof Kozlowski
  5 siblings, 0 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2022-03-10 12:51 UTC (permalink / raw)
  To: Marek Vasut, linux-iio
  Cc: Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron, Rob Herring, devicetree

On 10/03/2022 01:33, Marek Vasut wrote:
> Add missing ti,ads1115 compatible string. This compatible string is
> supported by the Linux kernel driver and the ads1015 is a 12bit ADC
> while ads1115 is 16bit ADC. Add the missing compatible string.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Daniel Baluta <daniel.baluta@nxp.com>
> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: devicetree@vger.kernel.org
> ---
>  Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 compatible string
  2022-03-10  0:33 ` [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 " Marek Vasut
@ 2022-03-10 12:52   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 15+ messages in thread
From: Krzysztof Kozlowski @ 2022-03-10 12:52 UTC (permalink / raw)
  To: Marek Vasut, linux-iio
  Cc: Andy Shevchenko, Andy Shevchenko, Daniel Baluta,
	Jonathan Cameron, Rob Herring, devicetree

On 10/03/2022 01:33, Marek Vasut wrote:
> Add ti,tla2024 compatible string. This device is compatible with
> ADS1015 except it has no on-chip comparator.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Daniel Baluta <daniel.baluta@nxp.com>
> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: devicetree@vger.kernel.org
> ---
>  Documentation/devicetree/bindings/iio/adc/ti,ads1015.yaml | 1 +
>  1 file changed, 1 insertion(+)
> 


Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-10  0:34 ` [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros Marek Vasut
@ 2022-03-10 14:25   ` Andy Shevchenko
  2022-03-10 23:29     ` Marek Vasut
  0 siblings, 1 reply; 15+ messages in thread
From: Andy Shevchenko @ 2022-03-10 14:25 UTC (permalink / raw)
  To: Marek Vasut; +Cc: linux-iio, Daniel Baluta, Jonathan Cameron

On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:
> These macros differ only in the number of valid bits of each ADC sample
> and the shift of those bits, i.e. ADS1015 is 12bit ADC shifted by 4 left,
> ADS1115 is 16bit ADC shifted by 0. No functional change.

> Signed-off-by: Marek Vasut <marex@denx.de>

...

> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Daniel Baluta <daniel.baluta@nxp.com>
> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>

You may consider using --cc parameter in `git send-email` to avoid this noise
in the commit messages.

...

> -		.realbits = 12,					\
> +		.realbits = (_realbits),			\
>  		.storagebits = 16,				\

This seems inconsistent a bit. What if the next chip wants to have more than
16 bits in realbits?

...

> -		.realbits = 16,					\
> +		.realbits = (_realbits),			\
>  		.storagebits = 16,				\

Ditto.

I see two options:
1) add static assert to make sure realbits <= storagebits;
2) make it also configurable.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-10 14:25   ` Andy Shevchenko
@ 2022-03-10 23:29     ` Marek Vasut
  2022-03-11 11:29       ` Andy Shevchenko
  0 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2022-03-10 23:29 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: linux-iio, Daniel Baluta, Jonathan Cameron

On 3/10/22 15:25, Andy Shevchenko wrote:
> On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:
>> These macros differ only in the number of valid bits of each ADC sample
>> and the shift of those bits, i.e. ADS1015 is 12bit ADC shifted by 4 left,
>> ADS1115 is 16bit ADC shifted by 0. No functional change.
> 
>> Signed-off-by: Marek Vasut <marex@denx.de>
> 
> ...
> 
>> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
>> Cc: Daniel Baluta <daniel.baluta@nxp.com>
>> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> You may consider using --cc parameter in `git send-email` to avoid this noise
> in the commit messages.

This is deliberate so I can keep track of who to CC on which patch.

> ...
> 
>> -		.realbits = 12,					\
>> +		.realbits = (_realbits),			\
>>   		.storagebits = 16,				\
> 
> This seems inconsistent a bit. What if the next chip wants to have more than
> 16 bits in realbits?

When such a chip exists, this can be parametrized as well.

> ...
> 
>> -		.realbits = 16,					\
>> +		.realbits = (_realbits),			\
>>   		.storagebits = 16,				\
> 
> Ditto.
> 
> I see two options:
> 1) add static assert to make sure realbits <= storagebits;

Does static_assert work in array of structures (I don't think it does) ?

> 2) make it also configurable.

That would be unnecessary duplication, this patch is trying to 
DEduplicate the driver code, not REduplicate it differently.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-10 23:29     ` Marek Vasut
@ 2022-03-11 11:29       ` Andy Shevchenko
  2022-03-11 11:33         ` Marek Vasut
  0 siblings, 1 reply; 15+ messages in thread
From: Andy Shevchenko @ 2022-03-11 11:29 UTC (permalink / raw)
  To: Marek Vasut; +Cc: Andy Shevchenko, linux-iio, Daniel Baluta, Jonathan Cameron

On Fri, Mar 11, 2022 at 1:55 AM Marek Vasut <marex@denx.de> wrote:
> On 3/10/22 15:25, Andy Shevchenko wrote:
> > On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:

...

> >> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> >> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> >> Cc: Daniel Baluta <daniel.baluta@nxp.com>
> >> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >
> > You may consider using --cc parameter in `git send-email` to avoid this noise
> > in the commit messages.
>
> This is deliberate so I can keep track of who to CC on which patch.

You may add the Link tag to lore (which `b4` tool can do
automatically), so you can always access the email from the archives
and track this down. No need to have this in each of the commit
messages.

...

> >> -            .realbits = 12,                                 \
> >> +            .realbits = (_realbits),                        \
> >>              .storagebits = 16,                              \
> >
> > This seems inconsistent a bit. What if the next chip wants to have more than
> > 16 bits in realbits?
>
> When such a chip exists, this can be parametrized as well.

Yes, My point is that it's error prone.

...

> > I see two options:
> > 1) add static assert to make sure realbits <= storagebits;
>
> Does static_assert work in array of structures (I don't think it does) ?

You can check, but IIRC some of the macros have it. Don't remember the
details, though.

> > 2) make it also configurable.
>
> That would be unnecessary duplication, this patch is trying to
> DEduplicate the driver code, not REduplicate it differently.

-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-11 11:29       ` Andy Shevchenko
@ 2022-03-11 11:33         ` Marek Vasut
  2022-03-11 17:03           ` Andy Shevchenko
  0 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2022-03-11 11:33 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Andy Shevchenko, linux-iio, Daniel Baluta, Jonathan Cameron

On 3/11/22 12:29, Andy Shevchenko wrote:
> On Fri, Mar 11, 2022 at 1:55 AM Marek Vasut <marex@denx.de> wrote:
>> On 3/10/22 15:25, Andy Shevchenko wrote:
>>> On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:
> 
> ...
> 
>>>> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
>>>> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
>>>> Cc: Daniel Baluta <daniel.baluta@nxp.com>
>>>> Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>>>
>>> You may consider using --cc parameter in `git send-email` to avoid this noise
>>> in the commit messages.
>>
>> This is deliberate so I can keep track of who to CC on which patch.
> 
> You may add the Link tag to lore (which `b4` tool can do
> automatically), so you can always access the email from the archives
> and track this down. No need to have this in each of the commit
> messages.

This is used by git-send-email to put the right people on Cc, not by Lore.

> ...
> 
>>>> -            .realbits = 12,                                 \
>>>> +            .realbits = (_realbits),                        \
>>>>               .storagebits = 16,                              \
>>>
>>> This seems inconsistent a bit. What if the next chip wants to have more than
>>> 16 bits in realbits?
>>
>> When such a chip exists, this can be parametrized as well.
> 
> Yes, My point is that it's error prone.

Won't IIO core warn if realbits > storagebits ?

> ...
> 
>>> I see two options:
>>> 1) add static assert to make sure realbits <= storagebits;
>>
>> Does static_assert work in array of structures (I don't think it does) ?
> 
> You can check, but IIRC some of the macros have it. Don't remember the
> details, though.

I already checked before replying, hence my question, as I didn't find a 
way to make it work.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-11 11:33         ` Marek Vasut
@ 2022-03-11 17:03           ` Andy Shevchenko
  2022-03-11 18:51             ` Marek Vasut
  0 siblings, 1 reply; 15+ messages in thread
From: Andy Shevchenko @ 2022-03-11 17:03 UTC (permalink / raw)
  To: Marek Vasut; +Cc: linux-iio, Daniel Baluta, Jonathan Cameron

On Fri, Mar 11, 2022 at 12:33:49PM +0100, Marek Vasut wrote:
> On 3/11/22 12:29, Andy Shevchenko wrote:
> > On Fri, Mar 11, 2022 at 1:55 AM Marek Vasut <marex@denx.de> wrote:
> > > On 3/10/22 15:25, Andy Shevchenko wrote:
> > > > On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:

...

> > > > > -            .realbits = 12,                                 \
> > > > > +            .realbits = (_realbits),                        \
> > > > >               .storagebits = 16,                              \
> > > > 
> > > > This seems inconsistent a bit. What if the next chip wants to have more than
> > > > 16 bits in realbits?
> > > 
> > > When such a chip exists, this can be parametrized as well.
> > 
> > Yes, My point is that it's error prone.
> 
> Won't IIO core warn if realbits > storagebits ?

If it's the case, then it's very good!

...

> > > > I see two options:
> > > > 1) add static assert to make sure realbits <= storagebits;
> > > 
> > > Does static_assert work in array of structures (I don't think it does) ?
> > 
> > You can check, but IIRC some of the macros have it. Don't remember the
> > details, though.
> 
> I already checked before replying, hence my question, as I didn't find a way
> to make it work.

It seems that current use cases have it either in functions or in
the expressions as ({...}). I dunno if the result of ({...}) can be
a data structure or compound literal.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-11 17:03           ` Andy Shevchenko
@ 2022-03-11 18:51             ` Marek Vasut
  2022-03-20 13:22               ` Jonathan Cameron
  0 siblings, 1 reply; 15+ messages in thread
From: Marek Vasut @ 2022-03-11 18:51 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: linux-iio, Daniel Baluta, Jonathan Cameron

On 3/11/22 18:03, Andy Shevchenko wrote:
> On Fri, Mar 11, 2022 at 12:33:49PM +0100, Marek Vasut wrote:
>> On 3/11/22 12:29, Andy Shevchenko wrote:
>>> On Fri, Mar 11, 2022 at 1:55 AM Marek Vasut <marex@denx.de> wrote:
>>>> On 3/10/22 15:25, Andy Shevchenko wrote:
>>>>> On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:
> 
> ...
> 
>>>>>> -            .realbits = 12,                                 \
>>>>>> +            .realbits = (_realbits),                        \
>>>>>>                .storagebits = 16,                              \
>>>>>
>>>>> This seems inconsistent a bit. What if the next chip wants to have more than
>>>>> 16 bits in realbits?
>>>>
>>>> When such a chip exists, this can be parametrized as well.
>>>
>>> Yes, My point is that it's error prone.
>>
>> Won't IIO core warn if realbits > storagebits ?
> 
> If it's the case, then it's very good!

No, apparently it won't .

> ...
> 
>>>>> I see two options:
>>>>> 1) add static assert to make sure realbits <= storagebits;
>>>>
>>>> Does static_assert work in array of structures (I don't think it does) ?
>>>
>>> You can check, but IIRC some of the macros have it. Don't remember the
>>> details, though.
>>
>> I already checked before replying, hence my question, as I didn't find a way
>> to make it work.
> 
> It seems that current use cases have it either in functions or in
> the expressions as ({...}). I dunno if the result of ({...}) can be
> a data structure or compound literal.

I added a patch to v2, but ugh, it isn't nice:

[PATCH v2 7/7] iio: adc: ti-ads1015: Add static assert to test if 
shifted realbits fit into storagebits

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros
  2022-03-11 18:51             ` Marek Vasut
@ 2022-03-20 13:22               ` Jonathan Cameron
  0 siblings, 0 replies; 15+ messages in thread
From: Jonathan Cameron @ 2022-03-20 13:22 UTC (permalink / raw)
  To: Marek Vasut; +Cc: Andy Shevchenko, linux-iio, Daniel Baluta, Jonathan Cameron

On Fri, 11 Mar 2022 19:51:56 +0100
Marek Vasut <marex@denx.de> wrote:

> On 3/11/22 18:03, Andy Shevchenko wrote:
> > On Fri, Mar 11, 2022 at 12:33:49PM +0100, Marek Vasut wrote:  
> >> On 3/11/22 12:29, Andy Shevchenko wrote:  
> >>> On Fri, Mar 11, 2022 at 1:55 AM Marek Vasut <marex@denx.de> wrote:  
> >>>> On 3/10/22 15:25, Andy Shevchenko wrote:  
> >>>>> On Thu, Mar 10, 2022 at 01:34:00AM +0100, Marek Vasut wrote:  
> > 
> > ...
> >   
> >>>>>> -            .realbits = 12,                                 \
> >>>>>> +            .realbits = (_realbits),                        \
> >>>>>>                .storagebits = 16,                              \  
> >>>>>
> >>>>> This seems inconsistent a bit. What if the next chip wants to have more than
> >>>>> 16 bits in realbits?  
> >>>>
> >>>> When such a chip exists, this can be parametrized as well.  
> >>>
> >>> Yes, My point is that it's error prone.  
> >>
> >> Won't IIO core warn if realbits > storagebits ?  
> > 
> > If it's the case, then it's very good!  
> 
> No, apparently it won't .

Easy to add I think and a good idea. Though can only be a runtime
check obviously.

Put a verification check in iio_buffer_add_channel_sys() which
is registering the _type attr used to get access to this info from
user space.

Jonathan

> 
> > ...
> >   
> >>>>> I see two options:
> >>>>> 1) add static assert to make sure realbits <= storagebits;  
> >>>>
> >>>> Does static_assert work in array of structures (I don't think it does) ?  
> >>>
> >>> You can check, but IIRC some of the macros have it. Don't remember the
> >>> details, though.  
> >>
> >> I already checked before replying, hence my question, as I didn't find a way
> >> to make it work.  
> > 
> > It seems that current use cases have it either in functions or in
> > the expressions as ({...}). I dunno if the result of ({...}) can be
> > a data structure or compound literal.  
> 
> I added a patch to v2, but ugh, it isn't nice:
> 
> [PATCH v2 7/7] iio: adc: ti-ads1015: Add static assert to test if 
> shifted realbits fit into storagebits


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2022-03-20 13:15 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-10  0:33 [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Marek Vasut
2022-03-10  0:33 ` [PATCH 2/6] dt-bindings: iio: adc: ti,ads1015: Add TLA2024 " Marek Vasut
2022-03-10 12:52   ` Krzysztof Kozlowski
2022-03-10  0:33 ` [PATCH 3/6] iio: adc: ti-ads1015: Switch to static const writeable ranges table Marek Vasut
2022-03-10  0:34 ` [PATCH 4/6] iio: adc: ti-ads1015: Deduplicate channel macros Marek Vasut
2022-03-10 14:25   ` Andy Shevchenko
2022-03-10 23:29     ` Marek Vasut
2022-03-11 11:29       ` Andy Shevchenko
2022-03-11 11:33         ` Marek Vasut
2022-03-11 17:03           ` Andy Shevchenko
2022-03-11 18:51             ` Marek Vasut
2022-03-20 13:22               ` Jonathan Cameron
2022-03-10  0:34 ` [PATCH 5/6] iio: adc: ti-ads1015: Make channel event_spec optional Marek Vasut
2022-03-10  0:34 ` [PATCH 6/6] iio: adc: ti-ads1015: Add TLA2024 support Marek Vasut
2022-03-10 12:51 ` [PATCH 1/6] dt-bindings: iio: adc: ti,ads1015: Add missing ADS1115 compatible string Krzysztof Kozlowski

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.