From nobody Mon Jul 27 19:00:21 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B92B37F737; Thu, 16 Jul 2026 16:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784219148; cv=none; b=CY+FNfVPtrA/gNNx8CSYxE1whji8K84aWIBF5cCZ+WOk7thQWJdLbURlKsF5psevS2s4TP8PWXFgGGMtyKmbYvp5cKmLzJk7Tkk6c4TtiYgzYFtHzWvIxbAhNZrorRkqAl05yiXL+aCrNnRx6zTi6euC9JIbrl2HZ0S8ENEt2qI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784219148; c=relaxed/simple; bh=LYzP1POdw5a8yQvN2W2giofafmG+0KdWcbaPKgHCpnM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fgGIDtLbTLHajYHmjo0f2bsimF9NuDUq59p9XVOk90f3nf8Cgiy49hHQliJOFrasrRd5HDa/eITZc3eN1HnfPtFetLg/lgrWK8G+Ntgp7zFodZHRDYL7b28ZT6kpnGvSzDxkeaf3+Pv2cHMnOkooxZyQ89/hpflq662uPomT1f0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=eZ76ZqU5; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="eZ76ZqU5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1784219136; x=1784823936; i=w_armin@gmx.de; bh=I3QLeFOpVdZz+WqxOEz/DExYIgT0mE3i9ktSQa08Fbs=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=eZ76ZqU5BZBXFeN8nPR3F+EhqLa7OJA7ZNrkqQGY/RvPZbv2M2xFInCsRY6bw97m XerWmxmTbtDIHbRuwDMNtW7cE+HTBmfyMMrTfIPMrh+DFxqv5zu4CKuRvdoHs7ASb u/ryxbYd/3UohUmcJ6ZtKlEuljLetzxyOXhgmRYzdqVypj3Ir6MbXyeuFT0Z+TsE8 inDmfPqrMqGu+TnXZKIoj5iNCPYmlVMwl7xtISlz7N54ECD4y5Cge2HAXgsNQNFT7 6VPq0K3NNnpul7Wc1kW/OkpYYCS1HHImdLToRtzrNup1vMAxrYRYSTrdC9EQnzW51 aQZ0VFbyKmTJ3qxhfw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N95iH-1x81m32xwF-00rcSE; Thu, 16 Jul 2026 18:25:36 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, wse@tuxedocomputers.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/2] platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() Date: Thu, 16 Jul 2026 18:25:30 +0200 Message-Id: <20260716162531.5744-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260716162531.5744-1-W_Armin@gmx.de> References: <20260716162531.5744-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:a40xJJ3v2s7WbAA+a3wHb/7x8RXnXITMMlb8sR2IdlMTXBm4W9x JPY+djWLrXgvyQZ3B2IJNvybBp5z98jRLhyeneYgEgkX/pxRQuh0de+kAnv3nYUeoZBdRWf E7c9YoHXEOMS+zlGC+xMHQEEIxJR99kiVhYkyQq79xeR/f7VzSjmIj5WHD9PS6RnsS6AfFn nxNmSpoihMnNr/ndzdv2g== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:T3C1Cl3Ribk=;TcTphrm0LhkocFj+I9IcMfuF7// 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 Content-Type: text/plain; charset="utf-8" The function uniwill_kbd_led_init() is quite large and doing multiple things at once: - general hardware initialisation - single color keyboard backlight registration - RGB keyboard backlight registration Move the last two things into separate functions to increase the maintainability of uniwill_kbd_led_init(). Suggested-by: Werner Sembach Reviewed-by: Werner Sembach Signed-off-by: Armin Wolf --- drivers/platform/x86/uniwill/uniwill-acpi.c | 123 +++++++++++--------- 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 310445583832..d27f316800f6 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -1733,7 +1733,24 @@ static enum led_brightness uniwill_kbd_led_mc_bright= ness_get(struct led_classdev return uniwill_kbd_led_read_brightness(data); } =20 -static int uniwill_kbd_led_init(struct uniwill_data *data) +static int uniwill_white_kbd_led_init(struct uniwill_data *data) +{ + struct led_init_data init_data =3D { + .default_label =3D "white:" LED_FUNCTION_KBD_BACKLIGHT, + .devicename =3D DRIVER_NAME, + .devname_mandatory =3D true, + }; + + data->kbd_led_cdev.max_brightness =3D data->kbd_led_max_brightness; + data->kbd_led_cdev.color =3D LED_COLOR_ID_WHITE; + data->kbd_led_cdev.flags =3D LED_BRIGHT_HW_CHANGED | LED_REJECT_NAME_CONF= LICT; + data->kbd_led_cdev.brightness_set_blocking =3D uniwill_kbd_led_brightness= _set; + data->kbd_led_cdev.brightness_get =3D uniwill_kbd_led_brightness_get; + + return devm_led_classdev_register_ext(data->dev, &data->kbd_led_cdev, &in= it_data); +} + +static int uniwill_rgb_kbd_led_init(struct uniwill_data *data) { unsigned int color_indices[KBD_LED_CHANNELS] =3D { LED_COLOR_ID_RED, @@ -1741,6 +1758,7 @@ static int uniwill_kbd_led_init(struct uniwill_data *= data) LED_COLOR_ID_BLUE, }; struct led_init_data init_data =3D { + .default_label =3D "multicolor:" LED_FUNCTION_KBD_BACKLIGHT, .devicename =3D DRIVER_NAME, .devname_mandatory =3D true, }; @@ -1749,57 +1767,6 @@ static int uniwill_kbd_led_init(struct uniwill_data = *data) unsigned int regval; int ret; =20 - if (!uniwill_device_supports(data, UNIWILL_FEATURE_KEYBOARD_BACKLIGHT)) - return 0; - - ret =3D regmap_read(data->regmap, EC_ADDR_SUPPORT_2, ®val); - if (ret < 0) - return ret; - - if (!(regval & CHINA_MODE)) { - ret =3D regmap_set_bits(data->regmap, EC_ADDR_BIOS_OEM_2, ENABLE_CHINA_M= ODE); - if (ret < 0) - return ret; - } - - ret =3D regmap_read(data->regmap, EC_ADDR_KBD_STATUS, ®val); - if (ret < 0) - return ret; - - regval |=3D KBD_APPLY; - regval &=3D ~KBD_POWER_OFF; - ret =3D regmap_write(data->regmap, EC_ADDR_KBD_STATUS, regval); - if (ret < 0) - return ret; - - switch (data->project_id) { - case PROJECT_ID_PF: - case PROJECT_ID_PF4MU_PF4MN_PF5MU: - case PROJECT_ID_PH4TRX1: - case PROJECT_ID_PH4TUX1: - case PROJECT_ID_PH4TQX1: - case PROJECT_ID_PH6TRX1: - case PROJECT_ID_PH6TQXX: - case PROJECT_ID_PHXAXXX: - case PROJECT_ID_PHXPXXX: - data->single_color_kbd =3D true; - break; - default: - data->single_color_kbd =3D regval & KBD_WHITE_ONLY; - break; - } - - if (data->single_color_kbd) { - init_data.default_label =3D "white:" LED_FUNCTION_KBD_BACKLIGHT; - data->kbd_led_cdev.max_brightness =3D data->kbd_led_max_brightness; - data->kbd_led_cdev.color =3D LED_COLOR_ID_WHITE; - data->kbd_led_cdev.flags =3D LED_BRIGHT_HW_CHANGED | LED_REJECT_NAME_CON= FLICT; - data->kbd_led_cdev.brightness_set_blocking =3D uniwill_kbd_led_brightnes= s_set; - data->kbd_led_cdev.brightness_get =3D uniwill_kbd_led_brightness_get; - - return devm_led_classdev_register_ext(data->dev, &data->kbd_led_cdev, &i= nit_data); - } - for (int i =3D 0; i < KBD_LED_CHANNELS; i++) { data->kbd_led_mc_subled_info[i].color_index =3D color_indices[i]; =20 @@ -1851,7 +1818,6 @@ static int uniwill_kbd_led_init(struct uniwill_data *= data) if (ret < 0) return ret; =20 - init_data.default_label =3D "multicolor:" LED_FUNCTION_KBD_BACKLIGHT; data->kbd_led_mc_cdev.led_cdev.max_brightness =3D data->kbd_led_max_brigh= tness; data->kbd_led_mc_cdev.led_cdev.color =3D LED_COLOR_ID_MULTI; data->kbd_led_mc_cdev.led_cdev.flags =3D LED_BRIGHT_HW_CHANGED | LED_REJE= CT_NAME_CONFLICT; @@ -1864,6 +1830,57 @@ static int uniwill_kbd_led_init(struct uniwill_data = *data) &init_data); } =20 +static int uniwill_kbd_led_init(struct uniwill_data *data) +{ + unsigned int regval; + int ret; + + if (!uniwill_device_supports(data, UNIWILL_FEATURE_KEYBOARD_BACKLIGHT)) + return 0; + + ret =3D regmap_read(data->regmap, EC_ADDR_SUPPORT_2, ®val); + if (ret < 0) + return ret; + + if (!(regval & CHINA_MODE)) { + ret =3D regmap_set_bits(data->regmap, EC_ADDR_BIOS_OEM_2, ENABLE_CHINA_M= ODE); + if (ret < 0) + return ret; + } + + ret =3D regmap_read(data->regmap, EC_ADDR_KBD_STATUS, ®val); + if (ret < 0) + return ret; + + regval |=3D KBD_APPLY; + regval &=3D ~KBD_POWER_OFF; + ret =3D regmap_write(data->regmap, EC_ADDR_KBD_STATUS, regval); + if (ret < 0) + return ret; + + switch (data->project_id) { + case PROJECT_ID_PF: + case PROJECT_ID_PF4MU_PF4MN_PF5MU: + case PROJECT_ID_PH4TRX1: + case PROJECT_ID_PH4TUX1: + case PROJECT_ID_PH4TQX1: + case PROJECT_ID_PH6TRX1: + case PROJECT_ID_PH6TQXX: + case PROJECT_ID_PHXAXXX: + case PROJECT_ID_PHXPXXX: + data->single_color_kbd =3D true; + break; + default: + data->single_color_kbd =3D regval & KBD_WHITE_ONLY; + break; + } + + if (data->single_color_kbd) + return uniwill_white_kbd_led_init(data); + + return uniwill_rgb_kbd_led_init(data); +} + static unsigned int uniwill_sanitize_battery_threshold(unsigned int value) { /* 0 means "charging threshold not active" */ --=20 2.39.5 From nobody Mon Jul 27 19:00:21 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A21BB377A9D; Thu, 16 Jul 2026 16:25:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784219142; cv=none; b=o0u9ddjMLxKmv2LXnhnSdVIwX1amus8Oiaq5z4Jt2H1cYcWm/kf7c4XzWGbvcMbXwCWnKHR8a/m+/NoeP+P2TEG8QvXwAdwLWSiE2cVjXDkekEMKH7mbUimGZMsucsdffPq0BHyQaqw2UWaAoBJ/yc5zNPBytsze9QditiTo19I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784219142; c=relaxed/simple; bh=biTnXKaVuwAKNercmwzsFQXqjiyi4ugmsUIIg30SLwY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XHYMegYX/uK5/f13qx4xbZWv0sr2IovKKvUj1+6NAQndT6ni7iXBrFzbE//1x59hAue39E+ckPiaECnNTfAiWSSmRDyK5yDL6KYnuXAhF4lLdG23o9/AhxJKZxSLv96SFSI2P/NmR7W2Vd85QZ+JouA5ipwvkwwnUxRe/fCvcWA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=fZBN/bbO; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="fZBN/bbO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1784219138; x=1784823938; i=w_armin@gmx.de; bh=7cMNzHmcyjJURfp74eKxW/fFb2RNncxcMzIG6zKWgzY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-Id:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=fZBN/bbOYm7A7sMNTP5F0zR//Gs8jlNVSZ5xK7Kfl/8px7qqfH1kWWB3RSareRWF lZZBvlzRaVcovNaKf4PJQzoIRCEQQbRl06Sd+A4yXQj9X0MJkw1YH18NfI04EZWoI Q6HO2k0Del0VtHQTvrZwF13BkkJ2RKV9T8TZ7Qf4P/qYFsSRiZMpw+FxsvbZxhrwx bpnGhaZCU0aCUN1JT0fJGRqjYfH9mny2QF/gzvpHQBj/YXO/LmSlcFyVhgSC9MuXE ItH4y1bEyRmw/sK+8WII1qPMFjvmMdK7ksHwwEEKWV72+xB7crQf5/n3H3eiLVrEj 5nKMKeNNlUab3gkBxg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MQv8n-1wPrFe4BHj-00QmMw; Thu, 16 Jul 2026 18:25:38 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com, wse@tuxedocomputers.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection Date: Thu, 16 Jul 2026 18:25:31 +0200 Message-Id: <20260716162531.5744-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260716162531.5744-1-W_Armin@gmx.de> References: <20260716162531.5744-1-W_Armin@gmx.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:1JITjxEpqRNCXDrgYFrxGAjmISFwMlh8u7aKxOIl5U1BpEpQgF5 vIOiMFqWF4J4tCXCEoxRvjl8HXKhnl58i79wkCfBPl7SfTxSHS2iUgkrPnUhwcl9NgNFouW sdfkCvErGBjMyTB/JB03x99+KL123EjQpRwmqJTfYXIrwctcoqe5R20Hdht2mw0XGhJxcrn OWqRwxYKLnDjimOR3eSQg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:sBn4hgzKxtM=;kvlVlsUtA913mdTtzL3pvfoSTpM dRIap/D3yxS9uguZeVP4qN23AIbWv8Cj7dFaaHQ8hzp1XR2cc7bR3fCDXZ3q4mTq9D3i5+Fa+ fMRqZcNJi0DHwIG2iqKvPrsUUpswJgNrlrcbvfX9YJX3098zbdqlU67MxXx3dZ2qRySur1k1m QqSt1vt2eNQ2bd5dybPf8xqltVq4WpSTIyi6mXhXAITxCpZAj/E94Vz/dUWnEHdATjef2+Yh2 DW+ReHj8Bf/7wPtOewS81kjLP2wOqawcmH36NF+pNi5+/MMWkmxZeqfHTLVXVX6fgERv4sh7+ TJ3hefnqCZoJ2yW0KGSTL7kIZappNbCIcpKHTVVt5If/OImj7RBpohzl+QIt1RSe/FGWYm4+6 JirONHLZ7v8PJWJzKEAhx6TuUz6FEqbGSsIxCLL6Oon3nSe3XBSlSc6qZ1W6SPpklmMAPXHzc OyQcBw+7Debp9kjFzKILELxBRSYJzUj2WCqGFw4uvdCcL9F7JfL5fERyZ0CPaa49wgDV8AdOg 4hn14nBEKjfTQAeTCfDysDXkIx/Bius05RCWb13bHiJgPQZhp16Tt18a5U9WhDWMPujbtB6Ji 7WJ6qBftnEMixb3TPa0UEN2fnHPrUyAmTjtDHin46ok2moRKKNnxUxiLW7HOKfwGU+XPxjiTj 4UukENDkeIk3FBf0070XoTezVXJzQAKEqNNZJ82ISgwxpZhulxmr5TAyJtrs2D6pPA/RA+H6Q Mr4SGfn2A9g0T97WxJorzpFM5RndkDUdxJ+tZBVela2inYyI1ZLgljLyEkLVURIHm7dg0mMqc E6eBoLlyK/pxnYqQ6Tc4j6ppgijFoUqZ5ir72cQEn8zD9jSCfi45Ra6UHHJEN1tUAAAtXTvbt Yz9KwYJns+uqalMhjmpoSDqD4qKHNsvdDvTMazuV202jh1hw0UpA+Ey3NrWnw/5EnB59XL7tP sakWAyzrOnE/y94wDOC41hdJZ/FPdOpzzQZfRwBIF6Q9CT2gv6905LVEyPK6RN0LZowmXjHZf 72SZXIFV1CKCdt6r3csFYsU9+s6U4R5MX0oymO/WraDwvUEXb0HrFB5/Eujkq4J0IYj5UMLRt +8qV/jS2ZKinPgyQA4+KyoTOJOkVUewSqZXHvMAzqDwJdc4fgpOOd7nONr4AXwijEx64z9xmP C/19SGsFzlPo2VwAbwfg+u3Vll8zoAsXAiaA+g5JWYV7xl8CGDmNu/3Jdn3q7k+ObxsaHR5QX XSGcYT1s0aH2eHFItGb49s2cz+YLjcAN0lXe967rORrUuNUjz619Jo0pcFwvQRKAht0FzdUWs sXo7UMFFlWSsJUKPKIj9y7ALhr9WKFGgliwfvNXmxNSOfCPFFMbt6//bGIayjH10v8UHHsKWq T/H0faEKMOuLtQPlOAI/5iFbdRBsrPcCPJo6Op/ZkapUQGTWg5e1S1MnwgiUkK5Oi0NKW3MDU aUwOe6LsEuCK3PXMrq3qxcGieldtLULSBw8IDqfzLstQkR6YPlQHHtzmPZ9xVwYMnQUN86YQb Smbw9fBz2h45QYI1sA9ugxjJIoI9CaBl+o39i5+znuXoyg5kZ1Pfn7ep8xRNxUgiIIcHId399 om4Tg41Uy4hA+fnW/EEG0B9fpAuUUMTtqaaUvBwN9H02CgnsdGWe5HOuj0fOhS8qjyySFF68E YKNFyx13HO7xoQ5GkDBxElmy8y8oFeV9mDEufUOtUvQYeTgo8ZzOhiiPW2aov7L89EQd3eAB1 R5m/ZkaTAoASwpzMvnpEouWM3Avs7icK+eQRhWdH6Hbkjo86jfQ6lT51xTFX44ySfNbATA65h 1Q59GHt36juL5IkG4i9cUHKYmeBCh60NzIsyqttdpdFm3hNEwpVuxpw6+0ChAVfzDAwkAi/pb JjRW27h1wLJiUoKwOKWmCd8ITIFXeONiaJi7sEzBRPHOaKPo2ayvVvko8pVqSjWCWrioHCwzU SJj1/EgoCO81YH64yQtw1THIum5Oa4hrv4UFlKHbKMXdJt9GwUytcLlHBLb/JJZSR4l0A8EV8 wnmLrQv9FX7+fmfRzz9zGWAzqpBHByXKLtDyyFKoSGVRPg1Cw3miO2dmE3agy5VPrqmPdDr8U 1RcbrAZpso3SHej6KJBRtiOmoz3JoqzAwHJHT28pjL8dW7Duqc+7qFRWNglrLvWeoSS6xm/QL JwauTcFj9C57X5fC9a22UFM2f/pl8VnB5zvRyfTWuh7eFwRtmwqIfZRkohi4opL9xN+ITyRBt egdW1HOLHIrvzCgd9kC4FWGaGOygGmdQgNF/ktgVLltiZkLOjQt0sUOB4YZEHzGwFtUgwAzD4 I0kmbcoao+KcjYNLP23dKFf3Mxy3YaAbUdTAbJJhWABqbfDRNI+M0g/b5zL4FkcFA9c+TJH7e ADgC8U6ewXYmiO9djL1FJa08cohXOtCLoANmuKU2DxJRsv/+5sNiMktb8t+/mZ1pBQtQ2D1F+ fBQQc5llt4pv454t1C9fT/ZoXfDjWY80QTxmyiRUn13wy2JqEWg1xNu1J+d7tZ7xAmBoGyRM9 hPeZxhMKJZbe8R9UOOPxwETSwjHr6RShii1TJjCJ+oj74PRxS+MNobz7qJNo3G/BlnYPwORPn zWbHt3LfdvN1FyOtIJV/by43p2++BtVIEB9YeGscs5gtxofFP2EcyJiNXjhpq3yRLmrLBWkMR 7sEUmYIr16Yrfj8f2i4GTZU6LGRea2/ipsmyyW9H5g9wQJbnktuYZxKSgREZp8Sqo0rqkznBE M99atU4l4zGZ8kR7tLVfYu5UYtDY29WIrP0KnMtK/mOQkQy0Eb46jAq+wVAFoFQyVGgKvVsB4 LCPaz9GwDXmaitzlFyOS3GmMS+OQBVGKUUFvaMOi8ZOfVshYBNdX87Qea5ThhZ/vClP02ipze Y6dEmfw8YatNxJ6B0qggSoFnmzqZXV+Pm3Pun72kxdf0629OqlQC8P5X57p1SxbQlxV+bKPI2 V+S1DTcmG2CB22saOibZH9rm6PHHRcZyAnR80sWPcVunewks6TCp0wmjfjznBtko4hunOLeZO BJGyk7DJDqVKnUjlT12W8o7BVtpVztIFrqEnvkxx/qbmn7heIT97r1Fw6BFw93iuktNZyQYNQ 4lb9w0BUMoUIqQddpX8RkHM/LB9Wy9ml/o8DMsoy3Of+/UmYNPtnYFLR+Y9iReQCHygEm0KGt HcPMjDYJiWtZiH4H6Pbae4aUaaqRAzuVJErMtUmkBgf7GbE0IBEvI2s4NKKpIsyR9B9uAgdZE 2yRERSRNKdmpWuFQe56Dq1l7MRd+ba2bnKQa8Xu/e0FVwqtmxfN6Pr1P6V5JKDrfYle/NXhny aGOI0BiasiAvmZvIDSRm2/aq2Z3qctv6gbMQ75RL4ytT8cijb5v2wRFAzLFfnYYgHgMQ2XwiR 8AFFr611e2ciyhlNvBGU+nIXu7LQf9LsNLVrApWWffbEsLA56dHbE7USWAMEU1+fXK2owF6P0 CrDl0xaoheaxEOwBWbz9d0nj6bZGylORpfccvpf/C0dNp4hR6M/JzFCHYVJIpMDNCDh5rSY01 CMVEbCRPM4ifS3SNBvwcXB7tIf0+3Pm5YsEux362eLFBut/NRWKPzC8qYV8pqi7HPDNOgAOn8 dvRg7Iwa9bcoZCOjVIPL4P4d9CQl9oQTpSrLX5KJCeB2JdC0lETQWOfU+7I6uXQzKGWLpLmlq ZpEXKT0qjsYY0BEt599b4Q7oCMXiUr9ljz83cYgZC6/yOILyimsDmmGsSr+/YiHR5VBYwqchK 3f7YmLzKbxAWGrq7Nmp9+GkXAK60nJWkqL2r2oLIUst37uFlL8SqWnlGQRB2JBrhJbnIsx46q tNTKZOyRh3KPpQiI1veyRAl7JRJIBzJoBtRdt/sQFX5mUH8uhp17LjDUl+etxBpw+3hvXoRAa 5HlqgibPwHBTIGB48tlGQrPOTO4yMWvW6NPXVBSrBq96iVc/AYWQGPxZ/YnOTMftgA+4Dglfu coeXzZvNuGC4qfFPMIyAq1aKIZZXZ2g7in9R3Ywek1A/rJ1vRcbnLhXkIYl5u3clCKpkmqciC dl9+kPvmuIv9gCJHM3h1uONsmvpsUHmCx0V5f1Ghbw2aSgot+Ow9QINtD6ZX33fHFG9qRzRm2 QMcDAWL1uJyFhui1rflRSLRsygtZ2m4CuSiICVanfeIfCKDDYweLDYCjWgy1UHZNOArrmfXOy 5P7RIOrRwg09azeyZsspib3pUEaU9yaSMAjMB9dNaQ1Z61SnYQndKxQxRTZLmjzobfQSbABUO DaRSB0A/U489sh0KjiEjWozBLd8Azl4jx0B7xc8aFYaQukj7EgQbOB0rfNf2xxY3iqrDE6d4E M3zFgPqzt2gbQFspUo1kxWaktfK+SYPVgd1tUCoME84yfoRmChnp1uj6E2V/QlllITWr6cxGj ZZzlrBybBBp5CE/s3mRA3fjalIZyVbqLWJWn5yPaxhd4QrEY5sbvO5//3/L86a6bTbz1zozVN kQdx/jalD2CLDMKILEQ2/j7dxf/mhTew0pfwtO8klalvc6YE8hvYRN5xWA7teogOu4ZZ892yI zF89/M/+FJPOdBu8163UgBcbpl1R68IrmXEOSRTVUUY1sRDFWS1JnjkCGYCCIAJlIq7FaLOt7 7FYKDi+PTsWCVRUqEopvVCJxGN9P4YW4HjK3IZn2/Ch+QZYSzqEXmRm5TuwPrJkLbYg8gebsW KvOEq9SLNBEsE5vvyLoM+VHZ/nVnjE+UmpXH/EW+8jzhgtNePhU32f/JLDWCV/OPdy01kTiFL sy5wLXErn+qGf9t2jxRcKESk0NQ9oIVSv63wZY1IO8AvsWPDO0EflhRJ2zbgDwOcj6FuwnOJ6 6q6m+Q55KORlCgbakbWLWhCYhi2hYgNshHsiJuaDzHCdJgaGjUWQZPzs5kd/26XkWZJ5dBL9j UFp+3wBNu1ExWcuqOHf6KlUon7e93POnCY/OL3zcAqLcDd2H1QEE4cUvvA/4KdQujm0mh0oXo 2dBKQXE1cZ251qGJdXHE0/ItawnuKhkg2zvPPmf7uCub4MrCy0ritEpLLuk0ycQs0kF74NmLr yac80G3+hTPGoDTV+3BzpRlgci57NePSd5fqCHzXQ9jlL9Owtk9bSts7BfDmFhtf6QWo51E0g 3TVS4WoK7ILdoyJ3II35iN5oqqvZQwVDoDj0DarLcbjWfihXP/BZWWi4/f3vchf9iwyPBkuQE wg5AZKtpFMpgKdb8jdxXVEdMhoEA7ngSzGQHKzaLb/HCP1UKE7dfjU2zGGvAXzG/SipMGH+z0 hXt7bOS2aneSnXwWPjM0KslZM/aWePkXhDVcuFDAmtFuol4RBLLy3Z8uP01NiCRXFMQ5LU4h/ y7PM7rrhEJBjUjZWdyK9ob8ghp2SjR6GD8Da+6kOL3HHARlvIRPjta1tSUNrPH5NsB2RT2HZ1 +phjIN+XOYQ8MOJSUW7QNyqKh6eg+krFzga4bDE1OvWM7tVl709eUi5SOFPDN99tsq0S43026 iLGE6GGg/bycCnljZjjldDLyEpqZk08kxe0RoABsWNVw/7lt21ZWp24un9ObueuiNe/KwkX9H uIj5REAubeWQ+jqwsbuIrczjz4SOuio8EYiAdKSLBNOtPZeGZJny0cvfulanqX8mxRGmdXad3 sO1e25OBA3kDhJNDc9FbrKH2ZSnMglfeo3hsbJZxAdyafaupgpe9axo+4CfI1XLC/gWdelLwy NuWT3B3/1hF54oqnVhTu3pna/vz2sNNt5MHzIJym4+DkKsrUqacbusReuBljvM17q3TkFKfOe ca3TvNaHeue1WuzIz5eJK+ldilQPKsvJ1qg2VId2UAwaG7YuKnohqfu4ZOFku3GU= Content-Type: text/plain; charset="utf-8" Having a ad-hoc device whitelist inside uniwill_kbd_led_init() to work around unreliable KBD_WHITE_ONLY values conflicts with the idea of the device descriptor infrastructure. Remove the ad-hoc device whitelist and use the device descriptor infrastrcture instead. Suggested-by: Werner Sembach Signed-off-by: Armin Wolf Reviewed-by: Werner Sembach --- drivers/platform/x86/uniwill/uniwill-acpi.c | 32 +++++++-------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index d27f316800f6..4591ee299a90 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -255,6 +255,7 @@ #define FAN_CURVE_LENGTH 5 =20 #define EC_ADDR_KBD_STATUS 0x078C +/* Unreliable */ #define KBD_WHITE_ONLY BIT(0) #define KBD_POWER_OFF BIT(1) #define KBD_TURBO_LEVEL_MASK GENMASK(3, 2) @@ -400,7 +401,7 @@ struct uniwill_data { u8 lightbar_max_brightness; struct led_classdev_mc led_mc_cdev; struct mc_subled led_mc_subled_info[LED_CHANNELS]; - bool single_color_kbd; + bool kbd_led_single_color; u8 kbd_led_max_brightness; unsigned int last_kbd_status; union { @@ -426,6 +427,7 @@ struct uniwill_battery_entry { =20 struct uniwill_device_descriptor { unsigned int features; + bool kbd_led_single_color; u8 kbd_led_max_brightness; u8 lightbar_max_brightness; /* Executed during driver probing */ @@ -1629,7 +1631,7 @@ static int uniwill_notify_kbd_led(struct uniwill_data= *data, int brightness) struct led_classdev *led_cdev; int ret; =20 - if (data->single_color_kbd) + if (data->kbd_led_single_color) led_cdev =3D &data->kbd_led_cdev; else led_cdev =3D &data->kbd_led_mc_cdev.led_cdev; @@ -1858,24 +1860,7 @@ static int uniwill_kbd_led_init(struct uniwill_data = *data) if (ret < 0) return ret; =20 - switch (data->project_id) { - case PROJECT_ID_PF: - case PROJECT_ID_PF4MU_PF4MN_PF5MU: - case PROJECT_ID_PH4TRX1: - case PROJECT_ID_PH4TUX1: - case PROJECT_ID_PH4TQX1: - case PROJECT_ID_PH6TRX1: - case PROJECT_ID_PH6TQXX: - case PROJECT_ID_PHXAXXX: - case PROJECT_ID_PHXPXXX: - data->single_color_kbd =3D true; - break; - default: - data->single_color_kbd =3D regval & KBD_WHITE_ONLY; - break; - } - - if (data->single_color_kbd) + if (data->kbd_led_single_color) return uniwill_white_kbd_led_init(data); =20 return uniwill_rgb_kbd_led_init(data); @@ -2351,6 +2336,7 @@ static int uniwill_probe(struct platform_device *pdev) return ret; =20 data->features =3D device_descriptor.features; + data->kbd_led_single_color =3D device_descriptor.kbd_led_single_color; data->kbd_led_max_brightness =3D device_descriptor.kbd_led_max_brightness; data->lightbar_max_brightness =3D device_descriptor.lightbar_max_brightne= ss; =20 @@ -2580,7 +2566,7 @@ static int uniwill_resume_kbd_led(struct uniwill_data= *data) if (ret < 0) return ret; =20 - if (data->single_color_kbd) + if (data->kbd_led_single_color) return 0; =20 return regmap_write_bits(data->regmap, EC_ADDR_TRIGGER, RGB_APPLY_COLOR, = RGB_APPLY_COLOR); @@ -2687,6 +2673,7 @@ static struct uniwill_device_descriptor machenike_l16= p_descriptor __initdata =3D { UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | UNIWILL_FEATURE_AC_AUTO_BOOT | UNIWILL_FEATURE_USB_POWERSHARE, + .kbd_led_single_color =3D false, .kbd_led_max_brightness =3D 4, }; =20 @@ -2869,6 +2856,7 @@ static struct uniwill_device_descriptor x4sp4nal_desc= riptor __initdata =3D { UNIWILL_FEATURE_KEYBOARD_BACKLIGHT | UNIWILL_FEATURE_AC_AUTO_BOOT | UNIWILL_FEATURE_USB_POWERSHARE, + .kbd_led_single_color =3D true, .kbd_led_max_brightness =3D 2, }; =20 @@ -3363,6 +3351,8 @@ static int __init uniwill_init(void) if (force) { /* Assume that the device supports all features except the charge limit = */ device_descriptor.features =3D UINT_MAX & ~UNIWILL_FEATURE_BATTERY_CHARG= E_LIMIT; + /* Some models only have a (white) single color keyboard backlight */ + device_descriptor.kbd_led_single_color =3D false; /* Some models only support 3 brightness levels */ device_descriptor.kbd_led_max_brightness =3D 4; /* Some models only support 36 brightness levels per color component */ --=20 2.39.5