From nobody Sat Jul 25 02:35:47 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (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 5C973330D2A; Mon, 20 Jul 2026 13:26:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784553994; cv=none; b=XbEcS+EQzScDDbC6ZrOMIR7VU9nw6H+Jf6PgekliuyidTrc2vDDz3MVlrACsaM1JLJVyFCCWyXTTASFI1WSINnwkkmE0E7y2HXuRPyaFrt/gWK7QZQY53+OYmrcRcnoOXFebYGaDmLezvNEmx3ejDkj+JeNcqHBafFdM4uXddgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784553994; c=relaxed/simple; bh=LYzP1POdw5a8yQvN2W2giofafmG+0KdWcbaPKgHCpnM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Lbd+HGBNHzcvT6Eh8aSKjs63e8juvoaidIdDvjZZ+DMOQUcbciKw4b8iBwVEPgMbaaI7ozf5DIRRoBPQvQ6n1HfE7BPROaBD1guG63GmlpYPCrho8TV+Rdy/8Qxq4ltkdnmSp/JAxkh5XukicSOTpKWneQUyklNeZjj014BwHTA= 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=r9vHHlun; arc=none smtp.client-ip=212.227.17.22 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="r9vHHlun" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1784553981; x=1785158781; 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=r9vHHlunSJsV9tsoWo6UnQr05CZnCafxVYQ7kJ291xA3SEVtIGh9j3lLRpHekbyg 5yEb6lHwOy5C73sfLo2Pqa6LZ8obWMvF0jAIG0Jv8txmY2KR5z9ihnkKci7vsZzYp sSi7UYuXG9V56XMQqPif5xFP/t4Tj8QkygQ8DjdbDNjb+5Jdm8EWLACj9mnx5VJbL 7MUJ8HZJkcwi9H8CYoKBjB5eC2JeZYU8D7Y7SBln0OIh8+A8NgrEG8Li1Jvm+WStC 3I21Igz9NdqDkqAxXoyuJAQIbC3IxWpcP0g/klrC1JvfPgmDCyJDvsWcPiNPnhgE8 Ot/mYypfZLWXmTlYpg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N1fmq-1xABRU3QVM-017Y0y; Mon, 20 Jul 2026 15:26:20 +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 v4 1/2] platform/x86: uniwill-laptop: Split uniwill_kbd_led_init() Date: Mon, 20 Jul 2026 15:26:10 +0200 Message-Id: <20260720132611.374073-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260720132611.374073-1-W_Armin@gmx.de> References: <20260720132611.374073-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:JruQYaSm3H8OQcxAg2c2OJXGSA9oqW5S6xMvAbPnRQ4NL2VUIgy bGlonUsH2IsWhwVxnAE8GI1Al0oTTbE0wx2INagp89n/fCd+xD1in2h/7laXKMYY9Qxgbh+ aNsmN1j0KreavsFCPLC6ajrXKc2c3HEfuMPoo11bdfIM+9dmILFSk/w6aCQsfWkapmkq8Mp mU5ate41yWQb5Z16dW0HQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:5NIJdMHUzZU=;89MLcl0EwBMzsrZzDXP2fBdIEaM 2hYACO0anFusYYdZDsL1u0kyvUtgSQVr/Yy6Env/Nl/PMSTKn37HC9kP4Sr3tgb477TfoD2Dq GJkpBThtxsOF3ixVG51oGM2Dmoqh/nOFgxPfptLuweg0VaUbmePnR9W+EjyNlLm/18+ypO3SQ zEUbixBhvOWHQFyrOZaIdUapb2DzOrWpH7lsiaqKd5vzj7roYOWz3O7ThzOWgz7bZAW2sVpgT VY5UfpwDgXiE2B01eBIGD2kYpTVlb/KAfUH17+q384GYYE3nLRd7n4Cg4qpzvMaZXqv2WbFiP MDlyi6xAHwGfNOwWcXY3F2/cd8OtVThqF/+X5eTJYpsfnOJdhEte+AVt7TO8vMJo8xMtZpkk5 pgExrp9axhQipb9pAjNTpkEfcyeIsOSzvLuvkqkP2NJZ0WetvhUnIgA+yvnUnJjaeTbbqvrr2 F2ElNm8+RjLdLNbP/oUxo1agCMxU0LVRozbCYVvswB1CRh4j9vQsiBEByxPRODFIBKqppxC8Z FfbBjefsTirIiDo+xwpRY6PvCPFmh7a4ZTVzWhutweaeUsbYLmsKDXbOPl0K1Ux8nkkrXSe07 Iuag4YN0Y6P67wF4HK7M6MdHIxDDClbAkufv3eypO2f2FlcPsEsqvLDrIyEuJheA1Qk7p++X0 BYis/hMPpG0vuOMpIEY8u79DxsO2G/wrn55BisYCIZ4F2gwiz68amUqmsSuq5SOwCbwYmZDEc y3QI17XjCSDCuxoLF6WQ1+Sg89f3MHYDXiS8bkc447WMi+rGCadbafINMGsqNx9+bMp9brCsR 5IASzWuqHHpX8KEMe9nQV4IetuTntBUUIiqN2JPWGJ7lZHj94vm382IfcEeWywyITlTN42Epe r17hNS/kgSUEzWaYc0u2jYl9180t6EC3pmEdnP4JO+QE6f6TLUstO7VtVfj7B9JLGcz41zUUS 2toq7lI490/7YmfE8ovJwUBUR6wyvlHVum9JK9mDknNVgu6vMIxJJmq4DNTTLs0OX6ughjJfm sSLVYjV+ZS7XMQsU0aRWxSliQbbFydMVItTtAKngDYXKfgOU3kkn0TkzpnTLQuY3qB35BAEh8 /0OSNz4efKfhRZS4mE7vmUFttkdpIDAPS6k5tb1vRUwE0tHqDdR9q3J+A9EBc/gyWnPFAuPvU wnMTQwbBSuLfpibHvyWXbTpjXN161guBEr0972zDlP0wH5tBd9/AAh9IuT/GXUOxqxXL5Fi6z 2AZJp0LaSsTWVslyr4DQnxYaCGym5xmGixMQuCljWswsHXMDZq3wtYkcwz+8CtnX8Nwgiszaj zR9eZsRQ3UV9i9hAcc3RGe5Fd4D1pbdYYImGuFUK/Fc5uRmWPjUiF2jEjajjEI0aulu+Ww9rT ZXTTGqdif/3m21PhmaH8/Hec53PobOuH5eUjHHrghCIR1QnJcmQ6eQXf3HyjHfjQYw9MDhoyp V8POR6mKENS9CsibT1izEgyId00cHf3zbMHZIail9ci2aaUSfD3T7XSlT57ozzesHwtoJaCAB bmTsptukcdONLMWPRgczMJajcaZ7KJcdb/iStS4dJDobJ6hTwSFsA+Fsk2hbdJQe7dYT25wRk ZUHZoUajCOgf/KWAkr6zYfYwq0wGZkoK92/+RGIHzEV2VmJIrUYJrkUa/b+qcyoRRyDwcnc1T 7v/nEbDupvUxLRTU1SskcPVEmsyAzbDfFTI9qk1SVY+01I9ckCdqpgyFWWPVyxlg6JjbwZ6U8 AZHP8X0AGlHwluLbrmCtZ3S2+6ASw+iI3WHN6kuvfqaKwWZyjQxLd0kBV+I9cIzzSPvgU+/+B fQax3Tz9jS8kqJIrJti4d+5xfHUY74KEEbq8dxmvuPLwdH8fyUHn7ak7MR+7ZwYqRjAnxhpTU 2Igw83DF+HxwpV2LKaPvN71L6PNbp9UH8hr/O+zjOHzVK+arH7W4fgIlvsKSvgKFSQozfbNKy BrTL2qiHMka0s4lGTp4RiC6HAHd2ns/bBkqEiYM+dI1U8T9dTNfGzK5JdYGuDe/O+r9rjaUcs pS19McOrXBzqn6l+EcIsxDqzYX/aeYwVknJLnG9KWhO70JGd8Xlg4BAUnsg1lYhHeafgbkSAm K7uc5CdsECzyVS6Kdk/7d1pC5Vrp1Pk70r22zowsdS+FZCbufkxHIpsgBTt3DPWu+BYYN5x6M 8AozPrSmHpDZEZf1WSKIB+REfdBHbx004MvvpU2eX8V+1ZExYrPflnfkW6jdX0ByRR6rSYBq3 sI1FFBMdUitseMNBsmiymXnEY43ySgBZyOych6XnTsmd0KbFQ7SNEwDd0T7385PAPJnM0qhSq sdMLckguu1aPftkEcV7jBsEU+YLAXgeszEVG3hCj1VeB5Dieg+GbPORl/ZIchzBMeYKFiBouK L8C75FyictPoi8YWQt3vrG418sKf88rUjao106qIBnp5ZChYriJUJPbHwhv71v/Glz7n/kcKa bzetXSCJES1S+bARSWC29TFBQxk76qfjljldDZzYKdX0fqWQzsR/BJFDtmLtzSuqRbw5TZ32z tNu+DncuR09Nuph2dIC5O7dYJNtwZ5RUFsMcwReoj/3d8JoylSqStITgTHNL9O2eLPeviLyk9 3k5pKwUn92wWEMzb7Er2me2a73UV64HvY5QkbnQ8iIskme9xRoGi/xBXrBepKgJgIcmCB9e4a RZP4t19F7g/M1vsn+duOsbUJjSW6uy31l5f/M17JMBVSH4UdWi0Y1PCQ0+8pSCEnPyX8axtTB r32hBCBOMHLBVdbHDVtLRMNFH/F5J9q8quBJUZZ978RuyuF8kj7pzluvoucNNaaDn6LMTOMxB 14v9tBdSgdZUV7haXamIKYf8eEVgE8fh/wWercbCeS8yryiFHZIOQr33r0S4AizXn4CpDCuYJ PJjoG2vu9+9pnXVA+iHjgC6vi72H5jvk0GlYlKkglHBHK3foXG27DnOSBqsvey82rOr0gizaT j3hCOi75M3dgoQkWZEoV/zrhJAilY0YlHdF9gw2JUqh6OOalV8tgpTBDf0r3dNzyuB1u7oSIa nK5lSxWtLjfvkzlqIZgFLQVM2v2Bexn3s2JfavzGjJkB/m5p80Kp9B9dnlTwxaQvEbAn1dDfZ 8Ys2UuzZ0F4uDGqAsrxfgpWz+XyLYsXpv5t60IOC5Z6Ng2A0k3uWhk2lUF/gdwjTx29rKcnlx IpdHPfDQXnf1cL8RNgpmFvsLvapvBcS6zHaG6Udl2DhpeIZYmpL4fMeQ/Ky8RtRYJTpssb/4R N4oIo3MbGYx4AD3Zt8KVfKi3b7JuK+E4gd/RVrad+813sWdTypRaz7uorYMzH0wRCToNu2DUf x5AyWiVxjiqDvYxVM8r35jcqq78fBhpsWU5ZfwmoYdnQK1VEw7bdm4ztiQ4xqE2YfFgUZKQYa OcgqVQyqe97Q5PpVsReqgaotK5B3phCwXqJJ8UokL78s6CLcewN2qe1OBtCJ4A4zBcEaD5SvC EjjrjMgGtbmtUJH9IdP66/uMlEMlQzPcPixXr2EeE6Hmyi/iDlDk417m/LfRTzwLYIBnbGANL JSl240Q/JTiMoj2SmoUWo40GRCmPU65XU4ggMAsrw+qK8OJyA2mJN9yRwPhcXrfp4JKFsGLyK xEkX2NrTnt65Xv8o/21ibuDSvmq4UJqyGC3G9tIGhx4fLuIRZyDOyk1OFzW/lebrexql18IJ6 MDu+eM8MscnPfv7Vbe6QYRCZjOgl+PSxcXbEuPAVXsbCgHiD9WTwcbNxfpBjydkzmZf8s1zd0 ZISn7potqpqZjwiIpq0lxfwmitTw1Kas3SJb833/JZOmo/KL9TW4oybtrYDXVjvsKvyniu2sQ Tn7S2dK8L/0DJ6xPUS0PKWJPlsdyhY4xX7sHssfmXN5koNyTZV+lH9yFXR+uqO5iM51xbtXjt Qy+cyX7tIB8DXmeGwCfobswlqAp0CRuAzCCMFh2E2ulszESnBBBXvPteX9nYojicR8aSD33kS P/cG4gsS6rZs6XWsIDJNPC2+sqDkXd7bWzpti+8mXI0zKiXe5+wq819bCckwVwJ3+nNY/6bTw E7wFQMwK8Y2lpAGf4M7+5mB6EQntuoO15Ix0gaBFam+N4rOlxLD73Rb+D7m5GangUUA1yp5V3 9/pV/7wUQnIgKPOg/ZcX8lcG+esc8DW4XL03YfyeHEqvRsuNkN/wCYK4REcGOh10iCextVQ3g B8ZZsbd3Lsj/i2FT75MgMjkC7CCsF/3j8l+cDaWbq0dsxngRLv2C5Qnxtb88yHhVqJqyOUyJl vDzgrZnBu9pkj7E4hh0CxbOQlSiiGMuTzAkdZ2UkZNhjTe2S6NeR5ABlYG0wnpzZu8OO1X6kr FFbho/YfHvNeihRV3xmOOxfhHQ3gVfkF1MiwB7sanAZsbbZ6j0CracCUwa2a3QJhzZjb2AYsp 5mmFoWyiE5hqXWNOrRxylO8/W4m42PM8DCCh8NKpTY9EZrNnBQ3SAQmGR1queqJ/Wmxz331w+ WWDon3GIFO8jIOMtqohANPUUADkZi2Zj05yMDLmEOxFWa0t+us1hzwNXWbKk5sVHeA1AYqk1H 0H+CAuZUq/7xjzSprLBQsCQ52GSYK5FtNywO6SpC0kW9tMJIOqTca9DRptx8TnVCaQzslHCoK uwx8Bo5AtTqfNl61kquOq9uopDY7hqERkLHeJvDF91O6JOv5o9gAXLBB/RTnJwwIGv1AOejG4 quM8oV8bPIE64WLv8yV+B2hwPItVoWHnkIqfEAsyAYYAtA4p21WquJ83GXyU5eL2sZvYuX3g1 GLaXPmzvYPY5hkJjl0kojTUmqJNsFiz/sZPUCJiUgPcLfbVLgbn/uGDODyE+VPeTJvA7lQSD/ UYH1PZKSED3+FsWTxaLA4a0FjxenJOq4570VLAJnh3c8XWHUmtiHs6R/c3XBu7jt/A2fbFyxe fao37zG36wfwsGlwdca4va1HuYo4i8NI/RWy2ALAYiHKi6IFrUi1LdUGrWgbB9HoUF4MwOluD wdz6HphBAYTPGnt3SUZnLXAz/5lt1lNiFWPXKnAqmdAwjTlK0rrfo7CBMmqtqsQyzjxuFLMLy PD7vWGlFueSkY8MOvvtzcZtdIfAYbf/Z5Xq4Kmk8xSrfZthMFAW2Gn/cZrQ4PlQGNFZzY0QHC QWMGhMyE1ZTa1f/yz+ITwrjGjziEXHUVgoJvWCX75u3k8wlyfGkZrMwwt4FtoJZQq5LhgRaAx PWoT1b36M8R7PeFothn5ikP1McPDHXBbVzPmKCWOMzrJkk9FBe9rftHLnxJzF9Dmu3KoecwuV +Wz+9Q1sMbLIejtMvRpBtyFJSRPmzfuw/tAD7Ydkz9y0S+WneD26yqP8QusB55IpVYsnIiTVm /ElDvI5MMhbiHSUNliWjZvOLuQooxFgnck6d+ukyoSvbaKS5Et2RyqtMDu/e0j102YftMAw3R RTtOSzl/qIpqTymhdyImLFKMArgCg5NJ7AHR2eLIH9rjt6UbUmdjBhX/MFDQXXRrlLtVXxk52 dJL9OiWq/Xay1GYdQZ3w4Oeroc+drdSWOLUajpCJoDlReEYpnF8wu+TScpGQA6vfN1EaS1MOE w1Eq1kxO12TogEr2wp0BSqsWHRI9QErex429yhyUqyfIiqX1ZF21XBCzlJUWNVOFmDXpDQlmg q10owW2AU/FB5V4jTf8BQyQL7H0ev5lKsEnaUWW8MaX1KrFWTjqBy4ZiSut132ie+WM/CA3Pb A/r5GGW/QJs6+7uE+9/e2UQ/+FdsWPq45J6c2x/NLv14F2Wj9lU4od7ZhyQr5KrGoThn+BUFI = 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 Sat Jul 25 02:35:47 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (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 857584248C1; Mon, 20 Jul 2026 13:26:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784553989; cv=none; b=cz4njmtSqDz8bU5H4xWGWrXVczSfiFLdpF1pFg8XFh5SKKSUHo29Mt3M8IckBeRiLYUP81DpdU6I6iENh1iF2gjYaVyv5LuRZa+9A6g1xovuY91gTFSPfA6yIZOFLMYXU1d/IfaNEVlSgS8VOdsq4rcjdj05TEZJcgIA3BNXc0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784553989; c=relaxed/simple; bh=tZ27laQVAQihCe7BybnluqHMgRInlj7iSf6L74STA/o=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lF561+XSwkfsHjkeOyAJlEpGY0nqbWyMWExaGjauWDNMlzoi8OeThn/A6tPaUsYstrbteE7V0fc2BIUtRx3aX5x6kA/nIry1/rixKL0dD7mDeVAyKw5NdoMY09mRc/ZmuYvHbFfzURpovzSRE6AJ2YFLHa9wJPrUqxA1dZOipx4= 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=EUAgwHNY; arc=none smtp.client-ip=212.227.17.22 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="EUAgwHNY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1784553982; x=1785158782; i=w_armin@gmx.de; bh=Ek8Pgdl012EG/8LBtHpp4va5zI8b8Sx/g+w8inTvl4c=; 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=EUAgwHNYoCiWXRBJ5yblp62IUZmFsT2XcVIid3abz5yR8Aw7bhhI7eKqFdbd2RKL yeQ/DBpSCU+Q/2v/NCeh5d/6lGYdXdffCXRSC6D3cVXsUjl91tj2YGNUrq8sHu6Mb QFIxUjcOBy/nc7xzp1fhfOezNCJca9qQbJilTb6BkF0G4cYUek2XSjKwS7CANaNTB msVhz/BD4PWb5cyeFWkyFRDYI5ZJqC1JccGyOTfIFwAiksOV9f2r7j3bcoz3Be9o3 trXVOlC0p8KwjIGm/VyMqe41/Lwr0OXMniyAdFkceFpyUiYeOsdci+txKLqwMBlkW JEVQBF4UTgXyjUTgiQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N3se8-1xCNIs0yjA-0136TQ; Mon, 20 Jul 2026 15:26:22 +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 v4 2/2] platform/x86: uniwill-laptop: Remove single color keyboard detection Date: Mon, 20 Jul 2026 15:26:11 +0200 Message-Id: <20260720132611.374073-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260720132611.374073-1-W_Armin@gmx.de> References: <20260720132611.374073-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:G9hSr2lVNSMqRZAVYHuuYHombaXsaaXrOIgFi7QtMQB6kQcazal /yjtbRV3/f9Qw9/sCy/+zk7VjZD3X/i5Fw1vZd4NeRyKWhF3jeFI+EZiM6XcfR+EMlIxGkE kowlEuhFC2tXiGYoLmgida4dTP9Dg8YLsMMCB2Ljax+ocKYLUEDwYe0iexVASLqT14bGyfQ zO3EEZeyZ/q99ebGX4ZCQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:jy1ZOqpix+A=;r/kjufavl1hcKrwI1qGJyzZbFh3 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 StwgElFJ4nil 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 infrastructure instead. Suggested-by: Werner Sembach Reviewed-by: Werner Sembach Signed-off-by: Armin Wolf --- 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..7a2eeaec4c96 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 on some models, use the device descriptor instead. */ #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