Re: [PATCH v6 1/5] platform: x86-android-tablets: other: Add swnode for Xiaomi pad2 indicator LED
From: Hans de Goede
Date: Thu Apr 18 2024 - 04:55:53 EST
Hi Kate,
On 4/16/24 7:39 AM, Kate Hsuan wrote:
> KTD2026 LED controller manages the indicator LED for Xiaomi pad2. The ACPI
> for it is not properly made so the kernel can't get a correct description.
>
> This work adds a description for this RGB LED controller and also sets a
> trigger to indicate the changing event (bq27520-0-charging). When it is
> charging, the indicator LED will be turned on.
>
> Signed-off-by: Kate Hsuan <hpa@xxxxxxxxxx>
Since this patch is more or less done and since which fwnodes there should
be and with which contents is prescribed by the existing devicetree
bindings which are not being changes I have already merged this patch
into pdx86/for-next:
https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/commit/?h=for-next&id=fcc6220ddc7e54d8442287273d0cb8c415ada022
So there is no reason to resend this. Please drop this patch from v7
of the patch-set.
Regards,
Hans
> ---
> .../platform/x86/x86-android-tablets/other.c | 82 +++++++++++++++++++
> .../x86/x86-android-tablets/shared-psy-info.h | 2 +
> 2 files changed, 84 insertions(+)
>
> diff --git a/drivers/platform/x86/x86-android-tablets/other.c b/drivers/platform/x86/x86-android-tablets/other.c
> index bc6bbf7ec6ea..c77d56454f2d 100644
> --- a/drivers/platform/x86/x86-android-tablets/other.c
> +++ b/drivers/platform/x86/x86-android-tablets/other.c
> @@ -13,6 +13,8 @@
> #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 +595,83 @@ 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. 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 = {
> + .name = "ktd2026"
> +};
> +
> +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"),
> + { }
> +};
> +
> +static const struct software_node ktd2026_rgb_led_node = {
> + .name = "multi-led",
> + .properties = ktd2026_rgb_led_props,
> + .parent = &ktd2026_node,
> +};
> +
> +static const struct property_entry ktd2026_blue_led_props[] = {
> + PROPERTY_ENTRY_U32("reg", 0),
> + PROPERTY_ENTRY_U32("color", LED_COLOR_ID_BLUE),
> + { }
> +};
> +
> +static const struct software_node ktd2026_blue_led_node = {
> + .properties = ktd2026_blue_led_props,
> + .parent = &ktd2026_rgb_led_node,
> +};
> +
> +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,
> +};
> +
> +static const struct property_entry ktd2026_red_led_props[] = {
> + PROPERTY_ENTRY_U32("reg", 2),
> + PROPERTY_ENTRY_U32("color", LED_COLOR_ID_RED),
> + { }
> +};
> +
> +static const struct software_node ktd2026_red_led_node = {
> + .properties = ktd2026_red_led_props,
> + .parent = &ktd2026_rgb_led_node,
> +};
> +
> +static const struct software_node *ktd2026_node_group[] = {
> + &ktd2026_node,
> + &ktd2026_rgb_led_node,
> + &ktd2026_green_led_node,
> + &ktd2026_blue_led_node,
> + &ktd2026_red_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 +695,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 +704,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