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

Commit e804aae2 authored by puneet's avatar puneet Committed by Gerrit - the friendly Code Review server
Browse files

drivers: iio: imu: Enabled batching support for iam20680



Enabled the batching support while early buffering the
sensor data on probe, which reduces load on cpu and changed
defconfig name for early buffering support

CRs-Fixed: 2302516
Change-Id: I561e8dcbf5b1e2cfa1e2837013f6def19ad701aa
Signed-off-by: default avatarpuneet <puneet@codeaurora.org>
parent 593d0568
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