Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -203,6 +203,9 @@ struct st_lsm6dsx_ext_dev_settings {
/**
 * struct st_lsm6dsx_settings - ST IMU sensor settings
 * @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.
 * @id: List of hw id/device name supported by the driver configuration.
 * @channels: IIO channels supported by the device.
@@ -216,6 +219,9 @@ struct st_lsm6dsx_ext_dev_settings {
 */
struct st_lsm6dsx_settings {
	u8 wai;
	u8 int1_addr;
	u8 int2_addr;
	u8 reset_addr;
	u16 max_fifo_size;
	struct {
		enum st_lsm6dsx_hw_id hw_id;
+22 −9
Original line number Diff line number Diff line
@@ -49,17 +49,12 @@

#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_WHOAMI_ADDR		0x0f
#define ST_LSM6DSX_REG_RESET_ADDR		0x12
#define ST_LSM6DSX_REG_RESET_MASK		BIT(0)
#define ST_LSM6DSX_REG_BOOT_MASK		BIT(7)
#define ST_LSM6DSX_REG_BDU_ADDR			0x12
#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[] = {
	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[] = {
	{
		.wai = 0x69,
		.int1_addr = 0x0d,
		.int2_addr = 0x0e,
		.reset_addr = 0x12,
		.max_fifo_size = 1365,
		.id = {
			{
@@ -187,6 +185,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
	},
	{
		.wai = 0x69,
		.int1_addr = 0x0d,
		.int2_addr = 0x0e,
		.reset_addr = 0x12,
		.max_fifo_size = 682,
		.id = {
			{
@@ -296,6 +297,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
	},
	{
		.wai = 0x6a,
		.int1_addr = 0x0d,
		.int2_addr = 0x0e,
		.reset_addr = 0x12,
		.max_fifo_size = 682,
		.id = {
			{
@@ -414,6 +418,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
	},
	{
		.wai = 0x6c,
		.int1_addr = 0x0d,
		.int2_addr = 0x0e,
		.reset_addr = 0x12,
		.max_fifo_size = 512,
		.id = {
			{
@@ -544,6 +551,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
	},
	{
		.wai = 0x6b,
		.int1_addr = 0x0d,
		.int2_addr = 0x0e,
		.reset_addr = 0x12,
		.max_fifo_size = 512,
		.id = {
			{
@@ -645,6 +655,9 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = {
	},
	{
		.wai = 0x6b,
		.int1_addr = 0x0d,
		.int2_addr = 0x0e,
		.reset_addr = 0x12,
		.max_fifo_size = 512,
		.id = {
			{
@@ -1172,10 +1185,10 @@ static int st_lsm6dsx_get_drdy_reg(struct st_lsm6dsx_hw *hw, u8 *drdy_reg)

	switch (drdy_pin) {
	case 1:
		*drdy_reg = ST_LSM6DSX_REG_INT1_ADDR;
		*drdy_reg = hw->settings->int1_addr;
		break;
	case 2:
		*drdy_reg = ST_LSM6DSX_REG_INT2_ADDR;
		*drdy_reg = hw->settings->int2_addr;
		break;
	default:
		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;

	/* 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,
				 FIELD_PREP(ST_LSM6DSX_REG_RESET_MASK, 1));
	if (err < 0)
@@ -1284,7 +1297,7 @@ static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw)
	msleep(50);

	/* 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,
				 FIELD_PREP(ST_LSM6DSX_REG_BOOT_MASK, 1));
	if (err < 0)