aboutsummaryrefslogtreecommitdiff
path: root/drivers/input/misc/lis302dl.c
AgeCommit message (Collapse)Author
2009-11-26input: lis302dl: fix the resume pathMichael Trimarchi
This fix the resume path of the accelerometer. If the accelerometer is not power up, restore to initial status. Move the REG_CTRL1 to the last one position avoid writing on the register when the device is in power down mode. Signed-off-by: Michael Trimarchi <michael@panicking.kicks-ass.org> Signed-off-by: Paul Fertser <fercerpav@gmail.com>
2009-03-09(AG: there's some more rationale for changing this hereNeil Brown
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>
2009-02-26Subject: lis302dl_use_s3c24xx_gpio_spi_bitbang.patchBalaji Rao
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>
2009-02-12fix-lis302dl-reset-threshold-on-resume.patchAndy Green
Reported-by: Mickey Lauer <mickey@openmoko.org> Signed-off-by: Andy Green <andy@openmoko.com>
2009-02-03fix-lis302dl-clear-wakeup-source-if-threshold.patchAndy Green
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>
2009-02-03fix-lis302dl-dont-reset-hpf-each-time.patchAndy Green
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>
2009-02-03fix-lis302dl-get-status-confirm-data-ready.patchAndy Green
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>
2008-11-21add-gta03-lis302dl.patchAndy Green
Signed-off-by: Andy Green <andy@openmoko.com>
2008-11-19lis302dl-ack-ff_wu-interrupts.patchSimon Kagstrom
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>
2008-11-19: lis302dl-port-work-from-stable.patchSimon Kagstrom
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>
2008-11-19fix-lid302dl-bitbang-all-the-way-baby.patchAndy Green
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>
2008-11-19fix-lis302dl-use-__reg_read-in-suspend.patchAndy Green
Signed-off-by: Andy Green <andy@openmoko.com>
2008-11-19fix-lis302dl-issues.patchSean McNeil
Move to level from edge, fix local_save... to local_irq... simplify bitbang sequence Signed-off-by: Sean McNeil <sean@mcneil.com>
2008-11-19gta02-accel-isr-fix-more.patchAndy Green
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>
2008-11-19checkpatch-accel-fixes.patchAndy Green
style cleanups for accel threshold setting patch Signed-off-by: Andy Green <andy@openmoko.com>
2008-11-19interface for configuring freefall/wakeup interrupts for the accelerometersSimon Kagstrom
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>
2008-11-19lis302dl-allow-unloading-module.patchSimon Kagstrom
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>
2008-11-19fix-lis302dl-resume-and-init-reload-boot-coefficients.patchAndy Green
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>
2008-11-19tracking-2.6.26-rc1-remove-input-dev-private-member.patchAndy Green
Signed-off-by: Andy Green <andy@openmoko.com>
2008-11-19OpenMoko => OpenmokoHolger Freyther
Signed-Off-By: Holger Freyther <zecke@openmoko.org>
2008-11-19fix-lis302dl-suspend-gpio.patchAndy Green
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>
2008-11-19gta02-acc.patchmokopatches
2008-11-19lis302dl.patchmokopatches
This is a Linux driver for the STmicro LIS302DL 3-axis accelerometer. Signed-off-by: Harald Welte <laforge@openmoko.org>