Loading drivers/iio/imu/inv_mpu/Kconfig +7 −0 Original line number Diff line number Diff line Loading @@ -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" drivers/iio/imu/inv_mpu/iam20680/inv_mpu_core_20680.c +4 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { Loading Loading @@ -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, Loading Loading @@ -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 Loading drivers/iio/imu/inv_mpu/iam20680/inv_mpu_setup_20680.c +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading drivers/iio/imu/inv_mpu/inv_mpu_i2c.c +14 −7 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading drivers/iio/imu/inv_mpu/inv_mpu_iio.h +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
drivers/iio/imu/inv_mpu/Kconfig +7 −0 Original line number Diff line number Diff line Loading @@ -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"
drivers/iio/imu/inv_mpu/iam20680/inv_mpu_core_20680.c +4 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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) { Loading Loading @@ -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, Loading Loading @@ -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 Loading
drivers/iio/imu/inv_mpu/iam20680/inv_mpu_setup_20680.c +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
drivers/iio/imu/inv_mpu/inv_mpu_i2c.c +14 −7 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading
drivers/iio/imu/inv_mpu/inv_mpu_iio.h +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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