Loading drivers/input/misc/mpu6050.c +29 −20 Original line number Diff line number Diff line Loading @@ -804,8 +804,8 @@ static int mpu6050_set_power_mode(struct mpu6050_sensor *sensor, if (ret < 0) { dev_err(&client->dev, "Fail to write power mode, ret=%d\n", ret); } return ret; } return 0; } Loading Loading @@ -965,11 +965,19 @@ static int mpu6050_restore_context(struct mpu6050_sensor *sensor) ret = i2c_smbus_write_byte_data(client, reg->fifo_en, data |= BIT_GYRO_FIFO); if (ret < 0) { dev_err(&client->dev, "write accel_fifo_enabled failed.\n"); dev_err(&client->dev, "write gyro_fifo_enabled failed.\n"); goto exit; } } /* Accel and Gyro should set to standby by default */ ret = i2c_smbus_write_byte_data(client, reg->pwr_mgmt_2, BITS_PWR_ALL_AXIS_STBY); if (ret < 0) { dev_err(&client->dev, "set pwr_mgmt_2 failed.\n"); goto exit; } ret = mpu6050_set_lpa_freq(sensor, sensor->cfg.lpa_freq); if (ret < 0) { dev_err(&client->dev, "set lpa_freq failed.\n"); Loading @@ -993,7 +1001,7 @@ static int mpu6050_restore_context(struct mpu6050_sensor *sensor) ret = i2c_smbus_write_byte_data(client, reg->pwr_mgmt_1, pwr_ctrl); if (ret < 0) { dev_err(&client->dev, "Write saved power state failed.\n"); dev_err(&client->dev, "write saved power state failed.\n"); goto exit; } Loading Loading @@ -1047,7 +1055,7 @@ static int mpu6050_gyro_set_enable(struct mpu6050_sensor *sensor, bool enable) mutex_lock(&sensor->op_lock); if (enable) { if (!sensor->cfg.enable) { if (!sensor->power_enabled) { ret = mpu6050_power_ctl(sensor, true); if (ret < 0) { dev_err(&sensor->client->dev, Loading Loading @@ -1443,7 +1451,7 @@ static int mpu6050_accel_set_enable(struct mpu6050_sensor *sensor, bool enable) mutex_lock(&sensor->op_lock); if (enable) { if (!sensor->cfg.enable) { if (!sensor->power_enabled) { ret = mpu6050_power_ctl(sensor, true); if (ret < 0) { dev_err(&sensor->client->dev, Loading Loading @@ -2365,12 +2373,11 @@ static int mpu6050_suspend(struct device *dev) goto exit; } dev_dbg(&client->dev, "suspended\n"); exit: mutex_unlock(&sensor->op_lock); dev_dbg(&client->dev, "Suspend completed, ret=%d\n", ret); return ret; return 0; } /** Loading Loading @@ -2401,18 +2408,21 @@ static int mpu6050_resume(struct device *dev) dev_err(&client->dev, "Power on mpu6050 failed\n"); goto exit; } /* Reset sensor to recovery from unexpect state */ /* Reset sensor to recovery from unexpected state */ mpu6050_reset_chip(sensor); if (sensor->cfg.enable) { ret = mpu6050_restore_context(sensor); if (ret < 0) { dev_err(&client->dev, "Failed to restore context\n"); goto exit; } mpu6050_set_power_mode(sensor, true); } else { mpu6050_set_power_mode(sensor, false); /* Enter sleep mode if both accel and gyro are not enabled */ ret = mpu6050_set_power_mode(sensor, sensor->cfg.enable); if (ret < 0) { dev_err(&client->dev, "Failed to set power mode enable=%d\n", sensor->cfg.enable); goto exit; } if (sensor->cfg.gyro_enable) { Loading Loading @@ -2444,9 +2454,8 @@ static int mpu6050_resume(struct device *dev) if (!sensor->use_poll) enable_irq(client->irq); dev_dbg(&client->dev, "resumed\n"); exit: dev_dbg(&client->dev, "Resume complete, ret = %d\n", ret); return ret; } #endif Loading drivers/input/misc/mpu6050.h +2 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,8 @@ #define BIT_PWR_ACCEL_STBY_MASK 0x38 #define BIT_PWR_GYRO_STBY_MASK 0x07 #define BIT_LPA_FREQ_MASK 0xC0 #define BITS_PWR_ALL_AXIS_STBY (BIT_PWR_ACCEL_STBY_MASK |\ BIT_PWR_GYRO_STBY_MASK) #define REG_FIFO_COUNT_H 0x72 #define REG_FIFO_R_W 0x74 Loading Loading
drivers/input/misc/mpu6050.c +29 −20 Original line number Diff line number Diff line Loading @@ -804,8 +804,8 @@ static int mpu6050_set_power_mode(struct mpu6050_sensor *sensor, if (ret < 0) { dev_err(&client->dev, "Fail to write power mode, ret=%d\n", ret); } return ret; } return 0; } Loading Loading @@ -965,11 +965,19 @@ static int mpu6050_restore_context(struct mpu6050_sensor *sensor) ret = i2c_smbus_write_byte_data(client, reg->fifo_en, data |= BIT_GYRO_FIFO); if (ret < 0) { dev_err(&client->dev, "write accel_fifo_enabled failed.\n"); dev_err(&client->dev, "write gyro_fifo_enabled failed.\n"); goto exit; } } /* Accel and Gyro should set to standby by default */ ret = i2c_smbus_write_byte_data(client, reg->pwr_mgmt_2, BITS_PWR_ALL_AXIS_STBY); if (ret < 0) { dev_err(&client->dev, "set pwr_mgmt_2 failed.\n"); goto exit; } ret = mpu6050_set_lpa_freq(sensor, sensor->cfg.lpa_freq); if (ret < 0) { dev_err(&client->dev, "set lpa_freq failed.\n"); Loading @@ -993,7 +1001,7 @@ static int mpu6050_restore_context(struct mpu6050_sensor *sensor) ret = i2c_smbus_write_byte_data(client, reg->pwr_mgmt_1, pwr_ctrl); if (ret < 0) { dev_err(&client->dev, "Write saved power state failed.\n"); dev_err(&client->dev, "write saved power state failed.\n"); goto exit; } Loading Loading @@ -1047,7 +1055,7 @@ static int mpu6050_gyro_set_enable(struct mpu6050_sensor *sensor, bool enable) mutex_lock(&sensor->op_lock); if (enable) { if (!sensor->cfg.enable) { if (!sensor->power_enabled) { ret = mpu6050_power_ctl(sensor, true); if (ret < 0) { dev_err(&sensor->client->dev, Loading Loading @@ -1443,7 +1451,7 @@ static int mpu6050_accel_set_enable(struct mpu6050_sensor *sensor, bool enable) mutex_lock(&sensor->op_lock); if (enable) { if (!sensor->cfg.enable) { if (!sensor->power_enabled) { ret = mpu6050_power_ctl(sensor, true); if (ret < 0) { dev_err(&sensor->client->dev, Loading Loading @@ -2365,12 +2373,11 @@ static int mpu6050_suspend(struct device *dev) goto exit; } dev_dbg(&client->dev, "suspended\n"); exit: mutex_unlock(&sensor->op_lock); dev_dbg(&client->dev, "Suspend completed, ret=%d\n", ret); return ret; return 0; } /** Loading Loading @@ -2401,18 +2408,21 @@ static int mpu6050_resume(struct device *dev) dev_err(&client->dev, "Power on mpu6050 failed\n"); goto exit; } /* Reset sensor to recovery from unexpect state */ /* Reset sensor to recovery from unexpected state */ mpu6050_reset_chip(sensor); if (sensor->cfg.enable) { ret = mpu6050_restore_context(sensor); if (ret < 0) { dev_err(&client->dev, "Failed to restore context\n"); goto exit; } mpu6050_set_power_mode(sensor, true); } else { mpu6050_set_power_mode(sensor, false); /* Enter sleep mode if both accel and gyro are not enabled */ ret = mpu6050_set_power_mode(sensor, sensor->cfg.enable); if (ret < 0) { dev_err(&client->dev, "Failed to set power mode enable=%d\n", sensor->cfg.enable); goto exit; } if (sensor->cfg.gyro_enable) { Loading Loading @@ -2444,9 +2454,8 @@ static int mpu6050_resume(struct device *dev) if (!sensor->use_poll) enable_irq(client->irq); dev_dbg(&client->dev, "resumed\n"); exit: dev_dbg(&client->dev, "Resume complete, ret = %d\n", ret); return ret; } #endif Loading
drivers/input/misc/mpu6050.h +2 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,8 @@ #define BIT_PWR_ACCEL_STBY_MASK 0x38 #define BIT_PWR_GYRO_STBY_MASK 0x07 #define BIT_LPA_FREQ_MASK 0xC0 #define BITS_PWR_ALL_AXIS_STBY (BIT_PWR_ACCEL_STBY_MASK |\ BIT_PWR_GYRO_STBY_MASK) #define REG_FIFO_COUNT_H 0x72 #define REG_FIFO_R_W 0x74 Loading