[PATCH] dm: button: support remapping phone keys

Caleb Connolly caleb.connolly at linaro.org
Mon Jul 15 10:38:39 CEST 2024


Hi Quentin,

On 15/07/2024 10:16, Quentin Schulz wrote:
> Hi Caleb,
> 
> On 7/14/24 9:49 PM, 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.
>>
> 
> Are those event codes properly defined in the DT already?
> 
> e.g. 
> https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts#L31
> 
> If so, what prevents us from simply patching the U-Boot DT to change 
> that code? No additional code required anywhere, no need to maintain a 
> list of mapping, etc...

Many platforms in U-Boot are now switching to upstream DT, and 
SystemReady compliance requires that the bootloader provide a DT to the 
kernel.

U-Boot doesn't really have a generic way to apply specific adjustments 
to FDT for U-Boot without them being carried over to the kernel.

Patching FDT is in and of itself somewhat treacherous without using 
OF_LIVE, which isn't set up until after bind(), making it unsuitable. 
It's also vastly slower to patch FDT than to patch a livetree.

I couldn't conceive of a way to do via patching DT that wouldn't require 
solving the above problems, I also couldn't think of another example 
that would justify making this patch more generic or configurable.

Kind regards,
> 
> If that isn't possible, .........
> 
>> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
>> ---
>> Cc: u-boot-qcom at 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;
>> +    }
>> +}
>> +
> 
> ....... I suggest to make this a weak function that can be overridden by 
> boards (should it maybe be only defined in boards C file?) so that it's 
> easy for people to come up with their own mapping without having to deal 
> with two people/the maintainer disagreeing with what should be the one 
> and true mapping for that key.
> 
> Cheers,
> Quentin

-- 
// Caleb (they/them)


More information about the U-Boot mailing list