Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: kx022a: Support ROHM KX134ACR-LBZ

The register interface of the ROHM KX134ACR-LBZ accelerometer is
almost identical to the KX132ACR-LBZ. The main difference between these
accelerometers is that the KX134ACR-LBZ supports different G-ranges. The
driver can model this by informing different scale to users. Also, the
content of the "who_am_I" register is different.

Add an ID and scales for the KX134ACR-LBZ.

Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
Link: https://patch.msgid.link/27c43c595de1f3f698ace671922d4f5a48c3cd54.1732783834.git.mazziesaccount@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Matti Vaittinen and committed by
Jonathan Cameron
48e4f3cb 720c8b77

+42
+2
drivers/iio/accel/kionix-kx022a-i2c.c
··· 39 39 { .name = "kx022a", .driver_data = (kernel_ulong_t)&kx022a_chip_info }, 40 40 { .name = "kx132-1211", .driver_data = (kernel_ulong_t)&kx132_chip_info }, 41 41 { .name = "kx132acr-lbz", .driver_data = (kernel_ulong_t)&kx132acr_chip_info }, 42 + { .name = "kx134acr-lbz", .driver_data = (kernel_ulong_t)&kx134acr_chip_info }, 42 43 { } 43 44 }; 44 45 MODULE_DEVICE_TABLE(i2c, kx022a_i2c_id); ··· 48 47 { .compatible = "kionix,kx022a", .data = &kx022a_chip_info }, 49 48 { .compatible = "kionix,kx132-1211", .data = &kx132_chip_info }, 50 49 { .compatible = "rohm,kx132acr-lbz", .data = &kx132acr_chip_info }, 50 + { .compatible = "rohm,kx134acr-lbz", .data = &kx134acr_chip_info }, 51 51 { } 52 52 }; 53 53 MODULE_DEVICE_TABLE(of, kx022a_of_match);
+2
drivers/iio/accel/kionix-kx022a-spi.c
··· 39 39 { .name = "kx022a", .driver_data = (kernel_ulong_t)&kx022a_chip_info }, 40 40 { .name = "kx132-1211", .driver_data = (kernel_ulong_t)&kx132_chip_info }, 41 41 { .name = "kx132acr-lbz", .driver_data = (kernel_ulong_t)&kx132acr_chip_info }, 42 + { .name = "kx134acr-lbz", .driver_data = (kernel_ulong_t)&kx134acr_chip_info }, 42 43 { } 43 44 }; 44 45 MODULE_DEVICE_TABLE(spi, kx022a_id); ··· 48 47 { .compatible = "kionix,kx022a", .data = &kx022a_chip_info }, 49 48 { .compatible = "kionix,kx132-1211", .data = &kx132_chip_info }, 50 49 { .compatible = "rohm,kx132acr-lbz", .data = &kx132acr_chip_info }, 50 + { .compatible = "rohm,kx134acr-lbz", .data = &kx134acr_chip_info }, 51 51 { } 52 52 }; 53 53 MODULE_DEVICE_TABLE(of, kx022a_of_match);
+36
drivers/iio/accel/kionix-kx022a.c
··· 408 408 { 0, 4788403 }, 409 409 }; 410 410 411 + /* KX134ACR-LBZ ranges are (+/-) 8, 16, 32, 64 G */ 412 + static const int kx134acr_lbz_scale_table[][2] = { 413 + { 0, 2394202 }, 414 + { 0, 4788403 }, 415 + { 0, 9576807 }, 416 + { 0, 19153613 }, 417 + }; 418 + 411 419 static int kx022a_read_avail(struct iio_dev *indio_dev, 412 420 struct iio_chan_spec const *chan, 413 421 const int **vals, int *type, int *length, ··· 1243 1235 .get_fifo_bytes_available = kx022a_get_fifo_bytes_available, 1244 1236 }; 1245 1237 EXPORT_SYMBOL_NS_GPL(kx132acr_chip_info, "IIO_KX022A"); 1238 + 1239 + const struct kx022a_chip_info kx134acr_chip_info = { 1240 + .name = "kx134acr-lbz", 1241 + .regmap_config = &kx022a_regmap_config, 1242 + .channels = kx022a_channels, 1243 + .num_channels = ARRAY_SIZE(kx022a_channels), 1244 + .scale_table = kx134acr_lbz_scale_table, 1245 + .scale_table_size = ARRAY_SIZE(kx134acr_lbz_scale_table) * 1246 + ARRAY_SIZE(kx134acr_lbz_scale_table[0]), 1247 + .fifo_length = KX022A_FIFO_LENGTH, 1248 + .who = KX022A_REG_WHO, 1249 + .id = KX134ACR_LBZ_ID, 1250 + .cntl = KX022A_REG_CNTL, 1251 + .cntl2 = KX022A_REG_CNTL2, 1252 + .odcntl = KX022A_REG_ODCNTL, 1253 + .buf_cntl1 = KX022A_REG_BUF_CNTL1, 1254 + .buf_cntl2 = KX022A_REG_BUF_CNTL2, 1255 + .buf_clear = KX022A_REG_BUF_CLEAR, 1256 + .buf_status1 = KX022A_REG_BUF_STATUS_1, 1257 + .buf_read = KX022A_REG_BUF_READ, 1258 + .inc1 = KX022A_REG_INC1, 1259 + .inc4 = KX022A_REG_INC4, 1260 + .inc5 = KX022A_REG_INC5, 1261 + .inc6 = KX022A_REG_INC6, 1262 + .xout_l = KX022A_REG_XOUT_L, 1263 + .get_fifo_bytes_available = kx022a_get_fifo_bytes_available, 1264 + }; 1265 + EXPORT_SYMBOL_NS_GPL(kx134acr_chip_info, "IIO_KX022A"); 1246 1266 1247 1267 int kx022a_probe_internal(struct device *dev, const struct kx022a_chip_info *chip_info) 1248 1268 {
+2
drivers/iio/accel/kionix-kx022a.h
··· 14 14 #define KX022A_REG_WHO 0x0f 15 15 #define KX022A_ID 0xc8 16 16 #define KX132ACR_LBZ_ID 0xd8 17 + #define KX134ACR_LBZ_ID 0xcc 17 18 18 19 #define KX022A_REG_CNTL2 0x19 19 20 #define KX022A_MASK_SRST BIT(7) ··· 191 190 extern const struct kx022a_chip_info kx022a_chip_info; 192 191 extern const struct kx022a_chip_info kx132_chip_info; 193 192 extern const struct kx022a_chip_info kx132acr_chip_info; 193 + extern const struct kx022a_chip_info kx134acr_chip_info; 194 194 195 195 #endif