mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
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>
This commit is contained in:
parent
720c8b777a
commit
48e4f3cb67
|
|
@ -39,6 +39,7 @@ 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 },
|
||||
{ .name = "kx134acr-lbz", .driver_data = (kernel_ulong_t)&kx134acr_chip_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, kx022a_i2c_id);
|
||||
|
|
@ -47,6 +48,7 @@ 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 },
|
||||
{ .compatible = "rohm,kx134acr-lbz", .data = &kx134acr_chip_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, kx022a_of_match);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ 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 },
|
||||
{ .name = "kx134acr-lbz", .driver_data = (kernel_ulong_t)&kx134acr_chip_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(spi, kx022a_id);
|
||||
|
|
@ -47,6 +48,7 @@ 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 },
|
||||
{ .compatible = "rohm,kx134acr-lbz", .data = &kx134acr_chip_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, kx022a_of_match);
|
||||
|
|
|
|||
|
|
@ -408,6 +408,14 @@ static const int kx022a_scale_table[][2] = {
|
|||
{ 0, 4788403 },
|
||||
};
|
||||
|
||||
/* KX134ACR-LBZ ranges are (+/-) 8, 16, 32, 64 G */
|
||||
static const int kx134acr_lbz_scale_table[][2] = {
|
||||
{ 0, 2394202 },
|
||||
{ 0, 4788403 },
|
||||
{ 0, 9576807 },
|
||||
{ 0, 19153613 },
|
||||
};
|
||||
|
||||
static int kx022a_read_avail(struct iio_dev *indio_dev,
|
||||
struct iio_chan_spec const *chan,
|
||||
const int **vals, int *type, int *length,
|
||||
|
|
@ -1236,6 +1244,34 @@ const struct kx022a_chip_info kx132acr_chip_info = {
|
|||
};
|
||||
EXPORT_SYMBOL_NS_GPL(kx132acr_chip_info, "IIO_KX022A");
|
||||
|
||||
const struct kx022a_chip_info kx134acr_chip_info = {
|
||||
.name = "kx134acr-lbz",
|
||||
.regmap_config = &kx022a_regmap_config,
|
||||
.channels = kx022a_channels,
|
||||
.num_channels = ARRAY_SIZE(kx022a_channels),
|
||||
.scale_table = kx134acr_lbz_scale_table,
|
||||
.scale_table_size = ARRAY_SIZE(kx134acr_lbz_scale_table) *
|
||||
ARRAY_SIZE(kx134acr_lbz_scale_table[0]),
|
||||
.fifo_length = KX022A_FIFO_LENGTH,
|
||||
.who = KX022A_REG_WHO,
|
||||
.id = KX134ACR_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(kx134acr_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"};
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#define KX022A_REG_WHO 0x0f
|
||||
#define KX022A_ID 0xc8
|
||||
#define KX132ACR_LBZ_ID 0xd8
|
||||
#define KX134ACR_LBZ_ID 0xcc
|
||||
|
||||
#define KX022A_REG_CNTL2 0x19
|
||||
#define KX022A_MASK_SRST BIT(7)
|
||||
|
|
@ -190,5 +191,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;
|
||||
extern const struct kx022a_chip_info kx134acr_chip_info;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user