Am 2015-07-07 um 09:05 schrieb Jonathan Cameron: > > > On 6 July 2015 09:39:12 BST, Martin Fuzzey <mfuzzey@xxxxxxxxxxx> wrote: >> On 05/07/15 13:50, Jonathan Cameron wrote: >>> On 04/07/15 14:55, Martin Kepplinger wrote: >>>> IIO_EV_TYPE_THRESH in rising direction describes an event where the >>>> threshold is crossed in rising direction, positive or negative >> values >>>> being possible. This is not the case here. >>>> >>>> Since the threshold is no signed value and only the magnitude is >> compared, >>>> IIO_EV_TYPE_MAG is what describes the behaviour of these devices, >> see the >>>> sysfs-bus-iio ABI Documentation. >> >> Fwiw there was some discussion of this before the initial submission: >> >> http://www.spinics.net/lists/linux-iio/msg14039.html >> >> Initially I used a magnitude too but Jonathan convinced me it should be >> >> a threshold. >> >> " >> >> The moment you know the sign of the magnitude it stops being a >> magnitude >> and becomes a generic threshold. Report it as such and control it as >> such. >> >> " >> >> Thing is that the hardware indeed only compares the absolute value for >> the threshold *but* indicates with the event the sign. >> However it is true that the driver doesn't currently do anything with >> the sign information. > Ah. That explains the confusion. > This is a common enough case. > Usual approach is the slightly hacky option of having two threshold events. Setting limit on either effects both. > Enabling either effects both (or you can eat the wrong one in driver if you prefer > when only one is enabled) I tried to implement THRESH somehow but it gets too messy. Yes, what you *can* read for an event is positive or negative acceleration value (g, whatever). But, say, positive g doesn't at all indicate THRESH RISING . It could be negative g in freefall mode on one axis, and so on... So the sign of the current value doesn't help you turning MAG into TRESH. Really I think, MAG is what describes these devices. >> >> >>>> Signed-off-by: Martin Kepplinger >> <martin.kepplinger@xxxxxxxxxxxxxxxxxxxxx> >>>> Signed-off-by: Christoph Muellner >> <christoph.muellner@xxxxxxxxxxxxxxxxxxxxx> >>> This is a fix and so should have been the first patch in the series. >> It will >>> want to go via a different tree (iio-fixes) and probably be marked >> for stable. >>> >>> I would however like Peter's ack on this as well before taking it. >>>> --- >>>> drivers/iio/accel/mma8452.c | 10 +++++----- >>>> 1 file changed, 5 insertions(+), 5 deletions(-) >>>> >>>> diff --git a/drivers/iio/accel/mma8452.c >> b/drivers/iio/accel/mma8452.c >>>> index 7f6e3b4..e23ebd0 100644 >>>> --- a/drivers/iio/accel/mma8452.c >>>> +++ b/drivers/iio/accel/mma8452.c >>>> @@ -598,21 +598,21 @@ static void mma8452_transient_interrupt(struct >> iio_dev *indio_dev) >>>> if (src & data->chip_info->ev_src_xe) >>>> iio_push_event(indio_dev, >>>> IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_X, >>>> - IIO_EV_TYPE_THRESH, >>>> + IIO_EV_TYPE_MAG, >>>> IIO_EV_DIR_RISING), >>>> ts); >>>> >>>> if (src & data->chip_info->ev_src_ye) >>>> iio_push_event(indio_dev, >>>> IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_Y, >>>> - IIO_EV_TYPE_THRESH, >>>> + IIO_EV_TYPE_MAG, >>>> IIO_EV_DIR_RISING), >>>> ts); >>>> >>>> if (src & data->chip_info->ev_src_ze) >>>> iio_push_event(indio_dev, >>>> IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, IIO_MOD_Z, >>>> - IIO_EV_TYPE_THRESH, >>>> + IIO_EV_TYPE_MAG, >>>> IIO_EV_DIR_RISING), >>>> ts); >>>> } >>>> @@ -689,7 +689,7 @@ static int mma8452_reg_access_dbg(struct iio_dev >> *indio_dev, >>>> >>>> static const struct iio_event_spec mma8452_transient_event[] = { >>>> { >>>> - .type = IIO_EV_TYPE_THRESH, >>>> + .type = IIO_EV_TYPE_MAG, >>>> .dir = IIO_EV_DIR_RISING, >>>> .mask_separate = BIT(IIO_EV_INFO_ENABLE), >>>> .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) | >>>> @@ -700,7 +700,7 @@ static const struct iio_event_spec >> mma8452_transient_event[] = { >>>> >>>> static const struct iio_event_spec mma8452_motion_event[] = { >>>> { >>>> - .type = IIO_EV_TYPE_THRESH, >>>> + .type = IIO_EV_TYPE_MAG, >>>> .dir = IIO_EV_DIR_RISING, >>>> .mask_separate = BIT(IIO_EV_INFO_ENABLE), >>>> .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) | >>>> >> >> -- >> 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 > -- 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