/** * inv_mpu6050_set_enable() - enable chip functions. * @indio_dev: Device driver instance. * @enable: enable/disable */ static int inv_mpu6050_set_enable(struct iio_dev *indio_dev, bool enable) { struct inv_mpu6050_state *st = iio_priv(indio_dev); int result; if (enable) { result = inv_mpu6050_set_power_itg(st, true); if (result) return result; inv_scan_query(indio_dev); if (st->chip_config.gyro_fifo_enable) { result = inv_mpu6050_switch_engine(st, true, INV_MPU6050_BIT_PWR_GYRO_STBY); if (result) return result; } if (st->chip_config.accl_fifo_enable) { result = inv_mpu6050_switch_engine(st, true, INV_MPU6050_BIT_PWR_ACCL_STBY); if (result) return result; } result = inv_reset_fifo(indio_dev); if (result) return result; } else { result = inv_mpu6050_write_reg(st, st->reg->fifo_en, 0); if (result) return result; result = inv_mpu6050_write_reg(st, st->reg->int_enable, 0); if (result) return result; result = inv_mpu6050_write_reg(st, st->reg->user_ctrl, 0); if (result) return result; result = inv_mpu6050_switch_engine(st, false, INV_MPU6050_BIT_PWR_GYRO_STBY); if (result) return result; result = inv_mpu6050_switch_engine(st, false, INV_MPU6050_BIT_PWR_ACCL_STBY); if (result) return result; result = inv_mpu6050_set_power_itg(st, false); if (result) return result; } st->chip_config.enable = enable; return 0; }
static int inv_mpu_i2c_disable(struct iio_dev *indio_dev) { struct inv_mpu6050_state *st = iio_priv(indio_dev); int ret = 0; ret = inv_mpu6050_set_power_itg(st, true); if (ret) return ret; ret = regmap_write(st->map, INV_MPU6050_REG_USER_CTRL, INV_MPU6050_BIT_I2C_IF_DIS); if (ret) { inv_mpu6050_set_power_itg(st, false); return ret; } return inv_mpu6050_set_power_itg(st, false); }
static int inv_mpu_i2c_disable(struct iio_dev *indio_dev) { struct inv_mpu6050_state *st = iio_priv(indio_dev); int ret = 0; ret = inv_mpu6050_set_power_itg(st, true); if (ret) return ret; st->chip_config.user_ctrl |= INV_MPU6050_BIT_I2C_IF_DIS; ret = regmap_write(st->map, st->reg->user_ctrl, st->chip_config.user_ctrl); if (ret) { inv_mpu6050_set_power_itg(st, false); return ret; } return inv_mpu6050_set_power_itg(st, false); }