Just bumping this again, any reason this can't be merged?

Kind regards,

On 14/07/2024 21:49, Caleb Connolly wrote:
> 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.conno...@linaro.org>
> ---
> Cc: u-boot-q...@groups.io
> ---
>  drivers/button/Kconfig         | 11 +++++++++++
>  drivers/button/button-uclass.c | 22 +++++++++++++++++++++-
>  2 files changed, 32 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/button/Kconfig b/drivers/button/Kconfig
> index 3918b05ae03e..6cae16fcc8bf 100644
> --- a/drivers/button/Kconfig
> +++ b/drivers/button/Kconfig
> @@ -8,8 +8,19 @@ config BUTTON
>         U-Boot provides a uclass API to implement this feature. Button drivers
>         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
>       depends on ADC
> diff --git a/drivers/button/button-uclass.c b/drivers/button/button-uclass.c
> index cda243389df3..729983d58701 100644
> --- a/drivers/button/button-uclass.c
> +++ b/drivers/button/button-uclass.c
> @@ -9,8 +9,9 @@
>  
>  #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)
>  {
>       struct udevice *dev;
> @@ -36,16 +37,35 @@ 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) = {
>       .id             = UCLASS_BUTTON,

-- 
// Caleb (they/them)

Reply via email to