Hi Hans, On Mon, Feb 19, 2024 at 10:07 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > Hi Kate, > > On 2/16/24 17:05, Kate Hsuan wrote: > > There is a KTD2026 LED controller to manage the indicator LED for Xiaomi > > pad2. The ACPI for it is not properly made so the kernel can't get > > a correct description of it. > > > > This work add a description for this RGB LED controller and also set a > > trigger to indicate the chaging event (bq27520-0-charging). When it is > > charging, the indicator LED will be turn on. > > > > Signed-off-by: Kate Hsuan <hpa@xxxxxxxxxx> > > --- > > .../platform/x86/x86-android-tablets/other.c | 85 +++++++++++++++++++ > > .../x86/x86-android-tablets/shared-psy-info.h | 2 + > > 2 files changed, 87 insertions(+) > > > > diff --git a/drivers/platform/x86/x86-android-tablets/other.c b/drivers/platform/x86/x86-android-tablets/other.c > > index bc6bbf7ec6ea..542ef6667b7b 100644 > > --- a/drivers/platform/x86/x86-android-tablets/other.c > > +++ b/drivers/platform/x86/x86-android-tablets/other.c > > @@ -12,6 +12,7 @@ > > #include <linux/gpio/machine.h> > > #include <linux/input.h> > > #include <linux/platform_device.h> > > +#include <dt-bindings/leds/common.h> > > > > #include "shared-psy-info.h" > > #include "x86-android-tablets.h" > > @@ -593,6 +594,87 @@ const struct x86_dev_info whitelabel_tm800a550l_info __initconst = { > > .gpiod_lookup_tables = whitelabel_tm800a550l_gpios, > > }; > > > > +/* > > + * The fwnode for ktd2026 on Xaomi pad2. It composed of a RGB LED node > > + * with three subnodes for each color (B/G/R). The RGB LED node is named > > + * "multi-led" to align with the name in the device tree. > > + */ > > + > > +/* main fwnode for ktd2026 */ > > +static const struct software_node ktd2026_node = { > > +}; > > + > > +static const struct property_entry ktd2026_rgb_led_props[] = { > > + PROPERTY_ENTRY_U32("reg", 0), > > + PROPERTY_ENTRY_U32("color", LED_COLOR_ID_RGB), > > + PROPERTY_ENTRY_STRING("function", "indicator"), > > + PROPERTY_ENTRY_STRING("linux,default-trigger", > > + "bq27520-0-charging"), > > + > > + { } > > +}; > > What is the result of setting this default trigger on > the multi-color LED class device ? Thank you for reviewing it. > > Will the LED now turn on at whatever color it was last > set (presumably white?) You are right. It is white. > when charging and turn off > again when charging is complete, or the charger is plugged out ? The behavior is simple. It is lit up when the charger is connected. It is turned off when the charger is disconnected. Many triggers can be used. bq27520-0-charging-or-full [bq27520-0-charging] bq27520-0-full bq27520-0-charging-blink-full-solid I think bq27520-0-charging-or-full or bq27520-0-charging-blink-full-solid can be used in the v3 patch. (The battery status is always "charging" for my Xiaomi pad2. Even the battery is 100%. When the pad is off and then connect the charger, it will be turned on immediately. The LED will be lit up after the kernel module is loaded) > > Regards, > > Hans > > > > > > + > > +static const struct software_node ktd2026_rgb_led_node = { > > + .name = "multi-led", > > + .properties = ktd2026_rgb_led_props, > > + .parent = &ktd2026_node, > > +}; > > + > > +/* B */ > > +static const struct property_entry ktd2026_red_led_props[] = { > > + PROPERTY_ENTRY_U32("reg", 0), > > + PROPERTY_ENTRY_U32("color", LED_COLOR_ID_BLUE), > > + { } > > +}; > > + > > +static const struct software_node ktd2026_red_led_node = { > > + .properties = ktd2026_red_led_props, > > + .parent = &ktd2026_rgb_led_node, > > +}; > > + > > +/* G */ > > +static const struct property_entry ktd2026_green_led_props[] = { > > + PROPERTY_ENTRY_U32("reg", 1), > > + PROPERTY_ENTRY_U32("color", LED_COLOR_ID_GREEN), > > + { } > > +}; > > + > > +static const struct software_node ktd2026_green_led_node = { > > + .properties = ktd2026_green_led_props, > > + .parent = &ktd2026_rgb_led_node, > > +}; > > + > > +/* R */ > > +static const struct property_entry ktd2026_blue_led_props[] = { > > + PROPERTY_ENTRY_U32("reg", 2), > > + PROPERTY_ENTRY_U32("color", LED_COLOR_ID_RED), > > + { } > > +}; > > + > > +static const struct software_node ktd2026_blue_led_node = { > > + .properties = ktd2026_blue_led_props, > > + .parent = &ktd2026_rgb_led_node, > > +}; > > + > > +static const struct software_node *ktd2026_node_group[] = { > > + &ktd2026_node, > > + &ktd2026_rgb_led_node, > > + &ktd2026_red_led_node, > > + &ktd2026_green_led_node, > > + &ktd2026_blue_led_node, > > + NULL > > +}; > > + > > +static int __init xiaomi_mipad2_init(void) > > +{ > > + return software_node_register_node_group(ktd2026_node_group); > > +} > > + > > +static void xiaomi_mipad2_exit(void) > > +{ > > + software_node_unregister_node_group(ktd2026_node_group); > > +} > > + > > /* > > * If the EFI bootloader is not Xiaomi's own signed Android loader, then the > > * Xiaomi Mi Pad 2 X86 tablet sets OSID in the DSDT to 1 (Windows), causing > > @@ -616,6 +698,7 @@ static const struct x86_i2c_client_info xiaomi_mipad2_i2c_clients[] __initconst > > .type = "ktd2026", > > .addr = 0x30, > > .dev_name = "ktd2026", > > + .swnode = &ktd2026_node, > > }, > > .adapter_path = "\\_SB_.PCI0.I2C3", > > }, > > @@ -624,4 +707,6 @@ static const struct x86_i2c_client_info xiaomi_mipad2_i2c_clients[] __initconst > > const struct x86_dev_info xiaomi_mipad2_info __initconst = { > > .i2c_client_info = xiaomi_mipad2_i2c_clients, > > .i2c_client_count = ARRAY_SIZE(xiaomi_mipad2_i2c_clients), > > + .init = xiaomi_mipad2_init, > > + .exit = xiaomi_mipad2_exit, > > }; > > diff --git a/drivers/platform/x86/x86-android-tablets/shared-psy-info.h b/drivers/platform/x86/x86-android-tablets/shared-psy-info.h > > index c2d2968cddc2..8c33ec47ee12 100644 > > --- a/drivers/platform/x86/x86-android-tablets/shared-psy-info.h > > +++ b/drivers/platform/x86/x86-android-tablets/shared-psy-info.h > > @@ -29,4 +29,6 @@ extern const char * const bq24190_modules[]; > > extern const struct platform_device_info int3496_pdevs[]; > > extern struct gpiod_lookup_table int3496_reference_gpios; > > > > +extern const struct software_node ktd2026_leds_node; > > + > > #endif > -- BR, Kate