On 17/07/14 01:42, Srinivas Pandruvada wrote:
This chip needs explicit interrupt ack, introducing try_reenable callback. Also removed separate function to ack interrupt as this doesn't add any value. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
Definitely neater this way, though would have worked before as acked in the trigger handler... Patch description seems to suggest it wouldn't? Applied to the togreg branch of iio.git J
--- drivers/iio/accel/kxcjk-1013.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c index 4702aeb..bff5161 100644 --- a/drivers/iio/accel/kxcjk-1013.c +++ b/drivers/iio/accel/kxcjk-1013.c @@ -138,19 +138,6 @@ static int kxcjk1013_set_mode(struct kxcjk1013_data *data, return 0; } -static int kxcjk1013_chip_ack_intr(struct kxcjk1013_data *data) -{ - int ret; - - ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); - if (ret < 0) { - dev_err(&data->client->dev, "Error writing reg_int_rel\n"); - return ret; - } - - return ret; -} - static int kxcjk1013_chip_init(struct kxcjk1013_data *data) { int ret; @@ -498,15 +485,11 @@ static irqreturn_t kxcjk1013_trigger_handler(int irq, void *p) indio_dev->masklength) { ret = kxcjk1013_get_acc_reg(data, bit); if (ret < 0) { - kxcjk1013_chip_ack_intr(data); mutex_unlock(&data->mutex); goto err; } data->buffer[i++] = ret; } - - kxcjk1013_chip_ack_intr(data); - mutex_unlock(&data->mutex); iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, @@ -517,6 +500,21 @@ err: return IRQ_HANDLED; } +static int kxcjk1013_trig_try_reen(struct iio_trigger *trig) +{ + struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); + struct kxcjk1013_data *data = iio_priv(indio_dev); + int ret; + + ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); + if (ret < 0) { + dev_err(&data->client->dev, "Error reading reg_int_rel\n"); + return ret; + } + + return 0; +} + static int kxcjk1013_data_rdy_trigger_set_state(struct iio_trigger *trig, bool state) { @@ -543,6 +541,7 @@ static int kxcjk1013_data_rdy_trigger_set_state(struct iio_trigger *trig, static const struct iio_trigger_ops kxcjk1013_trigger_ops = { .set_trigger_state = kxcjk1013_data_rdy_trigger_set_state, + .try_reenable = kxcjk1013_trig_try_reen, .owner = THIS_MODULE, };
-- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html