* [PATCH v3 1/5] iio: pressure: ms5637: Add missing ms5803 I2C device ID
[not found] <20260820141224.23730-1-adamianlouis@gmail.com>
@ 2026-08-20 14:12 ` Louis Adamian
2026-08-20 14:12 ` [PATCH v3 2/5] iio: pressure: ms5637: Move device data struct to header Louis Adamian
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Louis Adamian @ 2026-08-20 14:12 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
Rob Herring, Alexandre Belloni
Cc: Louis Adamian, Jonathan Cameron, linux-iio, linux-kernel
meas,ms5803 is in the OF match table with no corresponding entry in
ms5637_id.
Fixes: 649ef114a0a0 ("iio:pressure:ms5637: add ms5803 support")
Signed-off-by: Louis Adamian <adamianlouis@gmail.com>
---
drivers/iio/pressure/ms5637.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/iio/pressure/ms5637.c b/drivers/iio/pressure/ms5637.c
index be8921644558..4f9f556bd123 100644
--- a/drivers/iio/pressure/ms5637.c
+++ b/drivers/iio/pressure/ms5637.c
@@ -215,6 +215,7 @@ static const struct ms_tp_data ms8607_data = {
static const struct i2c_device_id ms5637_id[] = {
{ .name = "ms5637", .driver_data = (kernel_ulong_t)&ms5637_data },
+ { .name = "ms5803", .driver_data = (kernel_ulong_t)&ms5803_data },
{ .name = "ms5805", .driver_data = (kernel_ulong_t)&ms5805_data },
{ .name = "ms5837", .driver_data = (kernel_ulong_t)&ms5837_data },
{ .name = "ms8607-temppressure", .driver_data = (kernel_ulong_t)&ms8607_data },
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/5] iio: pressure: ms5637: Move device data struct to header
[not found] <20260820141224.23730-1-adamianlouis@gmail.com>
2026-08-20 14:12 ` [PATCH v3 1/5] iio: pressure: ms5637: Add missing ms5803 I2C device ID Louis Adamian
@ 2026-08-20 14:12 ` Louis Adamian
2026-08-20 14:12 ` [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637 Louis Adamian
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Louis Adamian @ 2026-08-20 14:12 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: Louis Adamian, linux-iio, linux-kernel
ms_tp_dev duplicated the hw pointer already in ms_tp_data. This stores a
pointer to ms_tp_data instead which requires moving the struct
definition from ms5637.c to ms_sensors_i2c.h.
No functional change intended
Signed-off-by: Louis Adamian <adamianlouis@gmail.com>
---
drivers/iio/common/ms_sensors/ms_sensors_i2c.c | 4 ++--
drivers/iio/common/ms_sensors/ms_sensors_i2c.h | 13 ++++++++++++-
drivers/iio/pressure/ms5637.c | 9 ++-------
3 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/drivers/iio/common/ms_sensors/ms_sensors_i2c.c b/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
index 1960a2ce82a8..f9dc7c7468c1 100644
--- a/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
+++ b/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
@@ -579,7 +579,7 @@ int ms_sensors_tp_read_prom(struct ms_tp_dev *dev_data)
int i, ret;
bool valid;
- for (i = 0; i < dev_data->hw->prom_len; i++) {
+ for (i = 0; i < dev_data->data->hw->prom_len; i++) {
ret = ms_sensors_read_prom_word(
dev_data->client,
MS_SENSORS_TP_PROM_READ + (i << 1),
@@ -589,7 +589,7 @@ int ms_sensors_tp_read_prom(struct ms_tp_dev *dev_data)
return ret;
}
- if (dev_data->hw->prom_len == 8)
+ if (dev_data->data->hw->prom_len == 8)
valid = ms_sensors_tp_crc_valid_128(dev_data->prom);
else
valid = ms_sensors_tp_crc_valid_112(dev_data->prom);
diff --git a/drivers/iio/common/ms_sensors/ms_sensors_i2c.h b/drivers/iio/common/ms_sensors/ms_sensors_i2c.h
index f15b973f27c6..d9898098c066 100644
--- a/drivers/iio/common/ms_sensors/ms_sensors_i2c.h
+++ b/drivers/iio/common/ms_sensors/ms_sensors_i2c.h
@@ -35,6 +35,16 @@ struct ms_tp_hw_data {
u8 max_res_index;
};
+/**
+ * struct ms_tp_data - Temperature/Pressure sensor data
+ * @name: Device name
+ * @hw: Sensor hardware data
+ */
+struct ms_tp_data {
+ const char *name;
+ const struct ms_tp_hw_data *hw;
+};
+
/**
* struct ms_tp_dev - Temperature/Pressure sensor device structure
* @client: i2c client
@@ -42,11 +52,12 @@ struct ms_tp_hw_data {
* @prom: array of PROM coefficients used for conversion. Added element
* for CRC computation
* @res_index: index to selected sensor resolution
+ * @data: Temperature/Pressure sensor data
*/
struct ms_tp_dev {
struct i2c_client *client;
struct mutex lock;
- const struct ms_tp_hw_data *hw;
+ const struct ms_tp_data *data;
u16 prom[MS_SENSORS_TP_PROM_WORDS_NB];
u8 res_index;
};
diff --git a/drivers/iio/pressure/ms5637.c b/drivers/iio/pressure/ms5637.c
index 4f9f556bd123..6009d87f3d4c 100644
--- a/drivers/iio/pressure/ms5637.c
+++ b/drivers/iio/pressure/ms5637.c
@@ -29,11 +29,6 @@
#include "../common/ms_sensors/ms_sensors_i2c.h"
-struct ms_tp_data {
- const char *name;
- const struct ms_tp_hw_data *hw;
-};
-
static const int ms5637_samp_freq[6] = { 960, 480, 240, 120, 60, 30 };
static ssize_t ms5637_show_samp_freq(struct device *dev, struct device_attribute *attr, char *buf)
@@ -42,7 +37,7 @@ static ssize_t ms5637_show_samp_freq(struct device *dev, struct device_attribute
struct ms_tp_dev *dev_data = iio_priv(indio_dev);
int i, len = 0;
- for (i = 0; i <= dev_data->hw->max_res_index; i++)
+ for (i = 0; i <= dev_data->data->hw->max_res_index; i++)
len += sysfs_emit_at(buf, len, "%u ", ms5637_samp_freq[i]);
sysfs_emit_at(buf, len - 1, "\n");
@@ -168,7 +163,7 @@ static int ms5637_probe(struct i2c_client *client)
dev_data = iio_priv(indio_dev);
dev_data->client = client;
dev_data->res_index = data->hw->max_res_index;
- dev_data->hw = data->hw;
+ dev_data->data = data;
mutex_init(&dev_data->lock);
indio_dev->info = &ms5637_info;
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637
[not found] <20260820141224.23730-1-adamianlouis@gmail.com>
2026-08-20 14:12 ` [PATCH v3 1/5] iio: pressure: ms5637: Add missing ms5803 I2C device ID Louis Adamian
2026-08-20 14:12 ` [PATCH v3 2/5] iio: pressure: ms5637: Move device data struct to header Louis Adamian
@ 2026-08-20 14:12 ` Louis Adamian
2026-08-20 14:21 ` sashiko-bot
2026-08-20 18:13 ` Conor Dooley
2026-08-20 14:12 ` [PATCH v3 4/5] iio: pressure: ms5637: Parameterise second order temperature compensation Louis Adamian
2026-08-20 14:12 ` [PATCH v3 5/5] iio: pressure: ms5637: Add per-variant compensation Louis Adamian
4 siblings, 2 replies; 7+ messages in thread
From: Louis Adamian @ 2026-08-20 14:12 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Louis Adamian
Cc: linux-iio, devicetree, linux-kernel
Create meas,ms5637 devicetree binding and move existing devices from
trivial-devices.yaml. Explicit compatible strings are added for the
different sub-variants because each requires different constants for the
second-order temperature compensation formulas. Previously, the driver
exposed the generic compatibles for the ms5637, MS5803, MS5805
and MS5837 families and applied the MS5637-02BA compensation to all of
them. To preserve the DT ABI the existing compatibles are retained and
mapped to the -02BA variant of each family (ms5637-02ba, ms5803-02ba,
ms5837-02ba).
Signed-off-by: Louis Adamian <adamianlouis@gmail.com>
---
.../bindings/iio/pressure/meas,ms5637.yaml | 93 +++++++++++++++++++
.../devicetree/bindings/trivial-devices.yaml | 10 --
2 files changed, 93 insertions(+), 10 deletions(-)
create mode 100644 Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
diff --git a/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml b/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
new file mode 100644
index 000000000000..befd81d1907b
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
@@ -0,0 +1,93 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/pressure/meas,ms5637.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+title: Measurement Specialties ms5637 and similar pressure sensors
+
+maintainers:
+ - Louis Adamian <adamianlouis@gmail.com>
+
+description:
+ Measurement Specialties pressure and temperature sensors. The MS5803
+ family supports both I2C and SPI interfaces. All other variants are I2C only.
+
+properties:
+ compatible:
+ oneOf:
+ - enum:
+ - meas,ms5637-02ba
+ - meas,ms5637-30ba
+ - meas,ms5803-01ba
+ - meas,ms5803-02ba
+ - meas,ms5803-05ba
+ - meas,ms5803-14ba
+ - meas,ms5803-30ba
+ - meas,ms5805
+ - meas,ms5837-02ba
+ - meas,ms5837-30ba
+ - meas,ms8607-temppressure
+ # These generic compatible strings do not identify the sub-variants of
+ # the part. They are retained so that existing device trees continue
+ # to bind, and each is treated as the -02BA variant of its family.
+ - enum:
+ - meas,ms5637
+ - meas,ms5803
+ - meas,ms5837
+ deprecated: true
+
+ reg:
+ maxItems: 1
+
+ vdd-supply:
+ description: Regulator that provides power to the sensor
+
+required:
+ - compatible
+ - reg
+ - vdd-supply
+
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - meas,ms5803
+ - meas,ms5803-01ba
+ - meas,ms5803-02ba
+ - meas,ms5803-05ba
+ - meas,ms5803-14ba
+ - meas,ms5803-30ba
+ then:
+ $ref: /schemas/spi/spi-peripheral-props.yaml#
+ properties:
+ spi-max-frequency:
+ maximum: 20000000
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ pressure@76 {
+ compatible = "meas,ms5637-02ba";
+ reg = <0x76>;
+ vdd-supply = <&vcc_3v3>;
+ };
+ };
+ - |
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ pressure@0 {
+ compatible = "meas,ms5803-14ba";
+ reg = <0>;
+ vdd-supply = <&vcc_3v3>;
+ spi-max-frequency = <20000000>;
+ };
+ };
diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml
index 435c4baab436..2671040e8802 100644
--- a/Documentation/devicetree/bindings/trivial-devices.yaml
+++ b/Documentation/devicetree/bindings/trivial-devices.yaml
@@ -240,18 +240,8 @@ properties:
- meas,htu21
# Measurement Specialities I2C temperature and humidity sensor
- meas,htu31
- # Measurement Specialities I2C pressure and temperature sensor
- - meas,ms5637
- # Measurement Specialities I2C pressure and temperature sensor
- - meas,ms5803
- # Measurement Specialities I2C pressure and temperature sensor
- - meas,ms5805
- # Measurement Specialities I2C pressure and temperature sensor
- - meas,ms5837
# Measurement Specialities temp and humidity part of ms8607 device
- meas,ms8607-humidity
- # Measurement Specialities temp and pressure part of ms8607 device
- - meas,ms8607-temppressure
# Measurement Specialties temperature sensor
- meas,tsys01
# MEMSIC magnetometer
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 4/5] iio: pressure: ms5637: Parameterise second order temperature compensation
[not found] <20260820141224.23730-1-adamianlouis@gmail.com>
` (2 preceding siblings ...)
2026-08-20 14:12 ` [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637 Louis Adamian
@ 2026-08-20 14:12 ` Louis Adamian
2026-08-20 14:12 ` [PATCH v3 5/5] iio: pressure: ms5637: Add per-variant compensation Louis Adamian
4 siblings, 0 replies; 7+ messages in thread
From: Louis Adamian @ 2026-08-20 14:12 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: Louis Adamian, linux-iio, linux-kernel
The temperature compensation formula is shared across these sensors but
with different constants. Add ms_tp_comp_consts to capture these
per-device differences. Add pressure variant specific pressure scale
variable.
No functional change intended. IIO_VAL_FRACTIONAL prints 3 more decimal
places than IIO_VAL_INT_PLUS_MICRO, giving in_pressure_input 3 more
trailing zeros.
Signed-off-by: Louis Adamian <adamianlouis@gmail.com>
---
.../iio/common/ms_sensors/ms_sensors_i2c.c | 61 ++++++++++++-------
.../iio/common/ms_sensors/ms_sensors_i2c.h | 48 +++++++++++++++
drivers/iio/pressure/ms5637.c | 61 ++++++++++++++++---
3 files changed, 140 insertions(+), 30 deletions(-)
diff --git a/drivers/iio/common/ms_sensors/ms_sensors_i2c.c b/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
index f9dc7c7468c1..20f019ae51fd 100644
--- a/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
+++ b/drivers/iio/common/ms_sensors/ms_sensors_i2c.c
@@ -604,6 +604,38 @@ int ms_sensors_tp_read_prom(struct ms_tp_dev *dev_data)
}
EXPORT_SYMBOL_NS(ms_sensors_tp_read_prom, "IIO_MEAS_SPEC_SENSORS");
+/* apply second order temperature compensation */
+static void ms_tp_compensate(const struct ms_tp_comp_consts *c,
+ s32 temp, s32 dt, s64 *t2, s64 *off2, s64 *sens2)
+{
+ s64 tmp;
+
+ if (temp < 2000) {
+ tmp = temp - 2000;
+ *t2 = (c->low_t2_multiplier * ((s64)dt * (s64)dt)) >>
+ c->low_t2_shift;
+ *off2 = (c->low_off2_multiplier * tmp * tmp) >>
+ c->low_off2_shift;
+ *sens2 = (c->low_sens2_multiplier * tmp * tmp) >>
+ c->low_sens2_shift;
+
+ if (temp < -1500) {
+ tmp = temp + 1500;
+ *off2 += c->vlow_off2_multiplier * tmp * tmp;
+ *sens2 += c->vlow_sens2_multiplier * tmp * tmp;
+ }
+ } else {
+ *sens2 = 0;
+ if (c->has_vhigh_temp && temp > 4500)
+ *sens2 -= (((s64)temp - 4500) * ((s64)temp - 4500)) >> 3;
+
+ *t2 = (c->high_t2_multiplier * ((s64)dt * (s64)dt)) >> c->high_t2_shift;
+ *off2 = (c->high_off2_multiplier *
+ ((s64)temp - 2000) * ((s64)temp - 2000)) >>
+ c->high_off2_shift;
+ }
+}
+
/**
* ms_sensors_read_temp_and_pressure() - read temp and pressure
* @dev_data: pointer to temperature/pressure device data
@@ -619,6 +651,7 @@ int ms_sensors_read_temp_and_pressure(struct ms_tp_dev *dev_data,
int *temperature,
unsigned int *pressure)
{
+ const struct ms_tp_comp_consts *c = dev_data->data->comp_consts;
int ret;
u32 t_adc, p_adc;
s32 dt, temp;
@@ -654,37 +687,21 @@ int ms_sensors_read_temp_and_pressure(struct ms_tp_dev *dev_data,
/* Actual temperature = 2000 + dT * TEMPSENS */
temp = 2000 + (((s64)dt * prom[6]) >> 23);
- /* Second order temperature compensation */
- if (temp < 2000) {
- s64 tmp = (s64)temp - 2000;
-
- t2 = (3 * ((s64)dt * (s64)dt)) >> 33;
- off2 = (61 * tmp * tmp) >> 4;
- sens2 = (29 * tmp * tmp) >> 4;
-
- if (temp < -1500) {
- s64 tmp = (s64)temp + 1500;
-
- off2 += 17 * tmp * tmp;
- sens2 += 9 * tmp * tmp;
- }
- } else {
- t2 = (5 * ((s64)dt * (s64)dt)) >> 38;
- off2 = 0;
- sens2 = 0;
- }
+ ms_tp_compensate(c, temp, dt, &t2, &off2, &sens2);
/* OFF = OFF_T1 + TCO * dT */
- off = (((s64)prom[2]) << 17) + ((((s64)prom[4]) * (s64)dt) >> 6);
+ off = (((s64)prom[2]) << c->off_t1_shift) +
+ ((((s64)prom[4]) * (s64)dt) >> c->off_shift);
off -= off2;
/* Sensitivity at actual temperature = SENS_T1 + TCS * dT */
- sens = (((s64)prom[1]) << 16) + (((s64)prom[3] * dt) >> 7);
+ sens = (((s64)prom[1]) << c->sens_t1_shift) +
+ (((s64)prom[3] * dt) >> c->sens_shift);
sens -= sens2;
/* Temperature compensated pressure = D1 * SENS - OFF */
*temperature = (temp - t2) * 10;
- *pressure = (u32)(((((s64)p_adc * sens) >> 21) - off) >> 15);
+ *pressure = (u32)(((((s64)p_adc * sens) >> c->press_sens_shift) - off) >> c->press_shift);
return 0;
}
diff --git a/drivers/iio/common/ms_sensors/ms_sensors_i2c.h b/drivers/iio/common/ms_sensors/ms_sensors_i2c.h
index d9898098c066..e6e64111f2e7 100644
--- a/drivers/iio/common/ms_sensors/ms_sensors_i2c.h
+++ b/drivers/iio/common/ms_sensors/ms_sensors_i2c.h
@@ -35,14 +35,62 @@ struct ms_tp_hw_data {
u8 max_res_index;
};
+/**
+ * struct ms_tp_comp_consts - Temperature compensation constants
+ * @press_scale: pressure scale
+ * @high_t2_multiplier: multiplier for t2 in high temperature state
+ * @high_t2_shift: bit shift for t2 in high temperature state
+ * @high_off2_multiplier: multiplier for off2 in high temperature state
+ * @high_off2_shift: bit shift for off2 in high temperature state
+ * @low_t2_multiplier: multiplier for t2 in low temperature state
+ * @low_t2_shift: bit shift for t2 in low temperature state
+ * @low_off2_multiplier: multiplier for off2 in low temperature state
+ * @low_off2_shift: bit shift for off2 in low temperature state
+ * @low_sens2_multiplier: multiplier for sens2 in low temperature state
+ * @low_sens2_shift: bit shift for sens2 in low temperature state
+ * @vlow_off2_multiplier: multiplier for value added to off2 in very low temperature state
+ * @vlow_sens2_multiplier: multiplier for value added to sens2 in very low temperature state
+ * @has_vhigh_temp: has very high temperature compensation logic
+ * @off_t1_shift: temperature offset t1 bit shift
+ * @off_shift: temperature offset shift
+ * @sens_t1_shift: temperature sensitivity t1 shift
+ * @sens_shift: temperature sensitivity shift
+ * @press_sens_shift: pressure sensitivity shift
+ * @press_shift: pressure shift
+ */
+struct ms_tp_comp_consts {
+ u32 press_scale;
+ u8 high_t2_multiplier;
+ u8 high_t2_shift;
+ u8 high_off2_multiplier;
+ u8 high_off2_shift;
+ u8 low_t2_multiplier;
+ u8 low_t2_shift;
+ u8 low_off2_multiplier;
+ u8 low_off2_shift;
+ u8 low_sens2_multiplier;
+ u8 low_sens2_shift;
+ u8 vlow_off2_multiplier;
+ u8 vlow_sens2_multiplier;
+ bool has_vhigh_temp;
+ u8 off_t1_shift;
+ u8 off_shift;
+ u8 sens_t1_shift;
+ u8 sens_shift;
+ u8 press_sens_shift;
+ u8 press_shift;
+};
+
/**
* struct ms_tp_data - Temperature/Pressure sensor data
* @name: Device name
* @hw: Sensor hardware data
+ * @comp_consts: Temperature compensation constants
*/
struct ms_tp_data {
const char *name;
const struct ms_tp_hw_data *hw;
+ const struct ms_tp_comp_consts *comp_consts;
};
/**
diff --git a/drivers/iio/pressure/ms5637.c b/drivers/iio/pressure/ms5637.c
index 6009d87f3d4c..359f3a8e79b2 100644
--- a/drivers/iio/pressure/ms5637.c
+++ b/drivers/iio/pressure/ms5637.c
@@ -67,10 +67,9 @@ static int ms5637_read_raw(struct iio_dev *indio_dev,
return IIO_VAL_INT;
case IIO_PRESSURE: /* in kPa */
- *val = pressure / 1000;
- *val2 = (pressure % 1000) * 1000;
-
- return IIO_VAL_INT_PLUS_MICRO;
+ *val = pressure;
+ *val2 = dev_data->data->comp_consts->press_scale;
+ return IIO_VAL_FRACTIONAL;
default:
return -EINVAL;
}
@@ -195,17 +194,63 @@ static const struct ms_tp_hw_data ms5803_hw_data = {
.max_res_index = 4
};
-static const struct ms_tp_data ms5637_data = { .name = "ms5637", .hw = &ms5637_hw_data };
+/*
+ * MS5637-02BA03 compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FMS5637-02BA03%7FB1%7Fpdf%7FEnglish%7FENG_DS_MS5637-02BA03_B1.pdf
+ * Pages: 7-8
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5637_02_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 5,
+ .high_t2_shift = 38,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 61,
+ .low_off2_shift = 4,
+ .low_sens2_multiplier = 29,
+ .low_sens2_shift = 4,
+ .vlow_off2_multiplier = 17,
+ .vlow_sens2_multiplier = 9,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 17,
+ .off_shift = 6,
+ .sens_t1_shift = 16,
+ .sens_shift = 7,
+ .press_sens_shift = 21,
+ .press_shift = 15,
+};
+
+static const struct ms_tp_data ms5637_data = {
+ .name = "ms5637",
+ .hw = &ms5637_hw_data,
+ .comp_consts = &ms5637_02_consts,
+};
-static const struct ms_tp_data ms5803_data = { .name = "ms5803", .hw = &ms5803_hw_data };
+static const struct ms_tp_data ms5803_data = {
+ .name = "ms5803",
+ .hw = &ms5803_hw_data,
+ .comp_consts = &ms5637_02_consts,
+};
-static const struct ms_tp_data ms5805_data = { .name = "ms5805", .hw = &ms5637_hw_data };
+static const struct ms_tp_data ms5805_data = {
+ .name = "ms5805",
+ .hw = &ms5637_hw_data,
+ .comp_consts = &ms5637_02_consts,
+};
-static const struct ms_tp_data ms5837_data = { .name = "ms5837", .hw = &ms5637_hw_data };
+static const struct ms_tp_data ms5837_data = {
+ .name = "ms5837",
+ .hw = &ms5637_hw_data,
+ .comp_consts = &ms5637_02_consts,
+};
static const struct ms_tp_data ms8607_data = {
.name = "ms8607-temppressure",
.hw = &ms5637_hw_data,
+ .comp_consts = &ms5637_02_consts,
};
static const struct i2c_device_id ms5637_id[] = {
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 5/5] iio: pressure: ms5637: Add per-variant compensation
[not found] <20260820141224.23730-1-adamianlouis@gmail.com>
` (3 preceding siblings ...)
2026-08-20 14:12 ` [PATCH v3 4/5] iio: pressure: ms5637: Parameterise second order temperature compensation Louis Adamian
@ 2026-08-20 14:12 ` Louis Adamian
4 siblings, 0 replies; 7+ messages in thread
From: Louis Adamian @ 2026-08-20 14:12 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: Louis Adamian, linux-iio, linux-kernel
Previously, all sensors used the compensation for the MS5637-02BA. Add
correct temperature compensation for MS5637-30BA, MS5803-01BA,
MS5803-02BA, MS5803-05BA, MS5803-14BA, MS5803-30BA, MS5805, MS5837-02BA
and MS5837-30BA.
The deprecated meas,ms5803, meas,ms5637 and meas,ms5837 compatibles
resolve to the -02BA variants. This changes the values that meas,ms5803
and meas,ms5837 report.
meas,ms5805 now uses its own constants, correcting its readings. MS8607
gets its own constants struct. The values match the MS5637-02BA ones it
previously shared, so its readings are unchanged.
Signed-off-by: Louis Adamian <adamianlouis@gmail.com>
---
drivers/iio/pressure/ms5637.c | 376 ++++++++++++++++++++++++++++++++--
1 file changed, 360 insertions(+), 16 deletions(-)
diff --git a/drivers/iio/pressure/ms5637.c b/drivers/iio/pressure/ms5637.c
index 359f3a8e79b2..81b87b79e011 100644
--- a/drivers/iio/pressure/ms5637.c
+++ b/drivers/iio/pressure/ms5637.c
@@ -223,51 +223,395 @@ static const struct ms_tp_comp_consts ms5637_02_consts = {
.press_shift = 15,
};
-static const struct ms_tp_data ms5637_data = {
- .name = "ms5637",
+static const struct ms_tp_data ms5637_02_data = {
+ .name = "ms5637-02ba",
.hw = &ms5637_hw_data,
.comp_consts = &ms5637_02_consts,
};
-static const struct ms_tp_data ms5803_data = {
- .name = "ms5803",
+/*
+ * MS5637-30BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FMS5637-30BA%7FA3%7Fpdf%7FEnglish%7FENG_DS_MS5637-30BA_A3.pdf
+ * Pages: 8-9
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5637_30_consts = {
+ .press_scale = 100,
+ .high_t2_multiplier = 2,
+ .high_t2_shift = 37,
+ .high_off2_multiplier = 1,
+ .high_off2_shift = 4,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 3,
+ .low_off2_shift = 1,
+ .low_sens2_multiplier = 5,
+ .low_sens2_shift = 3,
+ .vlow_off2_multiplier = 7,
+ .vlow_sens2_multiplier = 4,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 16,
+ .off_shift = 7,
+ .sens_t1_shift = 15,
+ .sens_shift = 8,
+ .press_sens_shift = 21,
+ .press_shift = 13,
+};
+
+static const struct ms_tp_data ms5637_30_data = {
+ .name = "ms5637-30ba",
+ .hw = &ms5637_hw_data,
+ .comp_consts = &ms5637_30_consts,
+};
+
+/*
+ * MS5803-01BA compensation Constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5803-01BA&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf
+ * Pages: 13-14
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5803_01_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 0,
+ .high_t2_shift = 0,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 1,
+ .low_t2_shift = 31,
+ .low_off2_multiplier = 3,
+ .low_off2_shift = 0,
+ .low_sens2_multiplier = 7,
+ .low_sens2_shift = 3,
+ .vlow_off2_multiplier = 0,
+ .vlow_sens2_multiplier = 2,
+ .has_vhigh_temp = true,
+ .off_t1_shift = 16,
+ .off_shift = 7,
+ .sens_t1_shift = 15,
+ .sens_shift = 8,
+ .press_sens_shift = 21,
+ .press_shift = 15,
+};
+
+static const struct ms_tp_data ms5803_01_data = {
+ .name = "ms5803-01ba",
.hw = &ms5803_hw_data,
- .comp_consts = &ms5637_02_consts,
+ .comp_consts = &ms5803_01_consts,
+};
+
+/*
+ * MS5803-02BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5803-02BA&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf
+ * Pages: 13-14
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5803_02_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 0,
+ .high_t2_shift = 0,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 1,
+ .low_t2_shift = 31,
+ .low_off2_multiplier = 61,
+ .low_off2_shift = 4,
+ .low_sens2_multiplier = 2,
+ .low_sens2_shift = 0,
+ .vlow_off2_multiplier = 20,
+ .vlow_sens2_multiplier = 12,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 17,
+ .off_shift = 6,
+ .sens_t1_shift = 16,
+ .sens_shift = 7,
+ .press_sens_shift = 21,
+ .press_shift = 15,
+};
+
+static const struct ms_tp_data ms5803_02_data = {
+ .name = "ms5803-02ba",
+ .hw = &ms5803_hw_data,
+ .comp_consts = &ms5803_02_consts,
+};
+
+/*
+ * MS5803-05BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5803-05BA&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=MS580305BA01-00
+ * Pages: 13-14
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5803_05_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 0,
+ .high_t2_shift = 0,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 3,
+ .low_off2_shift = 3,
+ .low_sens2_multiplier = 7,
+ .low_sens2_shift = 3,
+ .vlow_off2_multiplier = 0,
+ .vlow_sens2_multiplier = 3,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 18,
+ .off_shift = 5,
+ .sens_t1_shift = 17,
+ .sens_shift = 7,
+ .press_sens_shift = 21,
+ .press_shift = 15,
+};
+
+static const struct ms_tp_data ms5803_05_data = {
+ .name = "ms5803-05ba",
+ .hw = &ms5803_hw_data,
+ .comp_consts = &ms5803_05_consts,
+};
+
+/*
+ * MS5803-14BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5803-14BA&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=MS580314BA01-50
+ * Pages: 13-14
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5803_14_consts = {
+ .press_scale = 100,
+ .high_t2_multiplier = 7,
+ .high_t2_shift = 37,
+ .high_off2_multiplier = 1,
+ .high_off2_shift = 4,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 3,
+ .low_off2_shift = 1,
+ .low_sens2_multiplier = 5,
+ .low_sens2_shift = 3,
+ .vlow_off2_multiplier = 7,
+ .vlow_sens2_multiplier = 4,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 16,
+ .off_shift = 7,
+ .sens_t1_shift = 15,
+ .sens_shift = 8,
+ .press_sens_shift = 21,
+ .press_shift = 15,
+};
+
+static const struct ms_tp_data ms5803_14_data = {
+ .name = "ms5803-14ba",
+ .hw = &ms5803_hw_data,
+ .comp_consts = &ms5803_14_consts,
+};
+
+/*
+ * MS5803-30BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5803-30BA&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=MS580330BA01-00
+ * Pages: 13-14
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5803_30_consts = {
+ .press_scale = 100,
+ .high_t2_multiplier = 7,
+ .high_t2_shift = 37,
+ .high_off2_multiplier = 1,
+ .high_off2_shift = 4,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 3,
+ .low_off2_shift = 1,
+ .low_sens2_multiplier = 5,
+ .low_sens2_shift = 3,
+ .vlow_off2_multiplier = 7,
+ .vlow_sens2_multiplier = 4,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 16,
+ .off_shift = 7,
+ .sens_t1_shift = 15,
+ .sens_shift = 8,
+ .press_sens_shift = 21,
+ .press_shift = 13,
+};
+
+static const struct ms_tp_data ms5803_30_data = {
+ .name = "ms5803-30ba",
+ .hw = &ms5803_hw_data,
+ .comp_consts = &ms5803_30_consts,
+};
+
+/*
+ * MS5805-02BA01 compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5805-02BA01&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=MS580502BA01-50
+ * Pages: 8-9
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5805_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 0,
+ .high_t2_shift = 0,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 11,
+ .low_t2_shift = 35,
+ .low_off2_multiplier = 31,
+ .low_off2_shift = 3,
+ .low_sens2_multiplier = 63,
+ .low_sens2_shift = 5,
+ .vlow_off2_multiplier = 0,
+ .vlow_sens2_multiplier = 0,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 17,
+ .off_shift = 6,
+ .sens_t1_shift = 16,
+ .sens_shift = 7,
+ .press_sens_shift = 21,
+ .press_shift = 15,
};
static const struct ms_tp_data ms5805_data = {
.name = "ms5805",
.hw = &ms5637_hw_data,
- .comp_consts = &ms5637_02_consts,
+ .comp_consts = &ms5805_consts,
+};
+
+/*
+ * MS5837-02BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5837-02BA01&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=20000979-00
+ * Pages: 7-8
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5837_02_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 0,
+ .high_t2_shift = 0,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 11,
+ .low_t2_shift = 35,
+ .low_off2_multiplier = 31,
+ .low_off2_shift = 3,
+ .low_sens2_multiplier = 63,
+ .low_sens2_shift = 5,
+ .vlow_off2_multiplier = 0,
+ .vlow_sens2_multiplier = 0,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 17,
+ .off_shift = 6,
+ .sens_t1_shift = 16,
+ .sens_shift = 7,
+ .press_sens_shift = 21,
+ .press_shift = 15,
};
-static const struct ms_tp_data ms5837_data = {
- .name = "ms5837",
+static const struct ms_tp_data ms5837_02_data = {
+ .name = "ms5837-02ba",
.hw = &ms5637_hw_data,
- .comp_consts = &ms5637_02_consts,
+ .comp_consts = &ms5837_02_consts,
+};
+
+/*
+ * MS5837-30BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS5837-30BA&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=MS583730BA01-50
+ * Pages: 11-12
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms5837_30_consts = {
+ .press_scale = 100,
+ .high_t2_multiplier = 2,
+ .high_t2_shift = 37,
+ .high_off2_multiplier = 1,
+ .high_off2_shift = 4,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 3,
+ .low_off2_shift = 1,
+ .low_sens2_multiplier = 5,
+ .low_sens2_shift = 3,
+ .vlow_off2_multiplier = 7,
+ .vlow_sens2_multiplier = 4,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 16,
+ .off_shift = 7,
+ .sens_t1_shift = 15,
+ .sens_shift = 8,
+ .press_sens_shift = 21,
+ .press_shift = 13,
+};
+
+static const struct ms_tp_data ms5837_30_data = {
+ .name = "ms5837-30ba",
+ .hw = &ms5637_hw_data,
+ .comp_consts = &ms5837_30_consts,
+};
+
+/*
+ * MS8607-02BA compensation constants
+ * Datasheet: https://www.te.com/commerce/DocumentDelivery/DDEController?Action=srchrtrv&DocNm=MS8607-02BA01&DocType=Data%20Sheet&DocLang=English&DocFormat=pdf&PartCntxt=CAT-BLPS0018
+ * Pages: 9-10
+ * Sections: Pressure and Temperature Calculation, Second Order Temperature Compensation
+ */
+static const struct ms_tp_comp_consts ms8607_consts = {
+ .press_scale = 1000,
+ .high_t2_multiplier = 5,
+ .high_t2_shift = 38,
+ .high_off2_multiplier = 0,
+ .high_off2_shift = 0,
+ .low_t2_multiplier = 3,
+ .low_t2_shift = 33,
+ .low_off2_multiplier = 61,
+ .low_off2_shift = 4,
+ .low_sens2_multiplier = 29,
+ .low_sens2_shift = 4,
+ .vlow_off2_multiplier = 17,
+ .vlow_sens2_multiplier = 9,
+ .has_vhigh_temp = false,
+ .off_t1_shift = 17,
+ .off_shift = 6,
+ .sens_t1_shift = 16,
+ .sens_shift = 7,
+ .press_sens_shift = 21,
+ .press_shift = 15,
};
static const struct ms_tp_data ms8607_data = {
.name = "ms8607-temppressure",
.hw = &ms5637_hw_data,
- .comp_consts = &ms5637_02_consts,
+ .comp_consts = &ms8607_consts,
};
static const struct i2c_device_id ms5637_id[] = {
- { .name = "ms5637", .driver_data = (kernel_ulong_t)&ms5637_data },
- { .name = "ms5803", .driver_data = (kernel_ulong_t)&ms5803_data },
+ { .name = "ms5637", .driver_data = (kernel_ulong_t)&ms5637_02_data },
+ { .name = "ms5637-02ba", .driver_data = (kernel_ulong_t)&ms5637_02_data },
+ { .name = "ms5637-30ba", .driver_data = (kernel_ulong_t)&ms5637_30_data },
+ { .name = "ms5803", .driver_data = (kernel_ulong_t)&ms5803_02_data },
+ { .name = "ms5803-01ba", .driver_data = (kernel_ulong_t)&ms5803_01_data },
+ { .name = "ms5803-02ba", .driver_data = (kernel_ulong_t)&ms5803_02_data },
+ { .name = "ms5803-05ba", .driver_data = (kernel_ulong_t)&ms5803_05_data },
+ { .name = "ms5803-14ba", .driver_data = (kernel_ulong_t)&ms5803_14_data },
+ { .name = "ms5803-30ba", .driver_data = (kernel_ulong_t)&ms5803_30_data },
{ .name = "ms5805", .driver_data = (kernel_ulong_t)&ms5805_data },
- { .name = "ms5837", .driver_data = (kernel_ulong_t)&ms5837_data },
+ { .name = "ms5837", .driver_data = (kernel_ulong_t)&ms5837_02_data },
+ { .name = "ms5837-02ba", .driver_data = (kernel_ulong_t)&ms5837_02_data },
+ { .name = "ms5837-30ba", .driver_data = (kernel_ulong_t)&ms5837_30_data },
{ .name = "ms8607-temppressure", .driver_data = (kernel_ulong_t)&ms8607_data },
{ }
};
MODULE_DEVICE_TABLE(i2c, ms5637_id);
static const struct of_device_id ms5637_of_match[] = {
- { .compatible = "meas,ms5637", .data = &ms5637_data },
- { .compatible = "meas,ms5803", .data = &ms5803_data },
+ { .compatible = "meas,ms5637", .data = &ms5637_02_data },
+ { .compatible = "meas,ms5637-02ba", .data = &ms5637_02_data },
+ { .compatible = "meas,ms5637-30ba", .data = &ms5637_30_data },
+ { .compatible = "meas,ms5803", .data = &ms5803_02_data },
+ { .compatible = "meas,ms5803-01ba", .data = &ms5803_01_data },
+ { .compatible = "meas,ms5803-02ba", .data = &ms5803_02_data },
+ { .compatible = "meas,ms5803-05ba", .data = &ms5803_05_data },
+ { .compatible = "meas,ms5803-14ba", .data = &ms5803_14_data },
+ { .compatible = "meas,ms5803-30ba", .data = &ms5803_30_data },
{ .compatible = "meas,ms5805", .data = &ms5805_data },
- { .compatible = "meas,ms5837", .data = &ms5837_data },
+ { .compatible = "meas,ms5837", .data = &ms5837_02_data },
+ { .compatible = "meas,ms5837-02ba", .data = &ms5837_02_data },
+ { .compatible = "meas,ms5837-30ba", .data = &ms5837_30_data },
{ .compatible = "meas,ms8607-temppressure", .data = &ms8607_data },
{ }
};
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637
2026-08-20 14:12 ` [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637 Louis Adamian
@ 2026-08-20 14:21 ` sashiko-bot
2026-08-20 18:13 ` Conor Dooley
1 sibling, 0 replies; 7+ messages in thread
From: sashiko-bot @ 2026-08-20 14:21 UTC (permalink / raw)
To: Louis Adamian; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Making `vdd-supply` an unconditionally required property breaks backward compatibility for existing device trees.
--
--- Patch [3]: [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637 ---
commit f37736f8c819b5be2f362b907ebbc2d3373ecbfe
Author: Louis Adamian <adamianlouis@gmail.com>
dt-bindings: iio: pressure: Add MS5637
Create meas,ms5637 devicetree binding and move existing devices from
trivial-devices.yaml. Explicit compatible strings are added for the
different sub-variants because each requires different constants for the
second-order temperature compensation formulas.
> diff --git a/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml b/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
> new file mode 100644
> index 0000000000000..befd81d1907b4
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
[ ... ]
> +properties:
> + compatible:
> + oneOf:
> + - enum:
> + - meas,ms5637-02ba
> + - meas,ms5637-30ba
> + - meas,ms5803-01ba
> + - meas,ms5803-02ba
> + - meas,ms5803-05ba
> + - meas,ms5803-14ba
> + - meas,ms5803-30ba
> + - meas,ms5805
> + - meas,ms5837-02ba
> + - meas,ms5837-30ba
> + - meas,ms8607-temppressure
> + # These generic compatible strings do not identify the sub-variants of
> + # the part. They are retained so that existing device trees continue
> + # to bind, and each is treated as the -02BA variant of its family.
> + - enum:
> + - meas,ms5637
> + - meas,ms5803
> + - meas,ms5837
> + deprecated: true
> +
> + reg:
> + maxItems: 1
> +
> + vdd-supply:
> + description: Regulator that provides power to the sensor
> +
> +required:
> + - compatible
> + - reg
> + - vdd-supply
[Severity: Medium]
Will making vdd-supply unconditionally required break backward compatibility
for existing device trees?
These generic compatible strings (e.g., meas,ms5637, meas,ms5803) were
previously documented in trivial-devices.yaml. That schema restricts
properties to a very narrow set and strictly forbids vdd-supply via
additionalProperties: false.
Consequently, existing valid device trees do not include vdd-supply.
By moving these devices to a new standalone binding and making vdd-supply
unconditionally required, won't previously valid device trees fail validation?
Should newly documented properties remain optional, or be conditionally
required using an if-then block only for the newly added specific compatible
strings to preserve the DT ABI when extracting devices from
trivial-devices.yaml?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260820141224.23730-1-adamianlouis@gmail.com?part=3
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637
2026-08-20 14:12 ` [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637 Louis Adamian
2026-08-20 14:21 ` sashiko-bot
@ 2026-08-20 18:13 ` Conor Dooley
1 sibling, 0 replies; 7+ messages in thread
From: Conor Dooley @ 2026-08-20 18:13 UTC (permalink / raw)
To: Louis Adamian
Cc: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-iio,
devicetree, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 5824 bytes --]
On Thu, Aug 20, 2026 at 10:12:18AM -0400, Louis Adamian wrote:
> Create meas,ms5637 devicetree binding and move existing devices from
> trivial-devices.yaml. Explicit compatible strings are added for the
> different sub-variants because each requires different constants for the
> second-order temperature compensation formulas. Previously, the driver
> exposed the generic compatibles for the ms5637, MS5803, MS5805
> and MS5837 families and applied the MS5637-02BA compensation to all of
> them. To preserve the DT ABI the existing compatibles are retained and
> mapped to the -02BA variant of each family (ms5637-02ba, ms5803-02ba,
> ms5837-02ba).
>
> Signed-off-by: Louis Adamian <adamianlouis@gmail.com>
Firstly, please CC everyone on all the mails - or at least all the dt
maintainers on all mails, so we don't have to go look at the context on
lore.
Additionally, lore didn't even get your cover letter:
https://lore.kernel.org/all/20260820141224.23730-1-adamianlouis@gmail.com/
The patch itself seems okay. You could probably have made the
ms5637-02ba fall back to the ms5637, but that's more a matter of taste I
think than a technical thing.
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
Thanks,
Conor.
> ---
> .../bindings/iio/pressure/meas,ms5637.yaml | 93 +++++++++++++++++++
> .../devicetree/bindings/trivial-devices.yaml | 10 --
> 2 files changed, 93 insertions(+), 10 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
>
> diff --git a/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml b/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
> new file mode 100644
> index 000000000000..befd81d1907b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iio/pressure/meas,ms5637.yaml
> @@ -0,0 +1,93 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/iio/pressure/meas,ms5637.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +title: Measurement Specialties ms5637 and similar pressure sensors
> +
> +maintainers:
> + - Louis Adamian <adamianlouis@gmail.com>
> +
> +description:
> + Measurement Specialties pressure and temperature sensors. The MS5803
> + family supports both I2C and SPI interfaces. All other variants are I2C only.
> +
> +properties:
> + compatible:
> + oneOf:
> + - enum:
> + - meas,ms5637-02ba
> + - meas,ms5637-30ba
> + - meas,ms5803-01ba
> + - meas,ms5803-02ba
> + - meas,ms5803-05ba
> + - meas,ms5803-14ba
> + - meas,ms5803-30ba
> + - meas,ms5805
> + - meas,ms5837-02ba
> + - meas,ms5837-30ba
> + - meas,ms8607-temppressure
> + # These generic compatible strings do not identify the sub-variants of
> + # the part. They are retained so that existing device trees continue
> + # to bind, and each is treated as the -02BA variant of its family.
> + - enum:
> + - meas,ms5637
> + - meas,ms5803
> + - meas,ms5837
> + deprecated: true
> +
> + reg:
> + maxItems: 1
> +
> + vdd-supply:
> + description: Regulator that provides power to the sensor
> +
> +required:
> + - compatible
> + - reg
> + - vdd-supply
> +
> +allOf:
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - meas,ms5803
> + - meas,ms5803-01ba
> + - meas,ms5803-02ba
> + - meas,ms5803-05ba
> + - meas,ms5803-14ba
> + - meas,ms5803-30ba
> + then:
> + $ref: /schemas/spi/spi-peripheral-props.yaml#
> + properties:
> + spi-max-frequency:
> + maximum: 20000000
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + pressure@76 {
> + compatible = "meas,ms5637-02ba";
> + reg = <0x76>;
> + vdd-supply = <&vcc_3v3>;
> + };
> + };
> + - |
> + spi {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + pressure@0 {
> + compatible = "meas,ms5803-14ba";
> + reg = <0>;
> + vdd-supply = <&vcc_3v3>;
> + spi-max-frequency = <20000000>;
> + };
> + };
> diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml
> index 435c4baab436..2671040e8802 100644
> --- a/Documentation/devicetree/bindings/trivial-devices.yaml
> +++ b/Documentation/devicetree/bindings/trivial-devices.yaml
> @@ -240,18 +240,8 @@ properties:
> - meas,htu21
> # Measurement Specialities I2C temperature and humidity sensor
> - meas,htu31
> - # Measurement Specialities I2C pressure and temperature sensor
> - - meas,ms5637
> - # Measurement Specialities I2C pressure and temperature sensor
> - - meas,ms5803
> - # Measurement Specialities I2C pressure and temperature sensor
> - - meas,ms5805
> - # Measurement Specialities I2C pressure and temperature sensor
> - - meas,ms5837
> # Measurement Specialities temp and humidity part of ms8607 device
> - meas,ms8607-humidity
> - # Measurement Specialities temp and pressure part of ms8607 device
> - - meas,ms8607-temppressure
> # Measurement Specialties temperature sensor
> - meas,tsys01
> # MEMSIC magnetometer
> --
> 2.55.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-08-20 18:13 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260820141224.23730-1-adamianlouis@gmail.com>
2026-08-20 14:12 ` [PATCH v3 1/5] iio: pressure: ms5637: Add missing ms5803 I2C device ID Louis Adamian
2026-08-20 14:12 ` [PATCH v3 2/5] iio: pressure: ms5637: Move device data struct to header Louis Adamian
2026-08-20 14:12 ` [PATCH v3 3/5] dt-bindings: iio: pressure: Add MS5637 Louis Adamian
2026-08-20 14:21 ` sashiko-bot
2026-08-20 18:13 ` Conor Dooley
2026-08-20 14:12 ` [PATCH v3 4/5] iio: pressure: ms5637: Parameterise second order temperature compensation Louis Adamian
2026-08-20 14:12 ` [PATCH v3 5/5] iio: pressure: ms5637: Add per-variant compensation Louis Adamian
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.