diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-02 19:20:59 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-02 19:20:59 -0500 |
| commit | deef2a118aed02aa9421e399056c82045e728282 (patch) | |
| tree | ffd415cb12df4d1afba0a5f9f37bf17dc3f5e86f /drivers/iio/accel | |
| parent | aa9d9be96d33d97488e1bdf13a144931a3fce08e (diff) | |
| parent | 009d0431c3914de64666bec0d350e54fdd59df6a (diff) | |
Merge 3.18-rc7 into staging-work.
We want those staging fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/iio/accel')
| -rw-r--r-- | drivers/iio/accel/bmc150-accel.c | 40 | ||||
| -rw-r--r-- | drivers/iio/accel/kxcjk-1013.c | 2 |
2 files changed, 35 insertions, 7 deletions
diff --git a/drivers/iio/accel/bmc150-accel.c b/drivers/iio/accel/bmc150-accel.c index 22c096ce39ad..513bd6d14293 100644 --- a/drivers/iio/accel/bmc150-accel.c +++ b/drivers/iio/accel/bmc150-accel.c | |||
| @@ -44,6 +44,9 @@ | |||
| 44 | 44 | ||
| 45 | #define BMC150_ACCEL_REG_INT_STATUS_2 0x0B | 45 | #define BMC150_ACCEL_REG_INT_STATUS_2 0x0B |
| 46 | #define BMC150_ACCEL_ANY_MOTION_MASK 0x07 | 46 | #define BMC150_ACCEL_ANY_MOTION_MASK 0x07 |
| 47 | #define BMC150_ACCEL_ANY_MOTION_BIT_X BIT(0) | ||
| 48 | #define BMC150_ACCEL_ANY_MOTION_BIT_Y BIT(1) | ||
| 49 | #define BMC150_ACCEL_ANY_MOTION_BIT_Z BIT(2) | ||
| 47 | #define BMC150_ACCEL_ANY_MOTION_BIT_SIGN BIT(3) | 50 | #define BMC150_ACCEL_ANY_MOTION_BIT_SIGN BIT(3) |
| 48 | 51 | ||
| 49 | #define BMC150_ACCEL_REG_PMU_LPW 0x11 | 52 | #define BMC150_ACCEL_REG_PMU_LPW 0x11 |
| @@ -92,9 +95,9 @@ | |||
| 92 | #define BMC150_ACCEL_SLOPE_THRES_MASK 0xFF | 95 | #define BMC150_ACCEL_SLOPE_THRES_MASK 0xFF |
| 93 | 96 | ||
| 94 | /* Slope duration in terms of number of samples */ | 97 | /* Slope duration in terms of number of samples */ |
| 95 | #define BMC150_ACCEL_DEF_SLOPE_DURATION 2 | 98 | #define BMC150_ACCEL_DEF_SLOPE_DURATION 1 |
| 96 | /* in terms of multiples of g's/LSB, based on range */ | 99 | /* in terms of multiples of g's/LSB, based on range */ |
| 97 | #define BMC150_ACCEL_DEF_SLOPE_THRESHOLD 5 | 100 | #define BMC150_ACCEL_DEF_SLOPE_THRESHOLD 1 |
| 98 | 101 | ||
| 99 | #define BMC150_ACCEL_REG_XOUT_L 0x02 | 102 | #define BMC150_ACCEL_REG_XOUT_L 0x02 |
| 100 | 103 | ||
| @@ -536,6 +539,9 @@ static int bmc150_accel_set_power_state(struct bmc150_accel_data *data, bool on) | |||
| 536 | if (ret < 0) { | 539 | if (ret < 0) { |
| 537 | dev_err(&data->client->dev, | 540 | dev_err(&data->client->dev, |
| 538 | "Failed: bmc150_accel_set_power_state for %d\n", on); | 541 | "Failed: bmc150_accel_set_power_state for %d\n", on); |
| 542 | if (on) | ||
| 543 | pm_runtime_put_noidle(&data->client->dev); | ||
| 544 | |||
| 539 | return ret; | 545 | return ret; |
| 540 | } | 546 | } |
| 541 | 547 | ||
| @@ -811,6 +817,7 @@ static int bmc150_accel_write_event_config(struct iio_dev *indio_dev, | |||
| 811 | 817 | ||
| 812 | ret = bmc150_accel_setup_any_motion_interrupt(data, state); | 818 | ret = bmc150_accel_setup_any_motion_interrupt(data, state); |
| 813 | if (ret < 0) { | 819 | if (ret < 0) { |
| 820 | bmc150_accel_set_power_state(data, false); | ||
| 814 | mutex_unlock(&data->mutex); | 821 | mutex_unlock(&data->mutex); |
| 815 | return ret; | 822 | return ret; |
| 816 | } | 823 | } |
| @@ -846,7 +853,7 @@ static const struct attribute_group bmc150_accel_attrs_group = { | |||
| 846 | 853 | ||
| 847 | static const struct iio_event_spec bmc150_accel_event = { | 854 | static const struct iio_event_spec bmc150_accel_event = { |
| 848 | .type = IIO_EV_TYPE_ROC, | 855 | .type = IIO_EV_TYPE_ROC, |
| 849 | .dir = IIO_EV_DIR_RISING | IIO_EV_DIR_FALLING, | 856 | .dir = IIO_EV_DIR_EITHER, |
| 850 | .mask_separate = BIT(IIO_EV_INFO_VALUE) | | 857 | .mask_separate = BIT(IIO_EV_INFO_VALUE) | |
| 851 | BIT(IIO_EV_INFO_ENABLE) | | 858 | BIT(IIO_EV_INFO_ENABLE) | |
| 852 | BIT(IIO_EV_INFO_PERIOD) | 859 | BIT(IIO_EV_INFO_PERIOD) |
| @@ -1054,6 +1061,7 @@ static int bmc150_accel_data_rdy_trigger_set_state(struct iio_trigger *trig, | |||
| 1054 | else | 1061 | else |
| 1055 | ret = bmc150_accel_setup_new_data_interrupt(data, state); | 1062 | ret = bmc150_accel_setup_new_data_interrupt(data, state); |
| 1056 | if (ret < 0) { | 1063 | if (ret < 0) { |
| 1064 | bmc150_accel_set_power_state(data, false); | ||
| 1057 | mutex_unlock(&data->mutex); | 1065 | mutex_unlock(&data->mutex); |
| 1058 | return ret; | 1066 | return ret; |
| 1059 | } | 1067 | } |
| @@ -1092,12 +1100,26 @@ static irqreturn_t bmc150_accel_event_handler(int irq, void *private) | |||
| 1092 | else | 1100 | else |
| 1093 | dir = IIO_EV_DIR_RISING; | 1101 | dir = IIO_EV_DIR_RISING; |
| 1094 | 1102 | ||
| 1095 | if (ret & BMC150_ACCEL_ANY_MOTION_MASK) | 1103 | if (ret & BMC150_ACCEL_ANY_MOTION_BIT_X) |
| 1104 | iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL, | ||
| 1105 | 0, | ||
| 1106 | IIO_MOD_X, | ||
| 1107 | IIO_EV_TYPE_ROC, | ||
| 1108 | dir), | ||
| 1109 | data->timestamp); | ||
| 1110 | if (ret & BMC150_ACCEL_ANY_MOTION_BIT_Y) | ||
| 1096 | iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL, | 1111 | iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL, |
| 1097 | 0, | 1112 | 0, |
| 1098 | IIO_MOD_X_OR_Y_OR_Z, | 1113 | IIO_MOD_Y, |
| 1099 | IIO_EV_TYPE_ROC, | 1114 | IIO_EV_TYPE_ROC, |
| 1100 | IIO_EV_DIR_EITHER), | 1115 | dir), |
| 1116 | data->timestamp); | ||
| 1117 | if (ret & BMC150_ACCEL_ANY_MOTION_BIT_Z) | ||
| 1118 | iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ACCEL, | ||
| 1119 | 0, | ||
| 1120 | IIO_MOD_Z, | ||
| 1121 | IIO_EV_TYPE_ROC, | ||
| 1122 | dir), | ||
| 1101 | data->timestamp); | 1123 | data->timestamp); |
| 1102 | ack_intr_status: | 1124 | ack_intr_status: |
| 1103 | if (!data->dready_trigger_on) | 1125 | if (!data->dready_trigger_on) |
| @@ -1354,10 +1376,14 @@ static int bmc150_accel_runtime_suspend(struct device *dev) | |||
| 1354 | { | 1376 | { |
| 1355 | struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); | 1377 | struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); |
| 1356 | struct bmc150_accel_data *data = iio_priv(indio_dev); | 1378 | struct bmc150_accel_data *data = iio_priv(indio_dev); |
| 1379 | int ret; | ||
| 1357 | 1380 | ||
| 1358 | dev_dbg(&data->client->dev, __func__); | 1381 | dev_dbg(&data->client->dev, __func__); |
| 1382 | ret = bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_SUSPEND, 0); | ||
| 1383 | if (ret < 0) | ||
| 1384 | return -EAGAIN; | ||
| 1359 | 1385 | ||
| 1360 | return bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_SUSPEND, 0); | 1386 | return 0; |
| 1361 | } | 1387 | } |
| 1362 | 1388 | ||
| 1363 | static int bmc150_accel_runtime_resume(struct device *dev) | 1389 | static int bmc150_accel_runtime_resume(struct device *dev) |
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c index a23e58c4ed99..320aa72c0349 100644 --- a/drivers/iio/accel/kxcjk-1013.c +++ b/drivers/iio/accel/kxcjk-1013.c | |||
| @@ -269,6 +269,8 @@ static int kxcjk1013_set_range(struct kxcjk1013_data *data, int range_index) | |||
| 269 | return ret; | 269 | return ret; |
| 270 | } | 270 | } |
| 271 | 271 | ||
| 272 | ret &= ~(KXCJK1013_REG_CTRL1_BIT_GSEL0 | | ||
| 273 | KXCJK1013_REG_CTRL1_BIT_GSEL1); | ||
| 272 | ret |= (KXCJK1013_scale_table[range_index].gsel_0 << 3); | 274 | ret |= (KXCJK1013_scale_table[range_index].gsel_0 << 3); |
| 273 | ret |= (KXCJK1013_scale_table[range_index].gsel_1 << 4); | 275 | ret |= (KXCJK1013_scale_table[range_index].gsel_1 << 4); |
| 274 | 276 | ||
