Commit 5022c5a4 authored by Martin Kepplinger's avatar Martin Kepplinger Committed by Jonathan Cameron

iio: imu: st_lsm6dsx: move register definitions to sensor_settings struct

Move some register definitions to the per-device array of struct
st_lsm6dsx_sensor_settings in order to simplify adding new sensor
devices to the driver.

Also, remove completely unused register definitions.
Signed-off-by: default avatarMartin Kepplinger <martin.kepplinger@puri.sm>
Acked-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 3b72950d
...@@ -203,6 +203,9 @@ struct st_lsm6dsx_ext_dev_settings { ...@@ -203,6 +203,9 @@ struct st_lsm6dsx_ext_dev_settings {
/** /**
* struct st_lsm6dsx_settings - ST IMU sensor settings * struct st_lsm6dsx_settings - ST IMU sensor settings
* @wai: Sensor WhoAmI default value. * @wai: Sensor WhoAmI default value.
* @int1_addr: Control Register address for INT1
* @int2_addr: Control Register address for INT2
* @reset_addr: register address for reset/reboot
* @max_fifo_size: Sensor max fifo length in FIFO words. * @max_fifo_size: Sensor max fifo length in FIFO words.
* @id: List of hw id/device name supported by the driver configuration. * @id: List of hw id/device name supported by the driver configuration.
* @channels: IIO channels supported by the device. * @channels: IIO channels supported by the device.
...@@ -216,6 +219,9 @@ struct st_lsm6dsx_ext_dev_settings { ...@@ -216,6 +219,9 @@ struct st_lsm6dsx_ext_dev_settings {
*/ */
struct st_lsm6dsx_settings { struct st_lsm6dsx_settings {
u8 wai; u8 wai;
u8 int1_addr;
u8 int2_addr;
u8 reset_addr;
u16 max_fifo_size; u16 max_fifo_size;
struct { struct {
enum st_lsm6dsx_hw_id hw_id; enum st_lsm6dsx_hw_id hw_id;
......
...@@ -49,17 +49,12 @@ ...@@ -49,17 +49,12 @@
#include "st_lsm6dsx.h" #include "st_lsm6dsx.h"
#define ST_LSM6DSX_REG_INT1_ADDR 0x0d
#define ST_LSM6DSX_REG_INT2_ADDR 0x0e
#define ST_LSM6DSX_REG_FIFO_FTH_IRQ_MASK BIT(3) #define ST_LSM6DSX_REG_FIFO_FTH_IRQ_MASK BIT(3)
#define ST_LSM6DSX_REG_WHOAMI_ADDR 0x0f #define ST_LSM6DSX_REG_WHOAMI_ADDR 0x0f
#define ST_LSM6DSX_REG_RESET_ADDR 0x12
#define ST_LSM6DSX_REG_RESET_MASK BIT(0) #define ST_LSM6DSX_REG_RESET_MASK BIT(0)
#define ST_LSM6DSX_REG_BOOT_MASK BIT(7) #define ST_LSM6DSX_REG_BOOT_MASK BIT(7)
#define ST_LSM6DSX_REG_BDU_ADDR 0x12 #define ST_LSM6DSX_REG_BDU_ADDR 0x12
#define ST_LSM6DSX_REG_BDU_MASK BIT(6) #define ST_LSM6DSX_REG_BDU_MASK BIT(6)
#define ST_LSM6DSX_REG_INT2_ON_INT1_ADDR 0x13
#define ST_LSM6DSX_REG_INT2_ON_INT1_MASK BIT(5)
static const struct iio_chan_spec st_lsm6dsx_acc_channels[] = { static const struct iio_chan_spec st_lsm6dsx_acc_channels[] = {
ST_LSM6DSX_CHANNEL(IIO_ACCEL, 0x28, IIO_MOD_X, 0), ST_LSM6DSX_CHANNEL(IIO_ACCEL, 0x28, IIO_MOD_X, 0),
...@@ -78,6 +73,9 @@ static const struct iio_chan_spec st_lsm6dsx_gyro_channels[] = { ...@@ -78,6 +73,9 @@ static const struct iio_chan_spec st_lsm6dsx_gyro_channels[] = {
static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
{ {
.wai = 0x69, .wai = 0x69,
.int1_addr = 0x0d,
.int2_addr = 0x0e,
.reset_addr = 0x12,
.max_fifo_size = 1365, .max_fifo_size = 1365,
.id = { .id = {
{ {
...@@ -187,6 +185,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -187,6 +185,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
}, },
{ {
.wai = 0x69, .wai = 0x69,
.int1_addr = 0x0d,
.int2_addr = 0x0e,
.reset_addr = 0x12,
.max_fifo_size = 682, .max_fifo_size = 682,
.id = { .id = {
{ {
...@@ -296,6 +297,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -296,6 +297,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
}, },
{ {
.wai = 0x6a, .wai = 0x6a,
.int1_addr = 0x0d,
.int2_addr = 0x0e,
.reset_addr = 0x12,
.max_fifo_size = 682, .max_fifo_size = 682,
.id = { .id = {
{ {
...@@ -414,6 +418,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -414,6 +418,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
}, },
{ {
.wai = 0x6c, .wai = 0x6c,
.int1_addr = 0x0d,
.int2_addr = 0x0e,
.reset_addr = 0x12,
.max_fifo_size = 512, .max_fifo_size = 512,
.id = { .id = {
{ {
...@@ -544,6 +551,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -544,6 +551,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
}, },
{ {
.wai = 0x6b, .wai = 0x6b,
.int1_addr = 0x0d,
.int2_addr = 0x0e,
.reset_addr = 0x12,
.max_fifo_size = 512, .max_fifo_size = 512,
.id = { .id = {
{ {
...@@ -645,6 +655,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { ...@@ -645,6 +655,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
}, },
{ {
.wai = 0x6b, .wai = 0x6b,
.int1_addr = 0x0d,
.int2_addr = 0x0e,
.reset_addr = 0x12,
.max_fifo_size = 512, .max_fifo_size = 512,
.id = { .id = {
{ {
...@@ -1172,10 +1185,10 @@ static int st_lsm6dsx_get_drdy_reg(struct st_lsm6dsx_hw *hw, u8 *drdy_reg) ...@@ -1172,10 +1185,10 @@ static int st_lsm6dsx_get_drdy_reg(struct st_lsm6dsx_hw *hw, u8 *drdy_reg)
switch (drdy_pin) { switch (drdy_pin) {
case 1: case 1:
*drdy_reg = ST_LSM6DSX_REG_INT1_ADDR; *drdy_reg = hw->settings->int1_addr;
break; break;
case 2: case 2:
*drdy_reg = ST_LSM6DSX_REG_INT2_ADDR; *drdy_reg = hw->settings->int2_addr;
break; break;
default: default:
dev_err(hw->dev, "unsupported data ready pin\n"); dev_err(hw->dev, "unsupported data ready pin\n");
...@@ -1275,7 +1288,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) ...@@ -1275,7 +1288,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
int err; int err;
/* device sw reset */ /* device sw reset */
err = regmap_update_bits(hw->regmap, ST_LSM6DSX_REG_RESET_ADDR, err = regmap_update_bits(hw->regmap, hw->settings->reset_addr,
ST_LSM6DSX_REG_RESET_MASK, ST_LSM6DSX_REG_RESET_MASK,
FIELD_PREP(ST_LSM6DSX_REG_RESET_MASK, 1)); FIELD_PREP(ST_LSM6DSX_REG_RESET_MASK, 1));
if (err < 0) if (err < 0)
...@@ -1284,7 +1297,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) ...@@ -1284,7 +1297,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
msleep(50); msleep(50);
/* reload trimming parameter */ /* reload trimming parameter */
err = regmap_update_bits(hw->regmap, ST_LSM6DSX_REG_RESET_ADDR, err = regmap_update_bits(hw->regmap, hw->settings->reset_addr,
ST_LSM6DSX_REG_BOOT_MASK, ST_LSM6DSX_REG_BOOT_MASK,
FIELD_PREP(ST_LSM6DSX_REG_BOOT_MASK, 1)); FIELD_PREP(ST_LSM6DSX_REG_BOOT_MASK, 1));
if (err < 0) if (err < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment