mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 20:58:22 +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
|
can provide access to board-specific buttons. Use of the device tree
|
||||||
for configuration is encouraged.
|
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
|
config BUTTON_ADC
|
||||||
bool "Button adc"
|
bool "Button adc"
|
||||||
depends on BUTTON
|
depends on BUTTON
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <button.h>
|
#include <button.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <dm/uclass-internal.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)
|
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);
|
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)
|
int button_get_code(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct button_ops *ops = button_get_ops(dev);
|
struct button_ops *ops = button_get_ops(dev);
|
||||||
|
int code;
|
||||||
|
|
||||||
if (!ops->get_code)
|
if (!ops->get_code)
|
||||||
return -ENOSYS;
|
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) = {
|
UCLASS_DRIVER(button) = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue