aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/gpio-button-hotplug/src
Commit message (Collapse)AuthorAgeFilesLines
* gpio-button-hotplug: fix data raceAndrey Erokhin2022-04-101-1/+1
| | | | | | | | bh_event_add_var can be called by multiple threads concurrently, so it shall not use a static char buffer Signed-off-by: Andrey Erokhin <a.erokhin@inango-systems.com> (cherry picked from commit 1e991e09b73c309321d21b9cb706bd5139d952d2)
* gpio-button-hotplug: convert to gpio descriptor (gpiod_) APIChristian Lamparter2021-08-261-79/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | OpenWrt's special gpio-button-hotplug driver is still using exclusively the legacy GPIO Subsystem gpio_ API. While it still does work fine for most devices, upstream linux is starting to convert platform support like that of the APU2/3/4 to the new GPIOD LOOKUP tables that are not supported by it. Hence, this patch replaces the gpio_ calls present in gpio-button-hotplug with gpiod_ equivalent wherever it's possible. This allows the driver to use the gpiod lookup tables and still have a fallback for legacy platform data code that just sets button->gpio set to the real button/switch GPIO. As a bonus: the active_low logic is now being handled by the linux's gpio subsystem too. Another issue that was address is the of_handle leak in the dt parser error path. Tested with legacy platform data: x86_64: APU2, MX-100 Tested on OF: ATH79; MR18, APM821xx: Netgear WNDR4700, RAMIPS: WL-330N3G LANTIQ: AVM FritzBox 7360v1 Reported-by: Chris Blake <chrisrblake93@gmail.com> Tested-by: Chris Blake <chrisrblake93@gmail.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* gpio-button-hotplug: remove duplicate logging textPetr Štetiar2020-03-081-3/+3
| | | | | | | | Removes one of the duplicate `gpio-keys` words found in the logs: gpio-keys gpio-keys: gpio-keysdoes not support key code:143 Signed-off-by: Petr Štetiar <ynezz@true.cz>
* gpio-button-hotplug: add volume button handlingChuanhong Guo2019-08-081-0/+2
| | | | | | This is used by PISEN WMB001N. Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
* gpio-button-hotplug: unify polled and interrupt codeDavid Bauer2019-07-141-65/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch unifies the polled and interrupt-driven gpio_keys code paths as well implements consistent handling of the debounce interval set for the GPIO buttons and switches. Hotplug events will only be fired if 1. The input changes its state and remains stable for the duration of the debounce interval (default is 5 ms). 2. In the initial stable (no state-change for duration of the debounce interval) state once the driver module gets loaded. Switch type inputs will always report their stable state. Unpressed buttons will not trigger an event for the initial stable state. Whereas pressed buttons will trigger an event. This is consistent with upstream's gpio-key driver that uses the input subsystem (and dont use autorepeat). Prior to this patch, this was handled inconsistently for interrupt-based an polled gpio-keys. Hence this patch unifies the shared logic into the gpio_keys_handle_button() function and modify both implementations to handle the initial state properly. The changes described in 2. ) . can have an impact on the failsafe trigger. Up until now, the script checked for button state changes. On the down side, this allowed to trigger the failsafe by releasing a held button at the right time. On the plus side, the button's polarity setting didn't matter. Now, the failsafe will only engage when a button was pressed at the right moment (same as before), but now it can theoretically also trigger when the button was pressed the whole time the kernel booted and well into the fast-blinking preinit phase. However, the chances that this can happen are really small. This is because the gpio-button module is usually up and ready even before the preinit state is entered. So, the initial pressed button event gets lost and most devices behave as before. Bisectors: If this patch causes a device to permanently go into failsafe or experience weird behavior due to inputs, please check the following: - the GPIO polarity setting for the button - the software-debounce value Run-tested for 'gpio-keys' and 'gpio-keys-polled' on - devolo WiFi pro 1200e - devolo WiFi pro 1750c - devolo WiFi pro 1750x - Netgear WNDR4700 - Meraki MR24 - RT-AC58U Signed-off-by: David Bauer <mail@david-bauer.net> Signed-off-by: Christian Lamparter <chunkeey@gmail.com> [further cleanups, simplification and unification]
* gpio-button-hotplug: fix 4.19 build breakage on malta/be64Petr Štetiar2019-06-171-0/+1
| | | | | | | | | | | | While testing 4.19 build on malta/be64, I've encountered following error: gpio-button-hotplug/gpio-button-hotplug.c:529:18: error: implicit declaration of function 'gpio_to_desc' which is caused by the missing include fixed by this patch. Signed-off-by: Petr Štetiar <ynezz@true.cz>
* gpio-button-hotplug: gpio-keys: fix always missing first eventPetr Štetiar2019-06-091-9/+2
| | | | | | | | | | | | | Commit afc056d7dc83 ("gpio-button-hotplug: support interrupt properties") changed the gpio-keys interrupt handling logic in a way, that it always misses first event, which causes issues with rc.button scripts, so this patch restores the previous behaviour. Fixes: afc056d7dc83 ("gpio-button-hotplug: support interrupt properties") Reported-by: Kristian Evensen <kristian.evensen@gmail.com> Tested-by: Kuan-Yi Li <kyli.tw@gmail.com> Signed-off-by: Petr Štetiar <ynezz@true.cz> Signed-off-by: Christian Lamparter <chunkeey@gmail.com> [drop state check]
* gpio-button-hotplug: fix wrong initial seen valuePetr Štetiar2019-06-091-0/+3
| | | | | | | | | | | | | | | Currently the generated event contains wrong seen value, when the button is pressed for the first time: rmmod gpio_button_hotplug; modprobe gpio_button_hotplug [ pressing the wps key immediately after modprobe ] gpio-keys: create event, name=wps, seen=1088, pressed=1 So this patch adds a check for this corner case and makes seen=0 if the button is pressed for the first time. Tested-by: Kuan-Yi Li <kyli.tw@gmail.com> Signed-off-by: Petr Štetiar <ynezz@true.cz>
* gpio-button-hotplug: use pr_debug and pr_errPetr Štetiar2019-06-091-17/+6
| | | | | | | pr_debug can be used with dynamic debugging. Tested-by: Kuan-Yi Li <kyli.tw@gmail.com> Signed-off-by: Petr Štetiar <ynezz@true.cz>
* gpio-button-hotplug: support interrupt propertiesChristian Lamparter2019-05-311-21/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Upstream Linux's input gpio-keys driver supports specifying a external interrupt for a gpio via the 'interrupts' properties as well as having support for software debounce. This patch ports these features to OpenWrt's event version. Only the "pure" interrupt-driven support is left behind, since this goes a bit against the "gpio" in the "gpio-keys" and I don't have a real device to test this with. This patch also silences the generated warnings showing up since 4.14 due to the 'constification' of the struct gpio_keys_button *buttons variable in the upstream struct gpio_keys_platform_data declaration. gpio-button-hotplug.c: In function 'gpio_keys_get_devtree_pdata': gpio-button-hotplug.c:392:10: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] button = &pdata->buttons[i++]; ^ gpio-button-hotplug.c: In function 'gpio_keys_button_probe': gpio-button-hotplug.c:537:12: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] bdata->b = &pdata->buttons[i]; ^ gpio-button-hotplug.c: In function 'gpio_keys_probe': gpio-button-hotplug.c:563:37: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] struct gpio_keys_button *button = &pdata->buttons[i]; ^ Acked-by: Petr Štetiar <ynezz@true.cz> Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
* gpio-button-hotplug: add KEY_POWER2 handlingAlan Swanson2019-05-301-0/+1
| | | | | | | | | | | | | | | | For devices such as BTHOMEHUBV5A with both reset and restart buttons, its easily accessible restart button has been assigned to KEY_POWER power script to poweroff preventing accidental (or malicious) factory resets by KEY_RESTART reset script. However an easily accessible button immediately powering off the device is also undesirable. As KEY_RESTART is already used for reset script (and there's no KEY_REBOOT in Linux input events), use KEY_POWER2 for rebooting via new reboot script with 5 second seen delay. Fixes: FS#1965 Signed-off-by: Alan Swanson <reiver@improbability.net> Signed-off-by: Petr Štetiar <ynezz@true.cz> [long line wrap]
* gpio-button-hotplug: leave platform_device.dev.platform_data untouchedFurong Xu2017-08-211-2/+1
| | | | | | | | | | | | get platform_data from gpio_keys_button_dev.pdata, and fix a illegal pointer dereference like this: [ 51.143776] gpio-keys-polled gpio-keys-polled: missing poll_interval value [ 51.150852] gpio-keys-polled: probe of gpio-keys-polled failed with error -22 [ 828.159993] gpio-keys-polled gpio-keys-polled: no memory for button data [ 828.166821] gpio-keys-polled: probe of gpio-keys-polled failed with error -12 Signed-off-by: Furong Xu <xfr@outlook.com>
* gpio-button-hotplug: add more buttonsMathias Kresin2016-11-271-15/+24
| | | | | | The keycodes are used by some boards. Signed-off-by: Mathias Kresin <dev@kresin.me>
* treewide: replace nbd@openwrt.org with nbd@nbd.nameFelix Fietkau2016-06-071-3/+3
| | | | Signed-off-by: Felix Fietkau <nbd@nbd.name>
* kernel: gpio-button-hotplug: Add missing ONESHOT flag to threaded IRQ requestJohn Crispin2016-03-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Without the IRQF_ONESHOT flag in devm_request_threaded_irq() call I get following error: genirq: Threaded irq requested with handler=NULL and !ONESHOT for irq 56 gpio-keys gpio-keys: failed to request irq:56 for gpio:20 >From kernel/irq/manage.c: The interrupt was requested with handler = NULL, so we use the default primary handler for it. But it does not have the oneshot flag set. In combination with level interrupts this is deadly, because the default primary handler just wakes the thread, then the irq lines is reenabled, but the device still has the level irq asserted. Rinse and repeat.... While this works for edge type interrupts, we play it safe and reject unconditionally because we can't say for sure which type this interrupt really has. The type flags are unreliable as the underlying chip implementation can override them. Signed-off-by: Petr Štetiar <ynezz@true.cz> SVN-Revision: 48894
* kernel: gpio-button-hotplug: update to use threaded irq'sJohn Crispin2016-02-121-8/+5
| | | | | | | | | | | | Many gpio controllers 'cansleep' due to the fact that they are behind busses e.g. i2c etc. Using threaded irq's allows for 'sleep-able' gpio's to be used. Signed-off-by: Pushpal Sidhu <psidhu@gateworks.com> Signed-off-by: Tim Harvey <tharvey@gateworks.com> SVN-Revision: 48696
* gpio-button-hotplug: handle EPROBE_DEFER and other errorsHauke Mehrtens2015-07-261-5/+15
| | | | | | | | | | of_get_gpio_flags() could return an error like EPROBE_DEFER which was not handled before. This patch takes the code from gpio_keys_polled.c for error handling and also improves some other unrelated small parts. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 46502
* gpio-button-hotplug: remove #ifdef CONFIG_HOTPLUG, it is gone in newer ↵Felix Fietkau2014-05-231-7/+0
| | | | | | | | kernels (fixes #16413) Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 40838
* gpio-button-hotplug: add wwan buttonHauke Mehrtens2014-01-141-0/+1
| | | | | | | | | | | The wimax key will be used as a generic wwan key starting with Linux 3.13. The brcm47xx target uses this key for the 3g buttons. Also remove the ifdef around KEY_WPS_BUTTON, this is in the kernel for a long time now. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 39290
* gpio-button-hotplug: fix crash on removeJonas Gorski2013-12-171-1/+1
| | | | | | | | | | Don't call gpio_keys_remove recursively. Setting the platform data to NULL triggered an oops on the second iteration, so there was no infinate loop. Signed-off-by: Jonas Gorski <jogo@openwrt.org> SVN-Revision: 39124
* gpio-button-hotplug: add irq mode to driverJohn Crispin2013-12-091-94/+176
| | | | | | Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 39021
* gpio-button-hotplug: add support for sliding switchesJohn Crispin2013-11-111-12/+8
| | | | | | Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 38725
* gpio-button-hotplug: add support for power buttonsJohn Crispin2013-10-281-0/+1
| | | | | | Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 38557
* gpio-button-hotplug: debounce the initial button state, the first reads at ↵Felix Fietkau2013-08-051-2/+4
| | | | | | | | boot time might be wrong Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 37702
* gpio-button-hotplug: cleanup, fix compiler warningFelix Fietkau2013-08-031-4/+2
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 37665
* gpio-button-hotplug: fix active_low handling, possibly broken in r37643Felix Fietkau2013-08-031-8/+9
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 37664
* gpio-button-hotplug: use gpio_button_get_value() to initialize last_state.John Crispin2013-08-011-1/+1
| | | | | | | | | | | TL-WR720N-v3 has a slider switch composed of 2 GPIO buttons which can be used to swtich between 3 positions. At leat 1 button is in pressed state in any of those positions. Initialize 'last_state' as 0 (released) will cause the device to automatically enter failsafe mode on every bootup. Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> SVN-Revision: 37643
* gpio-button-hotplug: use gpio_button_get_value() to fetch state.John Crispin2013-08-011-4/+1
| | | | | | Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> SVN-Revision: 37642
* gpio-button-hotplug: add inline function gpio_button_get_value().John Crispin2013-08-011-0/+9
| | | | | | Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> SVN-Revision: 37641
* gpio-button-hotplug: add support for EV_SWLuka Perkov2013-07-021-7/+21
| | | | | | Signed-off-by: Luka Perkov <luka@openwrt.org> SVN-Revision: 37130
* gpio-button-hotplug: improve gpio button debouncing, verify state changes ↵Felix Fietkau2013-06-291-6/+8
| | | | | | | | over multiple polls. fixes spurious failsafe triggers (#13784) Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 37090
* packages: clean up the package folderJohn Crispin2013-06-212-0/+565
Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 37007