drivers:iio:stm:imu:st_lsm6dsv16bx: add lsm6dsv16b support to driver

Lsm6dsv16b sensor is managed by the same general driver
as it implements a subset of the functions of lsm6dsv16bx.

Signed-off-by: Mario Tesi <mario.tesi@st.com>
Change-Id: I4f5f22978d90619c5629b803c1283f1d70e0e7dd
This commit is contained in:
Mario Tesi 2023-05-18 11:40:20 +02:00 committed by mariotesi
parent 876ab6c015
commit 2dae89e66f
No known key found for this signature in database
GPG Key ID: 0B6EF815710A402D
4 changed files with 53 additions and 0 deletions

View File

@ -26,6 +26,7 @@
#define ST_LSM6DSV16BX_ODR_EXPAND(odr, uodr) ((odr * 1000000) + uodr) #define ST_LSM6DSV16BX_ODR_EXPAND(odr, uodr) ((odr * 1000000) + uodr)
#define ST_LSM6DSV16BX_DEV_NAME "lsm6dsv16bx" #define ST_LSM6DSV16BX_DEV_NAME "lsm6dsv16bx"
#define ST_LSM6DSV16B_DEV_NAME "lsm6dsv16b"
#define ST_LSM6DSV16BX_SAMPLE_SIZE 6 #define ST_LSM6DSV16BX_SAMPLE_SIZE 6
#define ST_LSM6DSV16BX_TS_SAMPLE_SIZE 4 #define ST_LSM6DSV16BX_TS_SAMPLE_SIZE 4
@ -398,6 +399,7 @@ struct st_lsm6dsv16bx_fs_table_entry {
*/ */
enum st_lsm6dsv16bx_hw_id { enum st_lsm6dsv16bx_hw_id {
ST_LSM6DSV16BX_ID, ST_LSM6DSV16BX_ID,
ST_LSM6DSV16B_ID,
ST_LSM6DSV16BX_MAX_ID, ST_LSM6DSV16BX_MAX_ID,
}; };

View File

@ -91,6 +91,47 @@ static const struct st_lsm6dsv16bx_settings st_lsm6dsv16bx_sensor_settings[] = {
}, },
}, },
}, },
{
.id = {
.hw_id = ST_LSM6DSV16B_ID,
.name = ST_LSM6DSV16B_DEV_NAME,
},
.st_qvar_probe = false,
.st_mlc_probe = false,
.st_fsm_probe = true,
.st_sflp_probe = true,
.st_tdm_probe = true,
.fs_table = {
[ST_LSM6DSV16BX_ID_ACC] = {
.size = 4,
.reg = {
.addr = ST_LSM6DSV16BX_REG_CTRL8_ADDR,
.mask = GENMASK(1, 0),
},
.fs_avl[0] = { ST_LSM6DSV16BX_ACC_FS_2G_GAIN, 0x0 },
.fs_avl[1] = { ST_LSM6DSV16BX_ACC_FS_4G_GAIN, 0x1 },
.fs_avl[2] = { ST_LSM6DSV16BX_ACC_FS_8G_GAIN, 0x2 },
.fs_avl[3] = { ST_LSM6DSV16BX_ACC_FS_16G_GAIN, 0x3 },
},
[ST_LSM6DSV16BX_ID_GYRO] = {
.size = 6,
.reg = {
.addr = ST_LSM6DSV16BX_REG_CTRL6_ADDR,
.mask = GENMASK(3, 0),
},
.fs_avl[0] = { ST_LSM6DSV16BX_GYRO_FS_125_GAIN, 0x0 },
.fs_avl[1] = { ST_LSM6DSV16BX_GYRO_FS_250_GAIN, 0x1 },
.fs_avl[2] = { ST_LSM6DSV16BX_GYRO_FS_500_GAIN, 0x2 },
.fs_avl[3] = { ST_LSM6DSV16BX_GYRO_FS_1000_GAIN, 0x3 },
.fs_avl[4] = { ST_LSM6DSV16BX_GYRO_FS_2000_GAIN, 0x4 },
.fs_avl[5] = { ST_LSM6DSV16BX_GYRO_FS_4000_GAIN, 0x6 },
},
[ST_LSM6DSV16BX_ID_TEMP] = {
.size = 1,
.fs_avl[0] = { (1000000 / ST_LSM6DSV16BX_TEMP_GAIN), 0x0 },
},
},
},
}; };
static const struct st_lsm6dsv16bx_odr_table_entry static const struct st_lsm6dsv16bx_odr_table_entry

View File

@ -43,12 +43,17 @@ static const struct of_device_id st_lsm6dsv16bx_i2c_of_match[] = {
.compatible = "st," ST_LSM6DSV16BX_DEV_NAME, .compatible = "st," ST_LSM6DSV16BX_DEV_NAME,
.data = (void *)ST_LSM6DSV16BX_ID, .data = (void *)ST_LSM6DSV16BX_ID,
}, },
{
.compatible = "st," ST_LSM6DSV16B_DEV_NAME,
.data = (void *)ST_LSM6DSV16B_ID,
},
{}, {},
}; };
MODULE_DEVICE_TABLE(of, st_lsm6dsv16bx_i2c_of_match); MODULE_DEVICE_TABLE(of, st_lsm6dsv16bx_i2c_of_match);
static const struct i2c_device_id st_lsm6dsv16bx_i2c_id_table[] = { static const struct i2c_device_id st_lsm6dsv16bx_i2c_id_table[] = {
{ ST_LSM6DSV16BX_DEV_NAME, ST_LSM6DSV16BX_ID }, { ST_LSM6DSV16BX_DEV_NAME, ST_LSM6DSV16BX_ID },
{ ST_LSM6DSV16B_DEV_NAME, ST_LSM6DSV16B_ID },
{}, {},
}; };
MODULE_DEVICE_TABLE(i2c, st_lsm6dsv16bx_i2c_id_table); MODULE_DEVICE_TABLE(i2c, st_lsm6dsv16bx_i2c_id_table);

View File

@ -41,12 +41,17 @@ static const struct of_device_id st_lsm6dsv16bx_spi_of_match[] = {
.compatible = "st," ST_LSM6DSV16BX_DEV_NAME, .compatible = "st," ST_LSM6DSV16BX_DEV_NAME,
.data = (void *)ST_LSM6DSV16BX_ID, .data = (void *)ST_LSM6DSV16BX_ID,
}, },
{
.compatible = "st," ST_LSM6DSV16B_DEV_NAME,
.data = (void *)ST_LSM6DSV16B_ID,
},
{}, {},
}; };
MODULE_DEVICE_TABLE(of, st_lsm6dsv16bx_spi_of_match); MODULE_DEVICE_TABLE(of, st_lsm6dsv16bx_spi_of_match);
static const struct spi_device_id st_lsm6dsv16bx_spi_id_table[] = { static const struct spi_device_id st_lsm6dsv16bx_spi_id_table[] = {
{ ST_LSM6DSV16BX_DEV_NAME, ST_LSM6DSV16BX_ID }, { ST_LSM6DSV16BX_DEV_NAME, ST_LSM6DSV16BX_ID },
{ ST_LSM6DSV16B_DEV_NAME, ST_LSM6DSV16B_ID },
{}, {},
}; };
MODULE_DEVICE_TABLE(spi, st_lsm6dsv16bx_spi_id_table); MODULE_DEVICE_TABLE(spi, st_lsm6dsv16bx_spi_id_table);