Age | Commit message (Collapse) | Author |
|
http://lists.openmoko.org/pipermail/openmoko-kernel/2009-March/009387.html
)
Change accelerometers to use ABS events rather than REL events.
[Obviously if this patch is accepted we need to tell developers about
it. I have a number of other improvements to the accelerometers I
hope to deliver over the next couple of weeks. They will have minimal
or zero disruption to current code. ]
REL events should be used when there is no absolute reference, and
only changes are meaningful. The classic example is a "mouse" where
the absolute position of the device is not measurable and not
particularly meaning, but change in position from one time to the next
is interesting.
With REL events, a value of '0' is not reported, as 'not change' is
not interesting.
With REL events, the expectation is that successive values will be
eventually summed (possibly with acceleration and clipping
adjustments) to get a usable value.
ABS events should be used when there is an absolute references against
which things that be measured.
With ABS events, the 'current value' is meaningful and can be read
(EVIOCGABS).
With ABS events, the value '0' is very meaningful and is reported.
However if consecutive values are the same, the value is only reported
once.
ABS events can be used as-is or compared with previous events to get
some measure of change.
An obvious example is a touchscreen where each measure in
independently meaningful.
Acceleration is an absolute value as it is measuring against a frame
of reference. '0' acceleration is just as meaningful as any other
value, and finding the 'current' acceleration is each direction is a
potentially useful thing to do.
The Freerunner accelerometers currently report REL events. This is
wrong. So this patch changes them to report ABS events.
With this patch, the min/max/level/fuzz values are left at zero. It
might be useful to make use of these in a subsequent patch.
min/max/level can be used to calibrate the accelerometers if accuracy
is important.
fuzz could possibly be used in conjunction with the 'threshold' sysfs
value to get less frequent, lower-precision reports.
This may well break some applications that read accelerometer data.
This cannot be helped, but it is quite easy to write code that copes
with the incorrect EV_REL events as well as the more correct and
useful EV_ABS events.
Signed-off-by: NeilBrown <neilb@suse.de>
|
|
X-Git-Url: http://git.openmoko.org/?p=kernel.git;a=commitdiff_plain;h=5689ad9b0ded29adec4be64df53e488c648b9831
lis302dl_use_s3c24xx_gpio_spi_bitbang.patch
Change lis302dl driver to use generic spi code. This requires that we define a
s3c24xx_gpio spi bitbang based controller in mach-gta02.c.
Signed-off-by: Balaji Rao <balajirrao@openmoko.org>
|
|
Reported-by: Mickey Lauer <mickey@openmoko.org>
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
We need to clear down the wakeup source reg if we woke from
threshold.
Reported-by: Simon Kagstrom <simon.kagstrom@gmail.com>
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
We shouldn't be resetting the highpass filter every sample.
It should be disabled if we don't use it or allowed to
work across multiple samples if we do.
Was this hiding some other problem?
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Level interrupts solve the sticky loss of service from accels issue.
But currently, we get two service actions per one interrupt, leading to
information getting read and sent to the input subsystem twice.
This patch makes the ISR confirm with the lis302dl status register
that there is fresh data before accepting it, it works around the
issue and allows use of the other information in the status reg by
another patch.
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Setup interrupt latching for thresholded operation
From: Simon Kagstrom <simon.kagstrom@gmail.com>
This patch, for stable-tracking, sets up interrupt latching for
thresholded operation, and also acks the interrupt in the handler. This
reduces the interrupt load, and thresholds < 36 are once again allowed
(though not of much use).
The patch also fixes some warnings in the code (including a potential
bug).
Thanks to Werner for pointing this out!
Signed-off-by: Simon Kagstrom <simon.kagstrom@gmail.com>
|
|
Merge in the accelerometer functionality from stable
From: Simon Kagstrom <simon.kagstrom@gmail.com>
This giant patch merges the functionality from stable. It also changes
the default threshold to 0 (generate interrupts on data). As the
level-triggered interrupts cause too frequent interruptions on low
thresholds, also set a lower limit to 36mg to avoid slowing down the
phone too much.
Also rearrange the probe function to disable interrupts only over device
I/O. This fixes the kernel errors when inserting the module.
Andy was right: In stable-tracking, no magic workaround is needed to
make suspend/resume work. I've tested the accelerometers under heavy
load (making the phone basically unusable) without getting lockups.
Signed-off-by: Simon Kagstrom <simon.kagstrom@gmail.com>
|
|
This large patch removes motion sensor from Linux SPI bitbang driver.
Previously, some access was done through Linux SPI protected
by a mutex, and the ISR access was done by platform bitbang code due
to inability of Linux SPI driver to work in the interrupt context.
Now all access is done by bitbang callbacks in mach_gta02.c and are
protected by single scheme of interrupt lockout for the duration --
I line-by-line'd the driver to confirm that best I could, adding
protection and taking more care on several /sys related paths.
Because this is no longer a Linux SPI bus driver, the path for various
/sys things have changed. They can now be found down, eg,
/sys/devices/platform/lis302dl.1/sample_rate
lis302dl.1 is the top sensor and .2 the bottom. The names of the input
susbsytem paths remain the same as before.
Not working in interrupt context made trouble using interrupt lockout as
locking
[21474615.495000] BUG: sleeping function called from invalid context at kernel/sched.c:4684
[21474615.495000] in_atomic():0, irqs_disabled():128
[21474615.495000] 2 locks held by bash/779:
[21474615.495000] #0: (&buffer->mutex){....}, at: [<c00ec1b0>] sysfs_write_file+0x30/0x80
[21474615.495000] #1: (pm_mutex){....}, at: [<c007a34c>] enter_state+0xd4/0x10c
[21474615.495000] [<c0032a14>] (dump_stack+0x0/0x14) from [<c0049410>] (__might_sleep+0xdc/0xf8)
[21474615.495000] [<c0049334>] (__might_sleep+0x0/0xf8) from [<c0316c38>] (wait_for_common+0x28/0x190)
[21474615.495000] r5:c79ffd00 r4:c79ffd4c
[21474615.495000] [<c0316c10>] (wait_for_common+0x0/0x190) from [<c0316e30>] (wait_for_completion+0x18/0x1c)
[21474615.495000] r8:c79ffd84 r7:c79c4800 r6:c79ffd00 r5:c79ffd20 r4:c79ffd4c
[21474615.495000] [<c0316e18>] (wait_for_completion+0x0/0x1c) from [<c01d28ec>] (spi_sync+0xa0/0xb8)
[21474615.495000] [<c01d284c>] (spi_sync+0x0/0xb8) from [<c020ca10>] (__reg_write+0x88/0x94)
[21474615.495000] [<c020c988>] (__reg_write+0x0/0x94) from [<c020cc30>] (lis302dl_resume+0x54/0x198)
[21474615.495000] r6:60000013 r5:c79c4800 r4:c79bc9c0
[21474615.495000] [<c020cbdc>] (lis302dl_resume+0x0/0x198) from [<c01d2fb0>] (spi_resume+0x38/0x44)
[21474615.495000] r6:00000010 r5:c79c4800 r4:c79c4974
[21474615.495000] [<c01d2f78>] (spi_resume+0x0/0x44) from [<c0198f34>] (resume_device+0x8c/0x1b0)
[21474615.495000] [<c0198ea8>] (resume_device+0x0/0x1b0) from [<c01990c0>] (dpm_resume+0x68/0x134)
[21474615.495000] r7:00000003 r6:00000010 r5:c79c4800 r4:c79c4974
[21474615.495000] [<c0199058>] (dpm_resume+0x0/0x134) from [<c01991b4>] (device_resume+0x28/0x38)
[21474615.495000] r6:00000003 r5:c08b7188 r4:00000010
[21474615.495000] [<c019918c>] (device_resume+0x0/0x38) from [<c007a0f8>] (suspend_devices_and_enter+0x110/0x180)
[21474615.495000] r4:00000000
[21474615.495000] [<c0079fe8>] (suspend_devices_and_enter+0x0/0x180) from [<c007a320>] (enter_state+0xa8/0x10c)
[21474615.495000] r6:00000003 r5:c03aa414 r4:00000000
[21474615.495000] [<c007a278>] (enter_state+0x0/0x10c) from [<c007a430>] (state_store+0xac/0xc0)
[21474615.495000] r6:c7b80000 r5:00000003 r4:c03aa414
[21474615.495000] [<c007a384>] (state_store+0x0/0xc0) from [<c014dfb4>] (kobj_attr_store+0x24/0x30)
[21474615.495000] [<c014df90>] (kobj_attr_store+0x0/0x30) from [<c00ebe58>] (flush_write_buffer+0x54/0x68)
[21474615.495000] [<c00ebe04>] (flush_write_buffer+0x0/0x68) from [<c00ec1d8>] (sysfs_write_file+0x58/0x80)
[21474615.495000] r8:c7acca80 r7:c79fff78 r6:000be408 r5:00000004 r4:c7a19ea0
[21474615.495000] [<c00ec180>] (sysfs_write_file+0x0/0x80) from [<c00a91b8>] (vfs_write+0xbc/0x14c)
[21474615.495000] [<c00a90fc>] (vfs_write+0x0/0x14c) from [<c00a9774>] (sys_write+0x4c/0x7c)
[21474615.495000] r7:00000004 r6:00000000 r5:00000000 r4:c7acca80
[21474615.495000] [<c00a9728>] (sys_write+0x0/0x7c) from [<c002dc20>] (ret_fast_syscall+0x0/0x2c)
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Move to level from edge, fix local_save... to local_irq...
simplify bitbang sequence
Signed-off-by: Sean McNeil <sean@mcneil.com>
|
|
Fix all of the mismatches Andrzej put us on to.
Found-by: Andrzej Zaborowski <balrogg@gmail.com>
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
style cleanups for accel threshold setting patch
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Hi!
First: Unfortunately, the freerunner currently wakes up immediately on
suspend when the accelerometer IRQ is selected as a wakeup source. I'm
posting this for comments and if someone else wants to have a look at
this problem.
The patch should be safe to apply even though the sleep portion doesn't
work - as long as it's configured it will not disturb anything.
// Simon
--
lis302dl-configure-wakeup-interrupts.patch
From: simon.kagstrom <simon.kagstrom@gmail.com>
First: Unfortunately, the freerunner currently wakes up immediately on
suspend when the accelerometer IRQ is selected as a wakeup source.
Add configuration of wakeup/freefall interrupts through a sysfs
interface. Configuration is done through echoing a value of the
form
X Y Z THRESHOLD DURATION SPEC
to freefall_wakeup_1/2. X, Y and Z are threshold values, given as a
value > 0, < 0 or 0 to specify if an interrupt should be generated for
high or low thresholds or neither (off). THRESHOLD specifies the
threshold that must be exceeded. DURATION specifies the time in
milliseconds for which the acceleration should be measured. SPEC is
either '1' or '0' and specifies if the thresholds should be taken all
together or one at a time ('and' or 'or' mode).
Echoing '0' to the file turns off the interrupts.
Example:
echo "1 1 1 60 60 0" > freefall_wakeup_1 # Turn on x,y,z, 60ms/60 threshold, or-mode
echo "0" > freefall_wakeup_1 # Turn off interrupt
The hardware supports two simulataneous wakeup sources to be configured,
but the freerunner only connects one of the interrupt outputs. The patch
exports both. Similarly, only the "top" accelerometer can be used as a
wake-up source, and it's not possible to generate DATA_READY interrupts
while the wakeup interrupts are active.
Signed-off-by: Simon Kagstrom <simon.kagstrom@gmail.com>
|
|
This patch fixes module unloading for the accelerometer (actually module
loading failed before). The two problems were that the interrupt was not
unregistered, and that the device was left in a "strange" state.
Signed-off-by: Simon Kagstrom <simon.kagstrom@gmail.com>
|
|
Reported-by: John Lee <john_lee@openmoko.com>
We don't reset the devices either at init or resume, where init
means use the BOOT bit to reload device calibration coefficients
from internal EEPROM. John Lee saw brain-damaged behaviour after
resume and sometimes after boot (since it may not have lost power
to force a BOOT itself that makes sense).
This patch
- adds a diagnostic dump feature down /sys
- forces BOOT action on init and resume, and waits for
completion
- makes sure XYZ capture is enabled on resume
- adds some constants in the .h and removes some magic numbers
in the code by using them
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
Signed-Off-By: Holger Freyther <zecke@openmoko.org>
|
|
Add platform stuff to deal with going in and out of suspend
so the motion sensor IO is not driving high into unpowered sensors
Signed-off-by: Andy Green <andy@openmoko.com>
|
|
|
|
This is a Linux driver for the STmicro LIS302DL 3-axis accelerometer.
Signed-off-by: Harald Welte <laforge@openmoko.org>
|