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>
Commit afc056d7dc ("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: afc056d7dc ("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]
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>
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>
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]
The build system already defines KERNEL_CROSS which defaults to TARGET_CROSS.
Make use of this variable for kernel makefiles.
Signed-off-by: Karl Vogel <karl.vogel@gmail.com>
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>
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
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
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
3.3 kernels do not have the required changes which would make
gpio-button-hotplug work, disallow building on those kernels for now.
Signed-off-by: Florian Fainelli <florian@openwrt.org>
SVN-Revision: 39903
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
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
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