* [PATCH v5 1/5] dt-bindings: vendor-prefixes: Add ZillTek Technology
2026-10-19 8:36 [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Paulius Zaleckas
@ 2026-10-19 8:36 ` Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 2/5] dt-bindings: iio: pressure: infineon,dps310: Add Zilltek ZTS8032 Paulius Zaleckas
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paulius Zaleckas @ 2026-10-19 8:36 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: Eddie James, Joel Stanley, David Lechner, Nuno Sá,
Andy Shevchenko, Andy Shevchenko, Uwe Kleine-König,
Joshua Crofts, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Rupesh Majhi, devicetree, linux-kernel, Paulius Zaleckas,
Conor Dooley
ZillTek Technology Corp. (Hsinchu, Taiwan) makes MEMS microphones and
barometric pressure sensors such as the ZTS8032.
Link: https://www.zilltek.com/
Assisted-by: LLM
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
---
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 0ec4e481c64b..1d0ef2d7826f 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -1979,6 +1979,8 @@ patternProperties:
description: Shenzhen Zidoo Technology Co., Ltd.
"^zii,.*":
description: Zodiac Inflight Innovations
+ "^zilltek,.*":
+ description: ZillTek Technology Corp.
"^zinitix,.*":
description: Zinitix Co., Ltd
"^zkmagic,.*":
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v5 2/5] dt-bindings: iio: pressure: infineon,dps310: Add Zilltek ZTS8032
2026-10-19 8:36 [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 1/5] dt-bindings: vendor-prefixes: Add ZillTek Technology Paulius Zaleckas
@ 2026-10-19 8:36 ` Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 3/5] iio: pressure: dps310: add per-chip data Paulius Zaleckas
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paulius Zaleckas @ 2026-10-19 8:36 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: Eddie James, Joel Stanley, David Lechner, Nuno Sá,
Andy Shevchenko, Andy Shevchenko, Uwe Kleine-König,
Joshua Crofts, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Rupesh Majhi, devicetree, linux-kernel, Paulius Zaleckas,
Conor Dooley
The Zilltek ZTS8032 is register compatible with the DPS310, but has two
more pressure calibration coefficients and takes its temperature from a
different sensor by default, so it cannot use the DPS310 compatible as a
fallback.
Assisted-by: LLM
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
---
.../devicetree/bindings/iio/pressure/infineon,dps310.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/iio/pressure/infineon,dps310.yaml b/Documentation/devicetree/bindings/iio/pressure/infineon,dps310.yaml
index 1912a1b0b4ba..416117dfd927 100644
--- a/Documentation/devicetree/bindings/iio/pressure/infineon,dps310.yaml
+++ b/Documentation/devicetree/bindings/iio/pressure/infineon,dps310.yaml
@@ -11,12 +11,14 @@ maintainers:
description:
The DPS310 is a barometric pressure and temperature sensor with an I2C
- interface.
+ interface. The Zilltek ZTS8032 is register compatible with it, but has
+ additional calibration coefficients.
properties:
compatible:
enum:
- infineon,dps310
+ - zilltek,zts8032
reg:
maxItems: 1
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v5 3/5] iio: pressure: dps310: add per-chip data
2026-10-19 8:36 [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 1/5] dt-bindings: vendor-prefixes: Add ZillTek Technology Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 2/5] dt-bindings: iio: pressure: infineon,dps310: Add Zilltek ZTS8032 Paulius Zaleckas
@ 2026-10-19 8:36 ` Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 4/5] iio: pressure: dps310: add an OF match table Paulius Zaleckas
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paulius Zaleckas @ 2026-10-19 8:36 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: Eddie James, Joel Stanley, David Lechner, Nuno Sá,
Andy Shevchenko, Andy Shevchenko, Uwe Kleine-König,
Joshua Crofts, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Rupesh Majhi, devicetree, linux-kernel, Paulius Zaleckas
Move the coefficient count, the IIO device name and whether the
temperature coefficients are for the external sensor into a per-chip
structure, passed through the I2C and ACPI match data, and build the
TMP_CFG startup value from its fields. This prepares for the Zilltek
ZTS8032, which has two more coefficients and temperature coefficients
for the internal sensor.
No functional change.
Assisted-by: LLM
Reviewed-by: Joshua Crofts <joshua.crofts1@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
---
drivers/iio/pressure/dps310.c | 43 +++++++++++++++++++++++++++--------
1 file changed, 33 insertions(+), 10 deletions(-)
diff --git a/drivers/iio/pressure/dps310.c b/drivers/iio/pressure/dps310.c
index 00f6be126326..bfd76f2deed9 100644
--- a/drivers/iio/pressure/dps310.c
+++ b/drivers/iio/pressure/dps310.c
@@ -9,6 +9,7 @@
* c0 * 0.5 + c1 * T_raw / kT °C
*/
+#include <linux/bitfield.h>
#include <linux/cleanup.h>
#include <linux/devm-helpers.h>
#include <linux/i2c.h>
@@ -42,7 +43,9 @@
#define DPS310_PRS_PRC_BITS GENMASK(3, 0)
#define DPS310_TMP_CFG 0x07
#define DPS310_TMP_RATE_BITS GENMASK(6, 4)
+#define DPS310_TMP_RATE_1SPS 0
#define DPS310_TMP_PRC_BITS GENMASK(3, 0)
+#define DPS310_TMP_PRC_1 0
#define DPS310_TMP_EXT BIT(7)
#define DPS310_MEAS_CFG 0x08
#define DPS310_MEAS_CTRL_BITS GENMASK(2, 0)
@@ -63,6 +66,9 @@
#define DPS310_FIFO_FLUSH BIT(7)
#define DPS310_RESET_MAGIC 0x09
#define DPS310_COEF_BASE 0x10
+#define DPS310_COEF_LEN 18
+
+#define MAX_COEF_LEN 18
/* Section 4.8: 32 shared entries. Stops when full, so late drains lose data */
#define DPS310_FIFO_DEPTH 32
@@ -99,10 +105,23 @@ static const int scale_factors[] = {
2088960,
};
+struct dps310_chip_info {
+ const char *name;
+ bool coef_for_ext_sensor;
+ u8 coef_len;
+};
+
+static const struct dps310_chip_info dps310_chip_info = {
+ .name = "dps310",
+ .coef_for_ext_sensor = true,
+ .coef_len = DPS310_COEF_LEN,
+};
+
struct dps310_data {
struct i2c_client *client;
struct regmap *regmap;
struct mutex lock; /* Lock for sequential HW access functions */
+ const struct dps310_chip_info *info;
s32 c0, c1;
s32 c00, c10, c20, c30, c01, c11, c21;
@@ -179,13 +198,13 @@ static const struct iio_chan_spec dps310_channels[] = {
static int dps310_get_coefs(struct dps310_data *data)
{
int rc;
- u8 coef[18];
+ u8 coef[MAX_COEF_LEN];
u32 c0, c1;
u32 c00, c10, c20, c30, c01, c11, c21;
/* Read all sensor calibration coefficients from the COEF registers. */
rc = regmap_bulk_read(data->regmap, DPS310_COEF_BASE, coef,
- sizeof(coef));
+ data->info->coef_len);
if (rc < 0)
return rc;
@@ -281,11 +300,11 @@ static int dps310_startup(struct dps310_data *data)
if (rc)
return rc;
- /*
- * Set up external (MEMS) temperature sensor in single sample, one
- * measurement per second mode
- */
- rc = regmap_write(data->regmap, DPS310_TMP_CFG, DPS310_TMP_EXT);
+ rc = regmap_write(data->regmap, DPS310_TMP_CFG,
+ FIELD_PREP(DPS310_TMP_PRC_BITS, DPS310_TMP_PRC_1) |
+ FIELD_PREP(DPS310_TMP_RATE_BITS, DPS310_TMP_RATE_1SPS) |
+ FIELD_PREP(DPS310_TMP_EXT,
+ data->info->coef_for_ext_sensor));
if (rc)
return rc;
@@ -1347,7 +1366,11 @@ static int dps310_probe(struct i2c_client *client)
if (rc)
return rc;
- iio->name = DPS310_DEV_NAME;
+ data->info = i2c_get_match_data(client);
+ if (!data->info)
+ return -ENODATA;
+
+ iio->name = data->info->name;
iio->channels = dps310_channels;
iio->num_channels = ARRAY_SIZE(dps310_channels);
iio->info = &dps310_info;
@@ -1394,13 +1417,13 @@ static int dps310_probe(struct i2c_client *client)
}
static const struct i2c_device_id dps310_id[] = {
- { .name = DPS310_DEV_NAME },
+ { .name = "dps310", .driver_data = (kernel_ulong_t)&dps310_chip_info },
{ }
};
MODULE_DEVICE_TABLE(i2c, dps310_id);
static const struct acpi_device_id dps310_acpi_match[] = {
- { .id = "IFX3100" },
+ { .id = "IFX3100", .driver_data = (kernel_ulong_t)&dps310_chip_info },
{ }
};
MODULE_DEVICE_TABLE(acpi, dps310_acpi_match);
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v5 4/5] iio: pressure: dps310: add an OF match table
2026-10-19 8:36 [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Paulius Zaleckas
` (2 preceding siblings ...)
2026-10-19 8:36 ` [PATCH v5 3/5] iio: pressure: dps310: add per-chip data Paulius Zaleckas
@ 2026-10-19 8:36 ` Paulius Zaleckas
2026-10-19 8:36 ` [PATCH v5 5/5] iio: pressure: dps310: add Zilltek ZTS8032 support Paulius Zaleckas
2026-10-19 14:16 ` [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Rupesh Majhi
5 siblings, 0 replies; 7+ messages in thread
From: Paulius Zaleckas @ 2026-10-19 8:36 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: Eddie James, Joel Stanley, David Lechner, Nuno Sá,
Andy Shevchenko, Andy Shevchenko, Uwe Kleine-König,
Joshua Crofts, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Rupesh Majhi, devicetree, linux-kernel, Paulius Zaleckas
Devicetree nodes match the driver only through the I2C ID table fallback.
Add an OF match table, so the chip data comes from the compatible and the
module autoloads from the of: modalias the I2C core reports for
devicetree devices.
Assisted-by: LLM
Reviewed-by: Joshua Crofts <joshua.crofts1@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
---
drivers/iio/pressure/dps310.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/iio/pressure/dps310.c b/drivers/iio/pressure/dps310.c
index bfd76f2deed9..999ae4ce73f7 100644
--- a/drivers/iio/pressure/dps310.c
+++ b/drivers/iio/pressure/dps310.c
@@ -1422,6 +1422,12 @@ static const struct i2c_device_id dps310_id[] = {
};
MODULE_DEVICE_TABLE(i2c, dps310_id);
+static const struct of_device_id dps310_of_match[] = {
+ { .compatible = "infineon,dps310", .data = &dps310_chip_info },
+ { }
+};
+MODULE_DEVICE_TABLE(of, dps310_of_match);
+
static const struct acpi_device_id dps310_acpi_match[] = {
{ .id = "IFX3100", .driver_data = (kernel_ulong_t)&dps310_chip_info },
{ }
@@ -1431,6 +1437,7 @@ MODULE_DEVICE_TABLE(acpi, dps310_acpi_match);
static struct i2c_driver dps310_driver = {
.driver = {
.name = DPS310_DEV_NAME,
+ .of_match_table = dps310_of_match,
.acpi_match_table = dps310_acpi_match,
},
.probe = dps310_probe,
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v5 5/5] iio: pressure: dps310: add Zilltek ZTS8032 support
2026-10-19 8:36 [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Paulius Zaleckas
` (3 preceding siblings ...)
2026-10-19 8:36 ` [PATCH v5 4/5] iio: pressure: dps310: add an OF match table Paulius Zaleckas
@ 2026-10-19 8:36 ` Paulius Zaleckas
2026-10-19 14:16 ` [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Rupesh Majhi
5 siblings, 0 replies; 7+ messages in thread
From: Paulius Zaleckas @ 2026-10-19 8:36 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: Eddie James, Joel Stanley, David Lechner, Nuno Sá,
Andy Shevchenko, Andy Shevchenko, Uwe Kleine-König,
Joshua Crofts, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Rupesh Majhi, devicetree, linux-kernel, Paulius Zaleckas
The Zilltek ZTS8032 has the DPS310 register map, scale factors,
compensation and FIFO, with these differences:
- two more pressure coefficients, c31 and c40 at 0x22-0x25, adding
c40 * Praw_sc^4 + c31 * Traw_sc * Praw_sc^3 to the polynomial
- TMP_EXT is MEAS_CFG bit 3, and the temperature coefficients are for
the internal sensor (COEF_SRCE reads 0x06). TMP_CFG bit 7 is the top
bit of a 4-bit TMP_RATE, so the DPS310 TMP_EXT write would select a
25/16 Hz background rate instead of the external sensor.
- product ID 0x11 instead of 0x10, the driver does not check it
Add its chip data, reading 22 coefficient bytes and with TMP_EXT clear,
a Horner step for each of c40 and c31, and the I2C and OF IDs.
Tested on a ZTS8032 over I2C: in_pressure_input is within 1 Pa of the
datasheet formula evaluated from the raw and coefficient registers at
every oversampling rate from 1 to 128, TMP_CFG reads 0x00 after probe,
and buffered capture through the FIFO returns the same pressure and
temperature as direct reads.
Assisted-by: LLM
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
---
drivers/iio/pressure/Kconfig | 6 ++++--
drivers/iio/pressure/dps310.c | 32 +++++++++++++++++++++++++++++---
2 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/drivers/iio/pressure/Kconfig b/drivers/iio/pressure/Kconfig
index 9de63908936f..ffd072e4bb8f 100644
--- a/drivers/iio/pressure/Kconfig
+++ b/drivers/iio/pressure/Kconfig
@@ -115,8 +115,10 @@ config DPS310
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
help
- Support for the Infineon DPS310 digital barometric pressure sensor.
- It can be accessed over I2C bus.
+ Support for the following digital barometric pressure sensors:
+ - Infineon DPS310
+ - Zilltek ZTS8032
+ They can be accessed over I2C bus.
This driver can also be built as a module. If so, the module will be
called dps310.
diff --git a/drivers/iio/pressure/dps310.c b/drivers/iio/pressure/dps310.c
index 999ae4ce73f7..a2ac8101ff31 100644
--- a/drivers/iio/pressure/dps310.c
+++ b/drivers/iio/pressure/dps310.c
@@ -5,6 +5,10 @@
*
* https://www.infineon.com/dgdl/?fileId=5546d462576f34750157750826c42242
*
+ * The Zilltek ZTS8032 is register compatible, with two more pressure
+ * calibration coefficients (c31, c40) and temperature calibrated against
+ * the internal sensor.
+ *
* Temperature calculation:
* c0 * 0.5 + c1 * T_raw / kT °C
*/
@@ -67,8 +71,9 @@
#define DPS310_RESET_MAGIC 0x09
#define DPS310_COEF_BASE 0x10
#define DPS310_COEF_LEN 18
+#define ZTS8032_COEF_LEN 22
-#define MAX_COEF_LEN 18
+#define MAX_COEF_LEN 22
/* Section 4.8: 32 shared entries. Stops when full, so late drains lose data */
#define DPS310_FIFO_DEPTH 32
@@ -109,6 +114,7 @@ struct dps310_chip_info {
const char *name;
bool coef_for_ext_sensor;
u8 coef_len;
+ bool has_c31_c40;
};
static const struct dps310_chip_info dps310_chip_info = {
@@ -117,6 +123,13 @@ static const struct dps310_chip_info dps310_chip_info = {
.coef_len = DPS310_COEF_LEN,
};
+static const struct dps310_chip_info zts8032_chip_info = {
+ .name = "zts8032",
+ .coef_for_ext_sensor = false,
+ .coef_len = ZTS8032_COEF_LEN,
+ .has_c31_c40 = true,
+};
+
struct dps310_data {
struct i2c_client *client;
struct regmap *regmap;
@@ -125,6 +138,7 @@ struct dps310_data {
s32 c0, c1;
s32 c00, c10, c20, c30, c01, c11, c21;
+ s32 c31, c40;
s32 pressure_raw;
s32 temp_raw;
bool timeout_recovery_failed;
@@ -244,6 +258,11 @@ static int dps310_get_coefs(struct dps310_data *data)
c30 = (coef[16] << 8) | coef[17];
data->c30 = sign_extend32(c30, 15);
+ if (data->info->has_c31_c40) {
+ data->c31 = sign_extend32(get_unaligned_be16(&coef[18]), 15);
+ data->c40 = sign_extend32(get_unaligned_be16(&coef[20]), 15);
+ }
+
return 0;
}
@@ -745,10 +764,15 @@ static int dps310_calculate_pressure(struct dps310_data *data, int *val)
if (rc)
return rc;
- /* Section 4.9.1 of the DPS310 spec, Horner form to avoid overflow */
- if (!dps310_horner_step(&prs, data->c30, p, kp) ||
+ /*
+ * Section 4.9.1 of the DPS310 spec, Horner form to avoid overflow.
+ * c40 and c31 are ZTS8032 only and zero on the DPS310.
+ */
+ if (!dps310_horner_step(&prs, data->c40, p, kp) ||
+ !dps310_horner_step(&prs, data->c30, p, kp) ||
!dps310_horner_step(&prs, data->c20, p, kp) ||
!dps310_horner_step(&prs, data->c10, p, kp) ||
+ !dps310_horner_step(&tmp, data->c31, p, kp) ||
!dps310_horner_step(&tmp, data->c21, p, kp) ||
!dps310_horner_step(&tmp, data->c11, p, kp) ||
!dps310_horner_step(&tmp, data->c01, t, kt))
@@ -1418,12 +1442,14 @@ static int dps310_probe(struct i2c_client *client)
static const struct i2c_device_id dps310_id[] = {
{ .name = "dps310", .driver_data = (kernel_ulong_t)&dps310_chip_info },
+ { .name = "zts8032", .driver_data = (kernel_ulong_t)&zts8032_chip_info },
{ }
};
MODULE_DEVICE_TABLE(i2c, dps310_id);
static const struct of_device_id dps310_of_match[] = {
{ .compatible = "infineon,dps310", .data = &dps310_chip_info },
+ { .compatible = "zilltek,zts8032", .data = &zts8032_chip_info },
{ }
};
MODULE_DEVICE_TABLE(of, dps310_of_match);
--
2.55.0
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032
2026-10-19 8:36 [PATCH v5 0/5] iio: pressure: dps310: add Zilltek ZTS8032 Paulius Zaleckas
` (4 preceding siblings ...)
2026-10-19 8:36 ` [PATCH v5 5/5] iio: pressure: dps310: add Zilltek ZTS8032 support Paulius Zaleckas
@ 2026-10-19 14:16 ` Rupesh Majhi
5 siblings, 0 replies; 7+ messages in thread
From: Rupesh Majhi @ 2026-10-19 14:16 UTC (permalink / raw)
To: paulius.zaleckas
Cc: Jonathan Cameron, linux-iio, Eddie James, Joel Stanley,
David Lechner, Nuno Sá,
Andy Shevchenko, Andy Shevchenko, Uwe Kleine-König,
Joshua Crofts, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
devicetree, linux-kernel, Rupesh Majhi
On Mon, Oct 19, 2026 at 11:36:15AM +0300, Paulius Zaleckas wrote:
> I have no DPS310, so patches 3-4 are untested on one.
Tested on a DPS310 on a BeagleBone Black, against iio/testing without
the series (dps310.c as a module on the board's 7.3-rc1 kernel). TMP_CFG
still reads 0x80 after probe, pressure is within 1 Pa of the datasheet
formula at every oversampling rate, and the buffer tests pass as before.
The board adds the sensor through sysfs, so for the OF table I also
booted each patch on QEMU rainier-bmc, which has an infineon,dps310
node. Same output as without the series.
Tested-by: Rupesh Majhi <zoone.rupert@gmail.com>
^ permalink raw reply [flat|nested] 7+ messages in thread