mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-17 02:15:02 +00:00
dm: button: support remapping phone keys
We don't have audio support in U-Boot, but we do have boot menus. Add an option to re-map the volume and power buttons to up/down/enter so that in situations where these are the only available buttons (such as on mobile phones) it's still possible to navigate menus built in U-Boot or an external EFI app like GRUB or systemd-boot. Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> Reviewed-by: Dragan Simic <dsimic@manjaro.org>
This commit is contained in:
parent
c71d451033
commit
cae243927f
2 changed files with 32 additions and 1 deletions
|
@ -9,6 +9,17 @@ config BUTTON
|
|||
can provide access to board-specific buttons. Use of the device tree
|
||||
for configuration is encouraged.
|
||||
|
||||
config BUTTON_REMAP_PHONE_KEYS
|
||||
bool "Remap phone keys for navigation"
|
||||
depends on BUTTON
|
||||
help
|
||||
Enable remapping of phone keys to navigation keys. This is useful for
|
||||
devices with phone keys that are not used in U-Boot. The phone keys
|
||||
are remapped to the following navigation keys:
|
||||
- Volume up: Up
|
||||
- Volume down: Down
|
||||
- Power: Enter
|
||||
|
||||
config BUTTON_ADC
|
||||
bool "Button adc"
|
||||
depends on BUTTON
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <button.h>
|
||||
#include <dm.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dt-bindings/input/linux-event-codes.h>
|
||||
|
||||
int button_get_by_label(const char *label, struct udevice **devp)
|
||||
{
|
||||
|
@ -37,14 +38,33 @@ enum button_state_t button_get_state(struct udevice *dev)
|
|||
return ops->get_state(dev);
|
||||
}
|
||||
|
||||
static int button_remap_phone_keys(int code)
|
||||
{
|
||||
switch (code) {
|
||||
case KEY_VOLUMEUP:
|
||||
return KEY_UP;
|
||||
case KEY_VOLUMEDOWN:
|
||||
return KEY_DOWN;
|
||||
case KEY_POWER:
|
||||
return KEY_ENTER;
|
||||
default:
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
int button_get_code(struct udevice *dev)
|
||||
{
|
||||
struct button_ops *ops = button_get_ops(dev);
|
||||
int code;
|
||||
|
||||
if (!ops->get_code)
|
||||
return -ENOSYS;
|
||||
|
||||
return ops->get_code(dev);
|
||||
code = ops->get_code(dev);
|
||||
if (CONFIG_IS_ENABLED(BUTTON_REMAP_PHONE_KEYS))
|
||||
return button_remap_phone_keys(code);
|
||||
else
|
||||
return code;
|
||||
}
|
||||
|
||||
UCLASS_DRIVER(button) = {
|
||||
|
|
Loading…
Add table
Reference in a new issue