The ROHM KX132ACR-LBZ is an accelerometer for industrial applications.
It has a subset of KX022A (NOTE: Not KX132-1211) functionalities, dropping
support for tap, free fall and tilt detection engines. Also, the register
interface is an exact subset of what is found on KX022A (except the
WHO_AM_I register value).
This series adds own DT compatible for the KX132ACR-LBZ and also own
chip-info in driver to allow handling the different 'WHO_AM_I' value.
The separation of the Kionix KX022A and ROHM KX132ACR-LBZ does also
allow adding support for the KX022A tilt/free fall/tap engines which are
not present on KX132ACR-LBZ.
Revision history:
v1 => v2:
- Add KX132ACR-LBZ into list of the supported ICs in Kconfig
Matti Vaittinen (2):
dt-bindings: iio: Add KX132ACR-LBZ accelerometer
iio: kx022a: Support ROHM KX132ACR-LBZ
.../bindings/iio/accel/kionix,kx022a.yaml | 10 +++---
drivers/iio/accel/Kconfig | 4 +--
drivers/iio/accel/kionix-kx022a-i2c.c | 4 ++-
drivers/iio/accel/kionix-kx022a-spi.c | 4 ++-
drivers/iio/accel/kionix-kx022a.c | 34 ++++++++++++++++++-
drivers/iio/accel/kionix-kx022a.h | 2 ++
6 files changed, 49 insertions(+), 9 deletions(-)
base-commit: 5e99f692d4e32e3250ab18d511894ca797407aec
--
2.41.0
--
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND
~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =]
dt-bindings: iio: Add KX132ACR-LBZ accelerometer
ROHM KX132ACR-LBZ is an accelerometer for industrial applications. It
has a subset of KX022A functionalities, dropping support for tap, free
fall and tilt detection engines. Also, the register interface is an exact
subset of what is found on KX022A (except the WHO_AM_I register value).
Add support for KX132ACR-LBZ.
Signed-off-by: Matti Vaittinen <[email protected]>
---
Revision history:
v1 => v2:
- Added KX132ACR-LBZ as supported IC to Kconfig
---
drivers/iio/accel/Kconfig | 4 ++--
drivers/iio/accel/kionix-kx022a-i2c.c | 4 +++-
drivers/iio/accel/kionix-kx022a-spi.c | 4 +++-
drivers/iio/accel/kionix-kx022a.c | 34 ++++++++++++++++++++++++++-
drivers/iio/accel/kionix-kx022a.h | 2 ++
5 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig
index 373257d64a7e..f113dae59048 100644
--- a/drivers/iio/accel/Kconfig
+++ b/drivers/iio/accel/Kconfig
@@ -420,7 +420,7 @@ config IIO_KX022A_SPI
help
Enable support for the Kionix digital tri-axis accelerometers
connected to SPI interface. Supported devices are:
- KX022A, KX132-1211
+ KX022A, KX132-1211, KX132ACR-LBZ
config IIO_KX022A_I2C
tristate "Kionix KX022A tri-axis digital accelerometer I2C interface"
@@ -430,7 +430,7 @@ config IIO_KX022A_I2C
help
Enable support for the Kionix digital tri-axis accelerometers
connected to I2C interface. Supported devices are:
- KX022A, KX132-1211
+ KX022A, KX132-1211, KX132ACR-LBZ
config KXSD9
tristate "Kionix KXSD9 Accelerometer Driver"
diff --git a/drivers/iio/accel/kionix-kx022a-i2c.c b/drivers/iio/accel/kionix-kx022a-i2c.c
index fc53e527cae0..8a1d4fc28ddd 100644
--- a/drivers/iio/accel/kionix-kx022a-i2c.c
+++ b/drivers/iio/accel/kionix-kx022a-i2c.c
@@ -2,7 +2,7 @@
/*
* Copyright (C) 2022 ROHM Semiconductors
*
- * ROHM/KIONIX KX022A accelerometer driver
+ * ROHM/KIONIX accelerometer driver
*/
#include <linux/i2c.h>
@@ -38,6 +38,7 @@ static int kx022a_i2c_probe(struct i2c_client *i2c)
static const struct i2c_device_id kx022a_i2c_id[] = {
{ .name = "kx022a", .driver_data = (kernel_ulong_t)&kx022a_chip_info },
{ .name = "kx132-1211", .driver_data = (kernel_ulong_t)&kx132_chip_info },
+ { .name = "kx132acr-lbz", .driver_data = (kernel_ulong_t)&kx132acr_chip_info },
{ }
};
MODULE_DEVICE_TABLE(i2c, kx022a_i2c_id);
@@ -45,6 +46,7 @@ MODULE_DEVICE_TABLE(i2c, kx022a_i2c_id);
static const struct of_device_id kx022a_of_match[] = {
{ .compatible = "kionix,kx022a", .data = &kx022a_chip_info },
{ .compatible = "kionix,kx132-1211", .data = &kx132_chip_info },
+ { .compatible = "rohm,kx132acr-lbz", .data = &kx132acr_chip_info },
{ }
};
MODULE_DEVICE_TABLE(of, kx022a_of_match);
diff --git a/drivers/iio/accel/kionix-kx022a-spi.c b/drivers/iio/accel/kionix-kx022a-spi.c
index e7878ba67827..f798b964d0b5 100644
--- a/drivers/iio/accel/kionix-kx022a-spi.c
+++ b/drivers/iio/accel/kionix-kx022a-spi.c
@@ -2,7 +2,7 @@
/*
* Copyright (C) 2022 ROHM Semiconductors
*
- * ROHM/KIONIX KX022A accelerometer driver
+ * ROHM/KIONIX accelerometer driver
*/
#include <linux/interrupt.h>
@@ -38,6 +38,7 @@ static int kx022a_spi_probe(struct spi_device *spi)
static const struct spi_device_id kx022a_id[] = {
{ .name = "kx022a", .driver_data = (kernel_ulong_t)&kx022a_chip_info },
{ .name = "kx132-1211", .driver_data = (kernel_ulong_t)&kx132_chip_info },
+ { .name = "kx132acr-lbz", .driver_data = (kernel_ulong_t)&kx132acr_chip_info },
{ }
};
MODULE_DEVICE_TABLE(spi, kx022a_id);
@@ -45,6 +46,7 @@ MODULE_DEVICE_TABLE(spi, kx022a_id);
static const struct of_device_id kx022a_of_match[] = {
{ .compatible = "kionix,kx022a", .data = &kx022a_chip_info },
{ .compatible = "kionix,kx132-1211", .data = &kx132_chip_info },
+ { .compatible = "rohm,kx132acr-lbz", .data = &kx132acr_chip_info },
{ }
};
MODULE_DEVICE_TABLE(of, kx022a_of_match);
diff --git a/drivers/iio/accel/kionix-kx022a.c b/drivers/iio/accel/kionix-kx022a.c
index c5b555094e60..60864be3a667 100644
--- a/drivers/iio/accel/kionix-kx022a.c
+++ b/drivers/iio/accel/kionix-kx022a.c
@@ -2,7 +2,7 @@
/*
* Copyright (C) 2022 ROHM Semiconductors
*
- * ROHM/KIONIX KX022A accelerometer driver
+ * ROHM/KIONIX accelerometer driver
*/
#include <linux/delay.h>
@@ -1188,6 +1188,38 @@ const struct kx022a_chip_info kx132_chip_info = {
};
EXPORT_SYMBOL_NS_GPL(kx132_chip_info, IIO_KX022A);
+/*
+ * Despite the naming, KX132ACR-LBZ is not similar to KX132-1211 but it is
+ * exact subset of KX022A. KX132ACR-LBZ is meant to be used for industrial
+ * applications and the tap/double tap, free fall and tilt engines were
+ * removed. Rest of the registers and functionalities (excluding the ID
+ * register) are exact match to what is found in KX022.
+ */
+const struct kx022a_chip_info kx132acr_chip_info = {
+ .name = "kx132acr-lbz",
+ .regmap_config = &kx022a_regmap_config,
+ .channels = kx022a_channels,
+ .num_channels = ARRAY_SIZE(kx022a_channels),
+ .fifo_length = KX022A_FIFO_LENGTH,
+ .who = KX022A_REG_WHO,
+ .id = KX132ACR_LBZ_ID,
+ .cntl = KX022A_REG_CNTL,
+ .cntl2 = KX022A_REG_CNTL2,
+ .odcntl = KX022A_REG_ODCNTL,
+ .buf_cntl1 = KX022A_REG_BUF_CNTL1,
+ .buf_cntl2 = KX022A_REG_BUF_CNTL2,
+ .buf_clear = KX022A_REG_BUF_CLEAR,
+ .buf_status1 = KX022A_REG_BUF_STATUS_1,
+ .buf_read = KX022A_REG_BUF_READ,
+ .inc1 = KX022A_REG_INC1,
+ .inc4 = KX022A_REG_INC4,
+ .inc5 = KX022A_REG_INC5,
+ .inc6 = KX022A_REG_INC6,
+ .xout_l = KX022A_REG_XOUT_L,
+ .get_fifo_bytes_available = kx022a_get_fifo_bytes_available,
+};
+EXPORT_SYMBOL_NS_GPL(kx132acr_chip_info, IIO_KX022A);
+
int kx022a_probe_internal(struct device *dev, const struct kx022a_chip_info *chip_info)
{
static const char * const regulator_names[] = {"io-vdd", "vdd"};
diff --git a/drivers/iio/accel/kionix-kx022a.h b/drivers/iio/accel/kionix-kx022a.h
index 35c548ae7eff..7060438ad88c 100644
--- a/drivers/iio/accel/kionix-kx022a.h
+++ b/drivers/iio/accel/kionix-kx022a.h
@@ -13,6 +13,7 @@
#define KX022A_REG_WHO 0x0f
#define KX022A_ID 0xc8
+#define KX132ACR_LBZ_ID 0xd8
#define KX022A_REG_CNTL2 0x19
#define KX022A_MASK_SRST BIT(7)
@@ -186,5 +187,6 @@ int kx022a_probe_internal(struct device *dev, const struct kx022a_chip_info *chi
extern const struct kx022a_chip_info kx022a_chip_info;
extern const struct kx022a_chip_info kx132_chip_info;
+extern const struct kx022a_chip_info kx132acr_chip_info;
#endif
--
2.41.0
--
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND
~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =]
On Thu, 28 Sep 2023 11:45:00 +0300
Matti Vaittinen <[email protected]> wrote:
> The ROHM KX132ACR-LBZ is an accelerometer for industrial applications.
> It has a subset of KX022A (NOTE: Not KX132-1211) functionalities, dropping
> support for tap, free fall and tilt detection engines. Also, the register
> interface is an exact subset of what is found on KX022A (except the
> WHO_AM_I register value).
>
> This series adds own DT compatible for the KX132ACR-LBZ and also own
> chip-info in driver to allow handling the different 'WHO_AM_I' value.
> The separation of the Kionix KX022A and ROHM KX132ACR-LBZ does also
> allow adding support for the KX022A tilt/free fall/tap engines which are
> not present on KX132ACR-LBZ.
>
> Revision history:
> v1 => v2:
> - Add KX132ACR-LBZ into list of the supported ICs in Kconfig
Series applied to the togreg branch of iio.git and pushed out as testing.
Thanks,
Jonathan
>
> Matti Vaittinen (2):
> dt-bindings: iio: Add KX132ACR-LBZ accelerometer
> iio: kx022a: Support ROHM KX132ACR-LBZ
>
> .../bindings/iio/accel/kionix,kx022a.yaml | 10 +++---
> drivers/iio/accel/Kconfig | 4 +--
> drivers/iio/accel/kionix-kx022a-i2c.c | 4 ++-
> drivers/iio/accel/kionix-kx022a-spi.c | 4 ++-
> drivers/iio/accel/kionix-kx022a.c | 34 ++++++++++++++++++-
> drivers/iio/accel/kionix-kx022a.h | 2 ++
> 6 files changed, 49 insertions(+), 9 deletions(-)
>
>
> base-commit: 5e99f692d4e32e3250ab18d511894ca797407aec