mirror of https://gitee.com/openkylin/linux.git
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: Martin Kepplinger <martin.kepplinger@puri.sm> Acked-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
3b72950d5a
commit
5022c5a433
|
@ -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 {
|
||||||
*/
|
*/
|
||||||
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 @@
|
||||||
|
|
||||||
#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[] = {
|
||||||
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[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.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[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.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[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.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[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.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[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue