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

Commit 8c0bc7d0 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "driver: iio: imu: SMI130 early buffer implemented"

parents 4bed4004 b987a689
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -60,4 +60,11 @@ config INV_MPU_IIO_SPI
	  This driver can be built as a module. The module will be called
	  inv-mpu-iio-spi.

config ENABLE_IAM_ACC_GYRO_BUFFERING
	bool "Enable accel & gyro  boot time sensor sample buffering"
	depends on INV_MPU_IIO
	help
	  Say Y here if you want to buffer boot time sensor
	  samples for IAM20680 accelerometer and gyroscope

source "drivers/iio/imu/inv_mpu/inv_test/Kconfig"
+4 −4
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ static int _misc_attr_store(struct device *dev,
	return result;
}

#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
static inline int inv_check_acc_gyro_early_buff_enable_flag(
		struct iio_dev *indio_dev)
{
@@ -800,7 +800,7 @@ static ssize_t inv_flush_batch_store(struct device *dev,
	return count;
}

#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
static int inv_gyro_read_bootsampl(struct inv_mpu_state *st,
		unsigned long enable_read)
{
@@ -972,7 +972,7 @@ static DEVICE_ATTR(debug_reg_dump, S_IRUGO | S_IWUSR, inv_reg_dump_show, NULL);
static DEVICE_ATTR(out_temperature, S_IRUGO | S_IWUSR,
			inv_temperature_show, NULL);
static DEVICE_ATTR(misc_self_test, S_IRUGO | S_IWUSR, inv_self_test, NULL);
#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
static IIO_DEVICE_ATTR(read_acc_boot_sample, S_IRUGO | S_IWUSR,
	read_acc_boot_sample_show, read_acc_boot_sample_store, SENSOR_L_ACCEL);
static IIO_DEVICE_ATTR(read_gyro_boot_sample, S_IRUGO | S_IWUSR,
@@ -1112,7 +1112,7 @@ static const struct attribute *inv_raw_attributes[] = {
#ifndef SUPPORT_ONLY_BASIC_FEATURES
	&iio_dev_attr_in_power_on.dev_attr.attr,
#endif
#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
	&iio_dev_attr_read_acc_boot_sample.dev_attr.attr,
	&iio_dev_attr_read_gyro_boot_sample.dev_attr.attr,
#endif
+3 −0
Original line number Diff line number Diff line
@@ -271,6 +271,9 @@ static int inv_set_batch(struct inv_mpu_state *st)
	u64 timeout;
	int required_fifo_size;

#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
	st->batch.timeout = 100;
#endif
	if (st->batch.timeout) {
		required_fifo_size = st->batch.timeout * st->eng_info[ENGINE_GYRO].running_rate
					* st->batch.pk_size / 1000;
+14 −7
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ static int inv_i2c_mem_read(struct inv_mpu_state *st, u8 mpu_addr, u16 mem_addr,
	return res;
}

#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
static void inv_enable_acc_gyro(struct inv_mpu_state *st)
{
	struct iio_dev *indio_dev = iio_priv_to_dev(st);
@@ -286,6 +286,12 @@ static void inv_enable_acc_gyro(struct inv_mpu_state *st)
	int gyro_hz = 100;

	/**Enable the ACCEL**/
	st->sensor_l[SENSOR_L_ACCEL].on = 0;
	st->trigger_state = RATE_TRIGGER;
	inv_check_sensor_on(st);
	set_inv_enable(indio_dev);

	inv_switch_power_in_lp(st, true);
	st->chip_config.accel_fs = ACCEL_FSR_2G;
	inv_set_accel_sf(st);
	st->trigger_state = MISC_TRIGGER;
@@ -302,6 +308,12 @@ static void inv_enable_acc_gyro(struct inv_mpu_state *st)
	set_inv_enable(indio_dev);

	/**Enable the GYRO**/
	st->sensor_l[SENSOR_L_GYRO].on = 0;
	st->trigger_state = RATE_TRIGGER;
	inv_check_sensor_on(st);
	set_inv_enable(indio_dev);

	inv_switch_power_in_lp(st, true);
	st->chip_config.fsr = GYRO_FSR_250DPS;
	inv_set_gyro_sf(st);
	st->trigger_state = MISC_TRIGGER;
@@ -317,13 +329,7 @@ static void inv_enable_acc_gyro(struct inv_mpu_state *st)
	inv_check_sensor_on(st);
	set_inv_enable(indio_dev);
}
#else
static void inv_enable_acc_gyro(struct inv_mpu_state *st)
{
}
#endif

#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
static int inv_acc_gyro_early_buff_init(struct iio_dev *indio_dev)
{
	int i = 0, err = 0;
@@ -432,6 +438,7 @@ static int inv_acc_gyro_early_buff_init(struct iio_dev *indio_dev)

	st->acc_buffer_inv_samples = true;
	st->gyro_buffer_inv_samples = true;

	inv_enable_acc_gyro(st);

	return 1;
+2 −2
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@
#define COVARIANCE_SIZE          14
#define ACCEL_COVARIANCE_SIZE  (COVARIANCE_SIZE * sizeof(int))

#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
#define INV_ACC_MAXSAMPLE        4000
#define INV_GYRO_MAXSAMPLE       4000
#define G_MAX                    23920640
@@ -855,7 +855,7 @@ struct inv_mpu_state {
	u8 int_en_2;
	u8 gesture_int_count;
	u8 smplrt_div;
#ifdef CONFIG_ENABLE_ACC_GYRO_BUFFERING
#ifdef CONFIG_ENABLE_IAM_ACC_GYRO_BUFFERING
	bool read_acc_boot_sample;
	bool read_gyro_boot_sample;
	int acc_bufsample_cnt;
Loading