On Tue, 03 Feb 2009 13:55:39 +0000 Andy Green <[email protected]> wrote:
> Well, with some more patches cleaning things up, I find the threshold > stuff acts strangely for me. > > If I pick the device up after setting threshold 100, I get some > samples then nothing. If I continuously shake the device, I get > nothing until I stop shaking it, then nothing again while I hold it > still. I think they reported it to generate data while lying still on the table and not while moving around and also that it went away with 2.6.28. > I wonder if this is the meaning of the "high pass filter" being on the > threshold path? Perhaps you are right. Maybe HP filter isn't our friend after all. Looking into the application notes, perhaps the problem is with control register 2 during setup where we set LIS302DL_CTRL2_HPFF1. We could try to simply unset this during configuration and see what happens. Patch attached below, but it's untested since I don't have the device at hand right now. Should be for the andy-tracking top. I think I tried that before, but it could be worth a shot. > It's not what I would have expected from the threshold action, is this > what its performance has been like up until now? I can see why people > may be reporting this behaviour as inverted if so. > > When I disable the highpass on the path, a nonzero threshold crashes > the GTA02 dead, presumably because the level interrupt is stuck > asserted for some reason. OK, it never locked up for me without it - but that was before the level-triggered interrupts as well. // Simon lis302dl-no-hp-filter-with-threshold.patch: Don't enable HP filter when configuring threshold. From: Simon Kagstrom <[email protected]> Don't enable HP filter when configuring data collection with a threshold. Signed-off-by: Simon Kagstrom <[email protected]> --- drivers/input/misc/lis302dl.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/input/misc/lis302dl.c b/drivers/input/misc/lis302dl.c index 424abbc..9ad62bb 100644 --- a/drivers/input/misc/lis302dl.c +++ b/drivers/input/misc/lis302dl.c @@ -166,15 +166,13 @@ static void __enable_data_collection(struct lis302dl_info *lis) /* make sure we're powered up and generate data ready */ __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, ctrl1, ctrl1); + __reg_write(lis, LIS302DL_REG_CTRL2, 0); /* If the threshold is zero, let the device generated an interrupt * on each datum */ if (lis->threshold == 0) { - __reg_write(lis, LIS302DL_REG_CTRL2, 0); __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_DATA_READY); __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_DATA_READY); } else { - __reg_write(lis, LIS302DL_REG_CTRL2, - LIS302DL_CTRL2_HPFF1); __reg_write(lis, LIS302DL_REG_FF_WU_THS_1, __mg_to_threshold(lis, lis->threshold)); __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
