Release 4.18 drivers/iio/imu/inv_mpu6050/inv_mpu_trigger.c
/*
* Copyright (C) 2012 Invensense, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "inv_mpu_iio.h"
static void inv_scan_query(struct iio_dev *indio_dev)
{
struct inv_mpu6050_state *st = iio_priv(indio_dev);
st->chip_config.gyro_fifo_enable =
test_bit(INV_MPU6050_SCAN_GYRO_X,
indio_dev->active_scan_mask) ||
test_bit(INV_MPU6050_SCAN_GYRO_Y,
indio_dev->active_scan_mask) ||
test_bit(INV_MPU6050_SCAN_GYRO_Z,
indio_dev->active_scan_mask);
st->chip_config.accl_fifo_enable =
test_bit(INV_MPU6050_SCAN_ACCL_X,
indio_dev->active_scan_mask) ||
test_bit(INV_MPU6050_SCAN_ACCL_Y,
indio_dev->active_scan_mask) ||
test_bit(INV_MPU6050_SCAN_ACCL_Z,
indio_dev->active_scan_mask);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Ge Gao | 87 | 100.00% | 1 | 100.00% |
Total | 87 | 100.00% | 1 | 100.00% |
/**
* 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);
st->skip_samples = 0;
if (st->chip_config.gyro_fifo_enable) {
result = inv_mpu6050_switch_engine(st, true,
INV_MPU6050_BIT_PWR_GYRO_STBY);
if (result)
goto error_power_off;
/* gyro first sample is out of specs, skip it */
st->skip_samples = 1;
}
if (st->chip_config.accl_fifo_enable) {
result = inv_mpu6050_switch_engine(st, true,
INV_MPU6050_BIT_PWR_ACCL_STBY);
if (result)
goto error_gyro_off;
}
result = inv_reset_fifo(indio_dev);
if (result)
goto error_accl_off;
} else {
result = regmap_write(st->map, st->reg->fifo_en, 0);
if (result)
goto error_accl_off;
result = regmap_write(st->map, st->reg->int_enable, 0);
if (result)
goto error_accl_off;
result = regmap_write(st->map, st->reg->user_ctrl,
st->chip_config.user_ctrl);
if (result)
goto error_accl_off;
result = inv_mpu6050_switch_engine(st, false,
INV_MPU6050_BIT_PWR_ACCL_STBY);
if (result)
goto error_accl_off;
result = inv_mpu6050_switch_engine(st, false,
INV_MPU6050_BIT_PWR_GYRO_STBY);
if (result)
goto error_gyro_off;
result = inv_mpu6050_set_power_itg(st, false);
if (result)
goto error_power_off;
}
return 0;
error_accl_off:
if (st->chip_config.accl_fifo_enable)
inv_mpu6050_switch_engine(st, false,
INV_MPU6050_BIT_PWR_ACCL_STBY);
error_gyro_off:
if (st->chip_config.gyro_fifo_enable)
inv_mpu6050_switch_engine(st, false,
INV_MPU6050_BIT_PWR_GYRO_STBY);
error_power_off:
inv_mpu6050_set_power_itg(st, false);
return result;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Ge Gao | 215 | 66.98% | 1 | 20.00% |
Jean-Baptiste Maneyrol | 97 | 30.22% | 3 | 60.00% |
Adriana Reus | 9 | 2.80% | 1 | 20.00% |
Total | 321 | 100.00% | 5 | 100.00% |
/**
* inv_mpu_data_rdy_trigger_set_state() - set data ready interrupt state
* @trig: Trigger instance
* @state: Desired trigger state
*/
static int inv_mpu_data_rdy_trigger_set_state(struct iio_trigger *trig,
bool state)
{
struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
struct inv_mpu6050_state *st = iio_priv(indio_dev);
int result;
mutex_lock(&st->lock);
result = inv_mpu6050_set_enable(indio_dev, state);
mutex_unlock(&st->lock);
return result;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Jean-Baptiste Maneyrol | 43 | 66.15% | 1 | 33.33% |
Ge Gao | 19 | 29.23% | 1 | 33.33% |
Lars-Peter Clausen | 3 | 4.62% | 1 | 33.33% |
Total | 65 | 100.00% | 3 | 100.00% |
static const struct iio_trigger_ops inv_mpu_trigger_ops = {
.set_trigger_state = &inv_mpu_data_rdy_trigger_set_state,
};
int inv_mpu6050_probe_trigger(struct iio_dev *indio_dev, int irq_type)
{
int ret;
struct inv_mpu6050_state *st = iio_priv(indio_dev);
st->trig = devm_iio_trigger_alloc(&indio_dev->dev,
"%s-dev%d",
indio_dev->name,
indio_dev->id);
if (!st->trig)
return -ENOMEM;
ret = devm_request_irq(&indio_dev->dev, st->irq,
&iio_trigger_generic_data_rdy_poll,
irq_type,
"inv_mpu",
st->trig);
if (ret)
return ret;
st->trig->dev.parent = regmap_get_device(st->map);
st->trig->ops = &inv_mpu_trigger_ops;
iio_trigger_set_drvdata(st->trig, indio_dev);
ret = devm_iio_trigger_register(&indio_dev->dev, st->trig);
if (ret)
return ret;
indio_dev->trig = iio_trigger_get(st->trig);
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Ge Gao | 113 | 71.07% | 1 | 11.11% |
Varka Bhadram | 21 | 13.21% | 3 | 33.33% |
Lars-Peter Clausen | 8 | 5.03% | 1 | 11.11% |
Jean-Baptiste Maneyrol | 6 | 3.77% | 1 | 11.11% |
Adriana Reus | 4 | 2.52% | 1 | 11.11% |
Martin Kelly | 4 | 2.52% | 1 | 11.11% |
Srinivas Pandruvada | 3 | 1.89% | 1 | 11.11% |
Total | 159 | 100.00% | 9 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Ge Gao | 454 | 69.63% | 1 | 7.14% |
Jean-Baptiste Maneyrol | 146 | 22.39% | 5 | 35.71% |
Varka Bhadram | 21 | 3.22% | 3 | 21.43% |
Adriana Reus | 13 | 1.99% | 2 | 14.29% |
Lars-Peter Clausen | 11 | 1.69% | 1 | 7.14% |
Martin Kelly | 4 | 0.61% | 1 | 7.14% |
Srinivas Pandruvada | 3 | 0.46% | 1 | 7.14% |
Total | 652 | 100.00% | 14 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.