From nobody Sat Sep 26 02:00:39 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 DDC722D46CE; Sat, 5 Sep 2026 13:01:44 +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=1788613307; cv=none; b=T4oej5bF8LfmoW/mvjSxyLN7Wks+aC4aR7H4eJplfi7uK6Alx4DXYkNOZNaw2MItxBThqm0SKpAfwgHyru8mE5JrLdLU1uppSpTTQcmaZE/eHG18IVWcdQlL1vCktOcoznoO0BWQw8F9Pkfl2FZjMhdN8tlP86Gn8Ig0RAeuhZA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788613307; c=relaxed/simple; bh=a/y4FY7r98UDLIkJ30GnvkmG46k/+IjJfmz+yRq4kpY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=U676d4A499BagzCCpr+BrL1DoGGLgl4M36Awnvql7/G4e2OvRsap1MSzVVByXZvLUxZTRD+nkwVmyCTD++aFMT4jUCIBDGfDMT9pMsyqaeMUlRZ/wYHT031gmdRHC7em6T5lxaUfjDMiqbQYbiKZ0rvKUyjPnfJQrP1wY8WX1Co= 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=I/g0OLnn; 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="I/g0OLnn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1788613302; x=1789218102; i=w_armin@gmx.de; bh=PCGcQUqfbxmWCti49lk5irnoLG1UcnlVocDxAGoj8LE=; 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=I/g0OLnniqOvEO2rH/eishKWX12YwcCx33YYYG6x5D+hTThFqUdP/+2hSypfm9yP 4SSOHx7u6ePodFU/Vfe9Ow5Z7prub6fUMyirJETOE/uTJ+1rX9Z1FmAnLaxPfjlcm iuMchWzf4+HDfztre2EGcVr17x5PjMDhadcsh2J0Oo272p4sxyA/9CbMHPGAs5+Nb 2SNbbF1cKpjPWsnMVX8jCmcLRhWszLAIq2vH9u484kZlkvJX3C+OETb7zA7TpGNwu flY3Ka70jmIATJqfWpDH09GkROW28OA2NnD0T0coZ2kdFRfFSx+wm9E6y8HlAoI16 lm5OTgQRCtXJCv4+nA== 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 1MLiCo-1xKVR01be4-00JoUW; Sat, 05 Sep 2026 15:01:42 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: wse@tuxedocomputers.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/5] platform/x86: uniwill-laptop: Report correct lightbar brightness Date: Sat, 5 Sep 2026 15:01:34 +0200 Message-Id: <20260905130138.6814-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260905130138.6814-1-W_Armin@gmx.de> References: <20260905130138.6814-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:Ym/UO9GwHX7m6A7JBEdgWRutH+05otoHfUeyvq4IqC59lYvm7wG Z/7DMIZUmuSCEbXiEwhLxk0Xq8RNqpczvDdbNWfsFA71Fbk9J6PbKMgfTeQcP0KakDRTI7g 6/X1/o1foRaKP/YLazoahwxCAR99N7q+GCyBEdFuy5E7Tw+3BqMXw6qIINtLNn0ITqRiWYp qpoQOPIiIHhChhN0Dculw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:QX9zGt7pyms=;qV9l0xGa+ekOFwwbhV97tBA6woT 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 Content-Type: text/plain; charset="utf-8" The LED sysfs ABI now allows us to specify the maximum values for the global brightness and the color intensity values independently. At the same time the maximum brightness value reported for the lightbar (like 200) does not match the real value supported by the hardware (1), potentially confusing users. Report the correct maximum brightness value and only use the intensity values for controlling the lightbar color. Signed-off-by: Armin Wolf --- drivers/platform/x86/uniwill/uniwill-acpi.c | 35 ++++++++++----------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 7a2eeaec4c96..7420e1dd4716 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -398,7 +398,7 @@ struct uniwill_data { struct mutex super_key_lock; /* Protects the toggling of the super key lo= ck state */ struct list_head batteries; struct mutex led_lock; /* Protects writes to the lightbar registers */ - u8 lightbar_max_brightness; + u8 lightbar_max_intensity; struct led_classdev_mc led_mc_cdev; struct mc_subled led_mc_subled_info[LED_CHANNELS]; bool kbd_led_single_color; @@ -429,7 +429,7 @@ struct uniwill_device_descriptor { unsigned int features; bool kbd_led_single_color; u8 kbd_led_max_brightness; - u8 lightbar_max_brightness; + u8 lightbar_max_intensity; /* Executed during driver probing */ int (*probe)(struct uniwill_data *data); }; @@ -1509,20 +1509,16 @@ static int uniwill_led_brightness_set(struct led_cl= assdev *led_cdev, enum led_br unsigned int value; int ret; =20 - ret =3D led_mc_calc_color_components(led_mc_cdev, brightness); - if (ret < 0) - return ret; - guard(mutex)(&data->led_lock); =20 for (int i =3D 0; i < LED_CHANNELS; i++) { - /* Prevent the brightness values from overflowing */ - value =3D min(data->lightbar_max_brightness, data->led_mc_subled_info[i]= .brightness); - ret =3D regmap_write(data->regmap, uniwill_led_channel_to_ac_reg[i], val= ue); + ret =3D regmap_write(data->regmap, uniwill_led_channel_to_ac_reg[i], + data->led_mc_subled_info[i].intensity); if (ret < 0) return ret; =20 - ret =3D regmap_write(data->regmap, uniwill_led_channel_to_bat_reg[i], va= lue); + ret =3D regmap_write(data->regmap, uniwill_led_channel_to_bat_reg[i], + data->led_mc_subled_info[i].intensity); if (ret < 0) return ret; } @@ -1586,14 +1582,14 @@ static int uniwill_led_init(struct uniwill_data *da= ta) return ret; =20 data->led_mc_cdev.led_cdev.color =3D LED_COLOR_ID_MULTI; - data->led_mc_cdev.led_cdev.max_brightness =3D data->lightbar_max_brightne= ss; + data->led_mc_cdev.led_cdev.max_brightness =3D 1; data->led_mc_cdev.led_cdev.flags =3D LED_REJECT_NAME_CONFLICT; data->led_mc_cdev.led_cdev.brightness_set_blocking =3D uniwill_led_bright= ness_set; =20 if (value & LIGHTBAR_S0_OFF) data->led_mc_cdev.led_cdev.brightness =3D 0; else - data->led_mc_cdev.led_cdev.brightness =3D data->lightbar_max_brightness; + data->led_mc_cdev.led_cdev.brightness =3D 1; =20 for (int i =3D 0; i < LED_CHANNELS; i++) { data->led_mc_subled_info[i].color_index =3D color_indices[i]; @@ -1604,9 +1600,9 @@ static int uniwill_led_init(struct uniwill_data *data) =20 /* * Make sure that the initial intensity value is not greater than - * the maximum brightness. + * the maximum intensity. */ - value =3D min(data->lightbar_max_brightness, value); + value =3D min(data->lightbar_max_intensity, value); ret =3D regmap_write(data->regmap, uniwill_led_channel_to_ac_reg[i], val= ue); if (ret < 0) return ret; @@ -1616,6 +1612,7 @@ static int uniwill_led_init(struct uniwill_data *data) return ret; =20 data->led_mc_subled_info[i].intensity =3D value; + data->led_mc_subled_info[i].max_intensity =3D data->lightbar_max_intensi= ty; data->led_mc_subled_info[i].channel =3D i; } =20 @@ -2338,7 +2335,7 @@ static int uniwill_probe(struct platform_device *pdev) 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; + data->lightbar_max_intensity =3D device_descriptor.lightbar_max_intensity; =20 /* * Some devices might need to perform some device-specific initialization= steps @@ -2685,7 +2682,7 @@ static struct uniwill_device_descriptor lapqc71a_lapq= c71b_descriptor __initdata UNIWILL_FEATURE_GPU_TEMP | UNIWILL_FEATURE_PRIMARY_FAN | UNIWILL_FEATURE_SECONDARY_FAN, - .lightbar_max_brightness =3D 36, + .lightbar_max_intensity =3D 36, }; =20 static struct uniwill_device_descriptor lapac71h_descriptor __initdata =3D= { @@ -2709,7 +2706,7 @@ static struct uniwill_device_descriptor lapkc71f_desc= riptor __initdata =3D { UNIWILL_FEATURE_GPU_TEMP | UNIWILL_FEATURE_PRIMARY_FAN | UNIWILL_FEATURE_SECONDARY_FAN, - .lightbar_max_brightness =3D 200, + .lightbar_max_intensity =3D 200, }; =20 /* @@ -3355,8 +3352,8 @@ static int __init uniwill_init(void) 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 */ - device_descriptor.lightbar_max_brightness =3D 200; + /* Some models only support 36 intensity levels per color component */ + device_descriptor.lightbar_max_intensity =3D 200; pr_warn("Enabling potentially unsupported features\n"); } =20 --=20 2.39.5 From nobody Sat Sep 26 02:00:39 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 0CA3E2DE6E3; Sat, 5 Sep 2026 13:01:51 +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=1788613325; cv=none; b=iB+9IcUFdcV6iRUo5jBXS5pb6y6vf3m8si1gXLZGSywXfH4fTODPBuwu1NVwrG2kUpLzj5xKogC3h7F2628c6Y2T5PeK423p3YJVaqPPsP5QqpExuQ2P3+2ROhihfrS04rEvqgMXFetXDIInfr+evjKrbNtgptwaGgiiVvEGfc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788613325; c=relaxed/simple; bh=g06xaQ8xvm4EQ20S7Tllh38C/jFvg/71HQaQ1eDACAQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=X9TiPKX02z8vZi8g6k9Xrs7gB6lOARE2mSbYZQQa1m84gwZeGMUPB+FdFbEUO7CdI58oZjI5VU9UCEivQ69n5qy/QM9fpNOi4Lm6uMoK8lkdoUeslgFaUFFdIi7Lj545pLcZCWo4SJK+ztE7CXHuwl4kiBPYspJRmRwG3kdMvTc= 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=gVhguFDM; 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="gVhguFDM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1788613303; x=1789218103; i=w_armin@gmx.de; bh=B/7ouJJkrzZcGpQRunLPQw3V5qhIWLeldblv/9lpywM=; 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=gVhguFDM58QDVCwqGjOAQzvfIM9LHRjtkiKxo1mseFEgYoIVVm/li+o7QF1xUSEH Ez7nuJv9pHwpEFG+nDABAt2vTuAbn3GbwBtxNOMgMym7F3p9lwnDS44aj8S/Sh45L GGzG5pzftZlgTmVRoQvQ1FDg/35JapH7Qa1Y1tZrLyN/6EUxBL8An4zPDT45r72eH vmu+DQ+WM9jo7CVmQNkrj9Dc2h5pcNQ20Vws1Ax/tf6v9OLKOUwc9zP+pr0pPdgwF q7xc2fXdtRW3CtW4Q5aFxl8WEYQQD49/nIYXzmY6ZdECgPBe/5GpjHV9BQN8hQ1ks GP8/6CLliaxZqKu+hA== 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 1MhD6W-1wPuMu3l7y-00gYNS; Sat, 05 Sep 2026 15:01:42 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: wse@tuxedocomputers.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/5] platform/x86: uniwill-laptop: Implement rainbow animation as trigger Date: Sat, 5 Sep 2026 15:01:35 +0200 Message-Id: <20260905130138.6814-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260905130138.6814-1-W_Armin@gmx.de> References: <20260905130138.6814-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:OVJ824pQ3+fRu91sRajupWAjRBaZECTYkXvzB3i9oqsSnrljDgI GrM7HM+dwjJ0BKagmcW19uwL2Jbn2FsB9pyPZPMcPZCOtKvC2n/N+j6HlZw5yky8sDYpZrx ZtrFu2EhTs5c6sGXLAEloQrWMb3w92FHigUWNhMyh2SZ5utb2o4+IHdple5Ojz/gyd3eeR3 ePC4VW7QRD25O77c+jNIA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:/uacXTay8po=;rQ75ZaaHNbxDYOPQ0Jqmgz7jE0u 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 UNJpSLIXmQzZKBn0S4tzIhyPc+6O6vUe3KA== Content-Type: text/plain; charset="utf-8" It turns out that some models require the lightbar to be activated in order to display the rainbow animation, so users have to access both the "rainbow_animation" sysfs attribute and the LED sysfs interface when enabling the rainbow animation. This can cause short glitches when the lightbar was previously disabled. Fix this by replacing the sysfs attribute with a custom LED trigger called "uniwill-rainbow". Selecting this trigger will atomically activate the lightbar and enable the rainbow animation mode. This can potentially break userspace applications using the old sysfs attribute, but so far no such application is known to exist (yet). Signed-off-by: Armin Wolf --- .../ABI/removed/sysfs-driver-uniwill-laptop | 10 ++ .../ABI/testing/sysfs-driver-uniwill-laptop | 11 -- .../admin-guide/laptops/uniwill-laptop.rst | 5 +- MAINTAINERS | 1 + drivers/platform/x86/uniwill/Kconfig | 1 + drivers/platform/x86/uniwill/uniwill-acpi.c | 133 +++++++++++------- 6 files changed, 95 insertions(+), 66 deletions(-) create mode 100644 Documentation/ABI/removed/sysfs-driver-uniwill-laptop diff --git a/Documentation/ABI/removed/sysfs-driver-uniwill-laptop b/Docume= ntation/ABI/removed/sysfs-driver-uniwill-laptop new file mode 100644 index 000000000000..c226efc23b59 --- /dev/null +++ b/Documentation/ABI/removed/sysfs-driver-uniwill-laptop @@ -0,0 +1,10 @@ +What: /sys/bus/platform/devices/INOU0000:XX/rainbow_animation +Date: November 2025 +KernelVersion: 6.19 +Contact: Armin Wolf +Description: + Forces the integrated lightbar to display a rainbow animation when the m= achine + is not suspended. Writing "1"/"0" into this file enables/disables this + functionality. + + Reading this file returns the current status of the rainbow animation fu= nctionality. diff --git a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop b/Docume= ntation/ABI/testing/sysfs-driver-uniwill-laptop index 943f92c6b561..b9b9feebe2ed 100644 --- a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop +++ b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop @@ -29,17 +29,6 @@ Description: Reading this file returns the current enable status of the touchpad togg= le functionality. =20 -What: /sys/bus/platform/devices/INOU0000:XX/rainbow_animation -Date: November 2025 -KernelVersion: 6.19 -Contact: Armin Wolf -Description: - Forces the integrated lightbar to display a rainbow animation when the m= achine - is not suspended. Writing "1"/"0" into this file enables/disables this - functionality. - - Reading this file returns the current status of the rainbow animation fu= nctionality. - What: /sys/bus/platform/devices/INOU0000:XX/breathing_in_suspend Date: November 2025 KernelVersion: 6.19 diff --git a/Documentation/admin-guide/laptops/uniwill-laptop.rst b/Documen= tation/admin-guide/laptops/uniwill-laptop.rst index be50b45b82ef..aaf50e3074c1 100644 --- a/Documentation/admin-guide/laptops/uniwill-laptop.rst +++ b/Documentation/admin-guide/laptops/uniwill-laptop.rst @@ -74,8 +74,9 @@ Lightbar The ``uniwill-laptop`` driver exposes the lightbar found on some models as= a standard multicolor LED class device. The default name of this LED class device is ``uniwill:m= ulticolor:status``. =20 -See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details on h= ow to control the various -animation modes of the lightbar. +The lightbar supports a separate rainbow animation mode that can be enable= d by selecting the +`uniwill-rainbow` LED trigger. To enable a breathing animation during susp= end, see +Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details. =20 Keyboard Backlight ------------------ diff --git a/MAINTAINERS b/MAINTAINERS index 3a19da74d00c..a3e25d111203 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -28107,6 +28107,7 @@ UNIWILL LAPTOP DRIVER M: Armin Wolf L: platform-driver-x86@vger.kernel.org S: Maintained +F: Documentation/ABI/removed/sysfs-driver-uniwill-laptop F: Documentation/ABI/testing/sysfs-driver-uniwill-laptop F: Documentation/admin-guide/laptops/uniwill-laptop.rst F: Documentation/wmi/devices/uniwill-laptop.rst diff --git a/drivers/platform/x86/uniwill/Kconfig b/drivers/platform/x86/un= iwill/Kconfig index d07cc8440188..f80794bdfaef 100644 --- a/drivers/platform/x86/uniwill/Kconfig +++ b/drivers/platform/x86/uniwill/Kconfig @@ -28,6 +28,7 @@ config UNIWILL_LAPTOP depends on DMI select REGMAP select INPUT_SPARSEKMAP + select LEDS_TRIGGERS help This driver adds support for various extra features found on Uniwill la= ptops, like the lightbar, hwmon sensors and hotkeys. It also supports many OEM= laptops diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 7420e1dd4716..6366171c6981 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -898,51 +898,6 @@ static ssize_t touchpad_toggle_enable_show(struct devi= ce *dev, struct device_att =20 static DEVICE_ATTR_RW(touchpad_toggle_enable); =20 -static ssize_t rainbow_animation_store(struct device *dev, struct device_a= ttribute *attr, - const char *buf, size_t count) -{ - struct uniwill_data *data =3D dev_get_drvdata(dev); - unsigned int value; - bool enable; - int ret; - - ret =3D kstrtobool(buf, &enable); - if (ret < 0) - return ret; - - if (enable) - value =3D LIGHTBAR_WELCOME; - else - value =3D 0; - - guard(mutex)(&data->led_lock); - - ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_AC_CTRL, LIGHTB= AR_WELCOME, value); - if (ret < 0) - return ret; - - ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_BAT_CTRL, LIGHT= BAR_WELCOME, value); - if (ret < 0) - return ret; - - return count; -} - -static ssize_t rainbow_animation_show(struct device *dev, struct device_at= tribute *attr, char *buf) -{ - struct uniwill_data *data =3D dev_get_drvdata(dev); - unsigned int value; - int ret; - - ret =3D regmap_read(data->regmap, EC_ADDR_LIGHTBAR_AC_CTRL, &value); - if (ret < 0) - return ret; - - return sysfs_emit(buf, "%d\n", !!(value & LIGHTBAR_WELCOME)); -} - -static DEVICE_ATTR_RW(rainbow_animation); - static ssize_t breathing_in_suspend_store(struct device *dev, struct devic= e_attribute *attr, const char *buf, size_t count) { @@ -1256,7 +1211,6 @@ static struct attribute *uniwill_attrs[] =3D { &dev_attr_super_key_enable.attr, &dev_attr_touchpad_toggle_enable.attr, /* Lightbar-related */ - &dev_attr_rainbow_animation.attr, &dev_attr_breathing_in_suspend.attr, /* Power-management-related */ &dev_attr_ctgp_offset.attr, @@ -1286,8 +1240,7 @@ static umode_t uniwill_attr_is_visible(struct kobject= *kobj, struct attribute *a return attr->mode; } =20 - if (attr =3D=3D &dev_attr_rainbow_animation.attr || - attr =3D=3D &dev_attr_breathing_in_suspend.attr) { + if (attr =3D=3D &dev_attr_breathing_in_suspend.attr) { if (uniwill_device_supports(data, UNIWILL_FEATURE_LIGHTBAR)) return attr->mode; } @@ -1535,6 +1488,59 @@ static int uniwill_led_brightness_set(struct led_cla= ssdev *led_cdev, enum led_br return regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_BAT_CTRL, LIGHTB= AR_S0_OFF, value); } =20 +static int uniwill_led_hw_control_set(struct led_classdev *led_cdev, unsig= ned long flags) +{ + struct led_classdev_mc *led_mc_cdev =3D lcdev_to_mccdev(led_cdev); + struct uniwill_data *data =3D container_of(led_mc_cdev, struct uniwill_da= ta, led_mc_cdev); + unsigned int value; + int ret; + + guard(mutex)(&data->led_lock); + + if (flags) + value =3D LIGHTBAR_WELCOME; + else + value =3D LIGHTBAR_S0_OFF; + + ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_AC_CTRL, + LIGHTBAR_S0_OFF | LIGHTBAR_WELCOME, value); + if (ret < 0) + return ret; + + ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_BAT_CTRL, + LIGHTBAR_S0_OFF | LIGHTBAR_WELCOME, value); + if (ret < 0) + return ret; + + /* The LED is always on during hw control */ + led_cdev->brightness =3D flags; + + return 0; +} + +static int uniwill_lightbar_trigger_activate(struct led_classdev *led_cdev) +{ + return led_cdev->hw_control_set(led_cdev, 1); +} + +static void uniwill_lightbar_trigger_deactivate(struct led_classdev *led_c= dev) +{ + int ret; + + ret =3D led_cdev->hw_control_set(led_cdev, 0); + if (ret < 0) + dev_err(led_cdev->dev, "Failed to stop rainbow animation: %d\n", ret); +} + +static struct led_hw_trigger_type uniwill_lightbar_trigger_type; + +static struct led_trigger uniwill_lightbar_trigger =3D { + .name =3D "uniwill-rainbow", + .activate =3D uniwill_lightbar_trigger_activate, + .deactivate =3D uniwill_lightbar_trigger_deactivate, + .trigger_type =3D &uniwill_lightbar_trigger_type, +}; + #define LIGHTBAR_MASK (LIGHTBAR_APP_EXISTS | LIGHTBAR_S0_OFF | LIGHTBAR_S3= _OFF | LIGHTBAR_WELCOME) =20 static int uniwill_led_init(struct uniwill_data *data) @@ -1585,12 +1591,18 @@ static int uniwill_led_init(struct uniwill_data *da= ta) data->led_mc_cdev.led_cdev.max_brightness =3D 1; data->led_mc_cdev.led_cdev.flags =3D LED_REJECT_NAME_CONFLICT; data->led_mc_cdev.led_cdev.brightness_set_blocking =3D uniwill_led_bright= ness_set; + data->led_mc_cdev.led_cdev.trigger_type =3D &uniwill_lightbar_trigger_typ= e; + data->led_mc_cdev.led_cdev.hw_control_trigger =3D uniwill_lightbar_trigge= r.name; + data->led_mc_cdev.led_cdev.hw_control_set =3D uniwill_led_hw_control_set; =20 if (value & LIGHTBAR_S0_OFF) data->led_mc_cdev.led_cdev.brightness =3D 0; else data->led_mc_cdev.led_cdev.brightness =3D 1; =20 + if (value & LIGHTBAR_WELCOME) + data->led_mc_cdev.led_cdev.default_trigger =3D uniwill_lightbar_trigger.= name; + for (int i =3D 0; i < LED_CHANNELS; i++) { data->led_mc_subled_info[i].color_index =3D color_indices[i]; =20 @@ -3357,17 +3369,31 @@ static int __init uniwill_init(void) pr_warn("Enabling potentially unsupported features\n"); } =20 - ret =3D platform_driver_register(&uniwill_driver); + /* + * We cannot register the trigger inside the .probe callback of the + * platform driver, because each trigger needs a unique name. + */ + ret =3D led_trigger_register(&uniwill_lightbar_trigger); if (ret < 0) return ret; =20 + ret =3D platform_driver_register(&uniwill_driver); + if (ret < 0) + goto err_platform; + ret =3D uniwill_wmi_register_driver(); - if (ret < 0) { - platform_driver_unregister(&uniwill_driver); - return ret; - } + if (ret < 0) + goto err_wmi; =20 return 0; + +err_wmi: + platform_driver_unregister(&uniwill_driver); + +err_platform: + led_trigger_unregister(&uniwill_lightbar_trigger); + + return ret; } module_init(uniwill_init); =20 @@ -3375,6 +3401,7 @@ static void __exit uniwill_exit(void) { uniwill_wmi_unregister_driver(); platform_driver_unregister(&uniwill_driver); + led_trigger_unregister(&uniwill_lightbar_trigger); } module_exit(uniwill_exit); =20 --=20 2.39.5 From nobody Sat Sep 26 02:00:39 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 02A952F7F05; Sat, 5 Sep 2026 13:01:45 +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=1788613309; cv=none; b=KuQc4JCgTzLmhPmi1tnI9LTFZYUt7gj+kDVv6VGtjUM1CCFLCndIij6emvsyb91u/mRjM7LUkrx6K9M1+zjyGYo3dCjrsEZyNwIMK6ZCmhCtjqlIujCYCtj/RDj6B3KBO7oyfDrfKCxHt1K7Tbg/G3WwvdNz9gMcBt6jukH6Uxk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788613309; c=relaxed/simple; bh=c5REbVzfyRJwduh2TutF9/dVYciNpxZ1RjRhIWA+7uo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=D5XZvXXZusA4347YmcbGpmOT2FA1yuhHKHKLRRSwWIf11/SbKV0adsLdyluWVZ21cwlUaHBIBSs7SDVErgvjWKLh12Nl5XSlC0oNbEecyQ9h2U+7Ge4anlvJQVwGyk6CLIZp22GH1FqzyzZ437RX+9U9oGvyVogiOyqV20Y3lxQ= 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=m2Nqd+vO; 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="m2Nqd+vO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1788613303; x=1789218103; i=w_armin@gmx.de; bh=yQJafxE1vbbjSzN9HFLukGe70/IWuuM3JXP3kwOrQGo=; 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=m2Nqd+vO9k6v2jO4uxiSWSZjcoFKLMWAZ5Xz0oK040YiQdA8S9Y/j3segFe7sxFH ykziONKrCsE1eyD9NDepBCt2/IKeuy+zUK+EJh3UtJwpJ3zOA3Prpig0kTzj3TEBb 6xWLbZ4YdMjaL3cJ2X9BUcJuM8U8ftFrf+izm3e0fq7CXkt+190BJjP3UnMw4MRZt BosK0Hk1/6nFof13ewIQqVafIFxF2QrJWnJXUQarfiyGud6rNlppeF5xJB591hU+O I5XAW1OPpxbaEC/xRQlepBMwqsSgfJS+kYv1ZMMhCQX9k6zuwHEFQ6Uk2HUQSHpO9 qHFdyvI5SiVlQ7kZMA== 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 1MNKhs-1xERgr2VSc-00QD85; Sat, 05 Sep 2026 15:01:43 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: wse@tuxedocomputers.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/5] platform/x86: uniwill-laptop: Fix breathing animation on Intel QC Date: Sat, 5 Sep 2026 15:01:36 +0200 Message-Id: <20260905130138.6814-4-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260905130138.6814-1-W_Armin@gmx.de> References: <20260905130138.6814-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:aMvDEtZ3VvZj3YFQttVJXPZ5wDE8kKW96xDI9fTth8Swfp56P8N rz2vkVyJTK1ivoA7tRGUBht6vTZAzS5Iy+Yq7bay7bgS2ESjDHBWBt6cjvtSLlLCUUtEIYJ 7Xb1RfrxsgvjBgf284Ls1NvfhBUIpIaQkpS4RlKLU3SKo2nTQq7qlvVhjUM234YadZcvElo f6hXfX5KNe7H6TLhClXAg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:FQUlYyVC3SI=;NFJKSPtK36stbOlM4kbhQ69EjN8 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 Content-Type: text/plain; charset="utf-8" Intel NUC 9 Extreme (Queens County) devices have a separate bit inside the EC_ADDR_LIGHTBAR_AC:CTRL register for enabling the breathing animation in s2idle mode. Add support for this additional setting. Signed-off-by: Armin Wolf --- .../ABI/testing/sysfs-driver-uniwill-laptop | 4 +-- drivers/platform/x86/uniwill/uniwill-acpi.c | 27 ++++++++++++++----- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop b/Docume= ntation/ABI/testing/sysfs-driver-uniwill-laptop index b9b9feebe2ed..f3060aaf8a76 100644 --- a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop +++ b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop @@ -35,8 +35,8 @@ KernelVersion: 6.19 Contact: Armin Wolf Description: Causes the integrated lightbar to display a breathing animation when the= machine - has been suspended and is running on AC power. Writing "1"/"0" into this= file - enables/disables this functionality. + has been suspended, is running on AC power and the lightbar brightness n= ot zero. + Writing "1"/"0" into this file enables/disables this functionality. =20 Reading this file returns the current status of the breathing animation functionality. diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 6366171c6981..e527ed7461c3 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -165,9 +165,10 @@ #define EC_ADDR_LIGHTBAR_AC_CTRL 0x0748 #define LIGHTBAR_APP_EXISTS BIT(0) #define LIGHTBAR_POWER_SAVE BIT(1) -#define LIGHTBAR_S0_OFF BIT(2) -#define LIGHTBAR_S3_OFF BIT(3) // Breathing animation when suspended -#define LIGHTBAR_WELCOME BIT(7) // Rainbow animation +#define LIGHTBAR_S0_OFF BIT(2) /* Also disables animations */ +#define LIGHTBAR_S3_OFF BIT(3) /* No breathing animation when in s2ram */ +#define LIGHTBAR_MODERN_STANDBY_ON BIT(6) /* Breathing animation when in s= 2idle */ +#define LIGHTBAR_WELCOME BIT(7) /* Rainbow animation */ =20 #define EC_ADDR_LIGHTBAR_AC_RED 0x0749 =20 @@ -306,7 +307,7 @@ #define EC_ADDR_USB_C_POWER_PRIORITY 0x07CC #define USB_C_POWER_PRIORITY BIT(7) =20 -/* Same bits as EC_ADDR_LIGHTBAR_AC_CTRL except LIGHTBAR_S3_OFF */ +/* Same bits as EC_ADDR_LIGHTBAR_AC_CTRL except LIGHTBAR_S3_OFF and LIGHTB= AR_MODERN_STANDBY_ON */ #define EC_ADDR_LIGHTBAR_BAT_CTRL 0x07E2 =20 #define EC_ADDR_LIGHTBAR_BAT_RED 0x07E3 @@ -911,12 +912,13 @@ static ssize_t breathing_in_suspend_store(struct devi= ce *dev, struct device_attr return ret; =20 if (enable) - value =3D 0; + value =3D LIGHTBAR_MODERN_STANDBY_ON; else value =3D LIGHTBAR_S3_OFF; =20 /* We only access a single register here, so we do not need to use data->= led_lock */ - ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_AC_CTRL, LIGHTB= AR_S3_OFF, value); + ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_AC_CTRL, + LIGHTBAR_S3_OFF | LIGHTBAR_MODERN_STANDBY_ON, value); if (ret < 0) return ret; =20 @@ -934,6 +936,10 @@ static ssize_t breathing_in_suspend_show(struct device= *dev, struct device_attri if (ret < 0) return ret; =20 + /* + * We only test LIGHTBAR_S3_OFF here, because LIGHTBAR_MODERN_STANDBY_ON + * should have the exact opposite value. + */ return sysfs_emit(buf, "%d\n", !(value & LIGHTBAR_S3_OFF)); } =20 @@ -1541,7 +1547,8 @@ static struct led_trigger uniwill_lightbar_trigger = =3D { .trigger_type =3D &uniwill_lightbar_trigger_type, }; =20 -#define LIGHTBAR_MASK (LIGHTBAR_APP_EXISTS | LIGHTBAR_S0_OFF | LIGHTBAR_S3= _OFF | LIGHTBAR_WELCOME) +#define LIGHTBAR_MASK (LIGHTBAR_APP_EXISTS | LIGHTBAR_S0_OFF | LIGHTBAR_S3= _OFF | \ + LIGHTBAR_MODERN_STANDBY_ON | LIGHTBAR_WELCOME) =20 static int uniwill_led_init(struct uniwill_data *data) { @@ -1574,6 +1581,11 @@ static int uniwill_led_init(struct uniwill_data *dat= a) return ret; =20 value |=3D LIGHTBAR_APP_EXISTS; + if (value & LIGHTBAR_S3_OFF) + value &=3D ~LIGHTBAR_MODERN_STANDBY_ON; + else + value |=3D LIGHTBAR_MODERN_STANDBY_ON; + ret =3D regmap_write(data->regmap, EC_ADDR_LIGHTBAR_AC_CTRL, value); if (ret < 0) return ret; @@ -1583,6 +1595,7 @@ static int uniwill_led_init(struct uniwill_data *data) * running on battery power. */ value |=3D LIGHTBAR_S3_OFF; + value &=3D ~LIGHTBAR_MODERN_STANDBY_ON; ret =3D regmap_update_bits(data->regmap, EC_ADDR_LIGHTBAR_BAT_CTRL, LIGHT= BAR_MASK, value); if (ret < 0) return ret; --=20 2.39.5 From nobody Sat Sep 26 02:00:39 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (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 0396F33B6FC; Sat, 5 Sep 2026 13:01:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788613316; cv=none; b=LpK3JimKFWK9KbcntYbwtkHYPCRW41JV4tE6Cq33Bi2tXItiLNk8LFzncfc6S2daE3LjxY43mOR+LL6eFh/LTVkLUFLwDafn443xRITJcqPqXJf0Kridq49fGGJBX3/Jfwr5eEtLfFtnBJZqcWdNZz+PSNrZ6g0VT9vLTbCCIyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788613316; c=relaxed/simple; bh=Hz4SqLdtwt/c7MIdIVuRVUAvUWg4XE+OonNNKfq67DM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GK8AM7Jd3/GWQaPY+Q9HtkAATolXc3ukLxOEEK8joFNuz+d16pN1gh2mzdCcQjCLnKCsyJBNMe1P+NJVVOJ/1z9TSKleXw3eUR0p+AzeLAHI3q22bVIKK1/UeOJklldvHKN1l8kPppZHTVKCf8EzhrJh/54YKP+3A7sw+7yi3vk= 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=guasex9e; arc=none smtp.client-ip=212.227.15.15 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="guasex9e" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1788613304; x=1789218104; i=w_armin@gmx.de; bh=8XQ+M2DDSW5Xlpd+r6N5pwARPqksaKG1chuysndIQgw=; 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=guasex9eE+ydh88tkHPRXwhVTRdVgqLja590hLYBzariveIpo8zySKk3uOPjb8r/ vXecIXskgF+oa2Dp0zDmDPIjMGCaUjKMfq0UrQPn1ugHh+0QGWGp7ib5pONgu8hy7 1BLoQVz5mXD/tGvBfxOasis81XiHgKG6sC6zipuHJSYENLmVQD8g34rMEfoIYBQxK AQxKGqglPvJMph8NUWme7Tmr4euNChwZIB1j9+no985S+hPeuI3jKARILwkVp+ACa dBZOSWEKW9Mn47+hWjluwxbA7UU6Tp4ujjmuO7GYLiFqK8betq6RMOksYd9sq5FZj CTcZRlOIajRC93JeBg== 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 1N2E1M-1wrXWw10Oc-011Rza; Sat, 05 Sep 2026 15:01:44 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: wse@tuxedocomputers.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/5] platform/x86: uniwill-laptop: Label multicolor LEDs correctly Date: Sat, 5 Sep 2026 15:01:37 +0200 Message-Id: <20260905130138.6814-5-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260905130138.6814-1-W_Armin@gmx.de> References: <20260905130138.6814-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:daw/24kcOlblx242LKi24J4xcmc+7h1gCP0ZkAXT2i3N0vl5+Hz TcO0HUKPdm0SkQpzfYoo+96b3os5TFX1Rw6MPNe1FNP0DQM0pbCgNwTRpGWWOw9QMROqC2T tC7CKQEzM7NB82Ut1T2ny6+1gfFIlVc21mRzpZ6DzV4SElUxD86hZnli5d9hB+CGJWyFd4f ardqjwR5MpnEQFE62sAsg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:9UljdnIbBHc=;wqXcHyUoDnu0NpynZpOJ6yQ/uvt 4nneZKfLPSBBfasK2nrT3LSBYX+YrQRtp9hjypUw6euTptvIIOcK0eyAQqQLGbUa7XUHPOHRy cM5QE/nyolCA6eHGQLq2GmAQ9dHwbWErmNDBUCqcY26NgaNFCHHDxssszzd3P50lOY1rqu4Cg onyNklmayVjGFpxhx338v16zc/kZIyOyK03Hg6LrJv/4Y/5G6zK3OnKO2rVwXJdcW32qOE7XU Gg7T6M/JSFGQixLvxREq/Y0hQ3yHpnxxkz2jPy9lKtDDBU8UO4+g0mfskGLc9/mCmyRmzmbwV V6oElYUuXFYErLE7FShOEDET2Vu4KXjoJ8+Jz/LNZxWJBX/brdoHBjWk8xtgE98bviJGC/BRM uqjZy9y6DwMxzdWFaPpCFYxVLAFhB4RKh5+nKmFHM6YFhyHAiWwWmg6L8GuAwrFSRQRpeu4nI /l/eIVQwDiObMquQBkwZeGfTYdo0tAl64Zd/xF6T3TOACBZJyRimhZoNsHcgk23P4LvlaINDk oA44BpbrzzqE88rwkjVUKqfmvScB4O6quHKe3CETtyG0TzZOrCerRi/N85BxFcamBKW2Iu0fu LSzffhkvM4Ve5PjdPeyRpA1po1uDxNb1UOo3vgPfrOqfOiKzCesHo6Y35qitCKivEAHsHSJBF vuYsvMRkaIlrBWm/5U0yWodW+raS8q7TMO0IHoZ0grATu2p81k/xE7s2qzInCop8lTmvV3IN2 O2MwkjgOMMcslxNkCQnWlg0bROFsvb4PaUlcYG0Z/UVkK+fb20T7wjnoSCCllvG4bytg3iThR KkpQfed2/NkBLU0NXUBWwaeB2Ot0SMis1i5+dMqMtFdvoLGy/j8mxN5alvc8nlIhQHKsEGjaV 4mFnhUJuHKzHHATIU8AIIZJeRw0VrMaTsRo1/+Zi6peIbWQOYk0by7c6tIWobmpx7K/8FpuYx BXBsFsvKFo7z8c0KmCinLssq7WLLns+XAfSkhvkGy7eGAXQHlYZlFlYp/9jmQCyoh6Kuo2FcG J0XTbjyhjwQURpOGSS15hgpWSHuY/nD3+uCP1JZ6fAX115aUcsNPUf6AfesK+Erc8ndgi1Van a1ltrwYKc4da7Jd76XWANMCxyArs+HUXiaMJ1b7mfC4fpCNBLBLwbF58lUrwTKgxVm8qgMbEU PyZd8MiCMjNce7QRSfXLqct5Pp0wdE/2PONg8ro7TD1Q2YNy5TzPlbeaQKA7szP/EKIaE7ep3 xaGVvHIOBiyJNPgAw/QXIvvt2RiUoEVgCAWOpzGLSspe0rio8VYG0aTiM+T8Y4uRRwJdBgDER jLKuiNVD8nvQ9Bo5xpg+kwIMu9Q2SzrpABqsJnQj6H8Io/aXAEJu2HnYtZaWB0zP4DHBO7h6m oFl8QrUEEBXukhXl0cl6i9dAiqadKvud/d8rLa2s6EVotEzeZDPYM8fOabfcwcgH72O6BOU+P lpRzOvbdzoNtJcnj5smEIK55EBwuzmhZ3IjkMJCt/YiH4BrNZ0HgQO/xOoPHUUBA54vNw4LHy fn3fO5ruGGFqVr1RR+oUvYqZE0pVluO44WIuxCYwl2e8jmcxL80J0kfiKw0TFGr/5fdVG2OvH U+6/Z1lCNk2+y+YfcDCg8OXJMBNrf5f123c/+Swe+ePPpDwfNJnkjK6BZA3xGeO70cqO4LGwl aHvQYUGBZ/gX2KZO/pcqNrHLU9cNbfBiarTKjDJCvfjNCj8iYkwD+EmboJv6VjUXNqPqyfW8r fiYvtpUAgknRCjD29lrB0/FPooXnk696wHSepAzI4Y0gxqFoCZ3Gj82hpahSXXFSJxkWHLQg3 nZdrO6yvvd0XLRx31SIAf8noFRK+HIp7BZpCspN98aLCX5VAwiSUfbMNcsuYB5/OBT6K7eXBd oovHLeuUDGQW+83EHJyCGBN0//0TK79PMPVCwLpl+zvtOMtmckIl5lCzjLkXg3vuxNCYAQB0e JOD1Z8r+LhVYih+xUM5gczFzEFUqBN4mfVvGOEIj45xI31pr3ol2BG36QGN8N2qzA6Nhrdqt+ UBMY1rAQHQBv+59VVftjJq+UGLn5T5RzLqyYhI29OAqJJ4xpCJ1gHiwXh8/XQz3+tz8VAVeLi d/1BDpFDO1RyfQj4Gg3u2LwgSAZAMbg2cfbhiKU8GzAb/b2ZaHrQBgiOdiyU/ZVBJRDhHGZmx zqeSwEwPeasSal7J0Me5Nv0IpRz1wCQfPRYJGh1UBUe0emPadT1K4NYuZZDEzQ8IxMRNAvLJf xKI60+VujIipe/67b9MfFZz+6h46VOjcdVj6BU9l6hGPBbiPRfwufsS2TLYMajOzgKdIfG4+o H9ubkjCANk0T1P3OhLDovVPz5WVCMJzOsj2r9j6tL5dFTfy/9OlQTlwq9VaR2Y6wRyaY52wMC E0FhSokO7J+KllRCEitPyHXZNALqW0Ah66cRk3QuFDhzpcK814zbkJyNTW+HrrbfBLyI3M/+z 5eErk2DtvcZWBD/4tvzumVMow4dYC7Z1+fli93z1XmxjHxDc68s00bC+F6c/4+qoQWuNEezbz /iazOUa850bhH0Qr+siATnKg6SVC1hpsZOgF8CunZkwsHaSjNYkXSGgw4AeP9abbczxiQ8rAf 8VzRwmQw9av0MICYsBWR91HUEuUKksmclhPy8aS1EbDiWqsODJCqbRVFty59+47QdQQWmjDHi ltGfbuvg5VluEIxyDmdxHXVilTReXrid6c5Hbpz1sm9eZ8bMuQaStojbL6w9xXJvTBiKs6XV1 XUBpvmfaNCZsOPCcnK7s/g1ytonA2ZyR2cw1flH7g6iNcgNAamLdsaGp1fUNXRVH6QuRq7xsi acDtnZCmdjxMrW+/JB6xFCIDVFpWJXLI/DT4J33yG0HC3VUfXRLsewMl7ASJ/qz03r+34v7Qp 9TtT3EBVUxRcxnL6DOkp6itPl+2hKx8IFJoT+CdgoP1TIlO/jzz9uvaq6a9rHYFXqamCwBVH0 DikoxihEriJ9/rKYhxjAXK6U32D+m319+zD9la6sQDHkwMVJLb/iCOVaVy0upCB37CKVz7KMD wKny1geilY9zDU9Y5WmJQS+3pEZEpYkfLtiVem1FBzkaci82AtZxC7UrIgJj+QoVrhuhtV5pW 9kA0FKrqxN0RdBJaDb3dPf6zI/4wVXUWjwbmJal5M4LeDlqL9Wq+mUB/N0d+B5q2aP2dmEC9F f1t8yD3iult6WXuQGxko4yGOWvxTsx8bQZ+kLfA5m+ZfKgSAUvgxvRSr0VD8z1Hz50kCJ6xY0 oCSjk8u7I6BlTlOhFOwCRRDSQ6oujbt1aBM0z2rtIny8M4achFNV+vHvLl24GisQtLi2BsDi1 RE8i3Oh7QxXNIt1E9L3UIJO6xWioa2sQVF+uK91qRsWqgXcYqFAl1v+Y3D8XA/SsmwqRZZqvm rKtozfZaKFdWqDdasbPyQMqJ5WAnKRKYw+44+bdcIYtsA2n7Hf64J8eigWi7RSn3iwY16JdLq aVibp5jX/hlqoyFa8SYgWLRuI4YDH/uiuSf0h1Cknx1YFgLSbDyrnNPUUnaNS5JioKQqx5nW6 bVhi1y+Cl6t05pTm5Zwy7y7qGi7W1ikDBfT2Og7lBCNJ1LtasdAuvrVPAzCwmD62ZAz4bFqS/ bYeWHoKbjkBjwyvgllt+zoa6dVkbDHIu2QVlmOTEKgRYfgoB2EbgTtuIWDJeXd2ZwZhw2ZAL+ sW7xUcH7CkiOnELr6sSpQEwHdJpUXEVegTI8HZ8lJy6hDatOwJv96M9CzdIHz0kGFitIDWnd1 hhBsjN+0rx5Qg6COIth7/Sh3L3qFBdZJDJsNUd9Vq11Kzi+witjXbWI8eyr1o86NTJ2KVd+RF qdKpjuZdPhL2sYKs7HfFsaSBKWAGusRRdLSwuyyYko1R/xpCukLbzwKvRzhJU3A7ZyvGC8KJk agwFbWGj1NNgbRdxKq5nYUBKd4xMDR5X6eBkNTi1qJ6SL99urdOB1py+kA1lvD+oAuapQiOUz i1E6oy6yg0IDqDHLlnkuiKqnDrMP6Do5uDx44rR/9Iqlg9TCLmWgtMdaSPMYa6hyomWLupDAf aXe3/OOntaklKrK/zW1Iu7sf4Or97432USLr07wVFfDrekKH2IjZOytL4aV4D2Ezsjztco9uA KH8pgi1M8OlhVqig3i3dFhE8iw/GaVy+M14iy4XSvN3vi6h0ethIxCnh4wXwU3HSwbCVYHqA6 GTt6Z4R0z1zbJ2IfUcsuj7RUVIt+lF7R+JEOMQEsKvbtSFEq6Mt8bGPl8ExYwdOYtQJfnwIy2 heSfBSNwdeBI/thwotalNjk5IRRLdA83EL9y2+K9KlTEaubEk30m2xtzU2Rlfv8LP2DQWJJhe 1bmJhv9hLFzwTGRmy0W1Qe+XMs4a0bQEc6fzlRQ41EVtxp1JmEpfA5Z8vSFJhWQvZ9gzwZrYq xlMDLo8NPcmFcw8el1CTaiseAvrZ/1xXroucVybWbdPxHq6LEmwhI99DXOXeVwglwvGRUcLNy R5S4ksK7M8eO8yT1xhtfjoTeYcRl7/6O1SmuiWcNYPeDunMYM8bWnAXO4UAon4QCH2GmHkQE1 RNXO4OmbXC0k0XlApKRwcVIX0PioKoz6Jomgr4pMULIFf1WQBTiZmdXQCenx3BtcypzeBmuak mbGfITvuJK1qWcOZsDMsO5NwFvRcPhouDSBGC80PD+JTqSRmT9x5xXF3Tx6q8Nx4GA9M0ZoPV +H37M0l21DjMaw9jg/JL2/Vcd+kOOXh35nn8xAFeS4z6UhPuT9LjEprk/mh8N/OucIbMhZy5D Wfo+iAZ05Z7fbO28aK6Qa9UWmieEpYDtSz5bdDPTTCE7+HdOLfOrkEQiVKxiDbYMA6/2LbCjz N1kkxwazlGfxP/FrN5Kz0U7GuBqpu+Ii7pzBVQlIwSgOFlDnErFg3WG2bJn8iS0QhxNnfcgvx hL+3gG4+WpnlG4bybJ40KKjywUHr8cSRMI67CMA4QOVDIVXwALmZtaUa2Zb42xTxxUPm+zBte Mbxqq6Meru251RIukrUGOvjtz2X2mHQZvkCzkhRjW4i7bIepBi1YmLLVkl75QrOpcKcy6u7Gf Av5ZtGuW5LzevbH7XxQ9yNyZJM9stYwbadPCe4IiYPLRK9QtMhzv47tbmpiG2wJM0x5tSg6s6 iVC5mhn4OVktpg2GvPyv3/Vau3rjRIda6UnXPtwXs3tH9n81BLVU3G1kn37/giW6QN8FbIzUc YzNvCgJ7NhwD9tVWbmwro+C+F3D0Q9/3xnwRC2XWcntdothrzYD+AErQMydd94iLYFJF60+eH wOjAjUvuCC1qGhdNEPqyMbhbk1jqXpkdk9QzgV9qQgJAXijWVlCJeaPZN9IgXzCE4HcHdkK48 zsatRGOuK51a2L11fku4datK7oCKzkLVqfIEl2Rk+cZK1aIgwVxLp5t1WJRZ4kbZnVLIKwnMR iSKQPZZXc4WO2e9t7Khc0z8ShVNmbOaYT6rpCTS27Z7xwm9YgNVW7T9MHkw8G7oPxpkE/KnoH ayvFG/85OTW1KgZynIK/xcFeU3OHQ6wfTVslz7U0YPWaDHWLp1UruXMFqNHL+IZsDjPcA062x qC1u2wAVdzHQclEmWE8590lr2Cfeh8mIHNlmYm7CEuLW3hIUTV+pm/Jm2I35qikMlbWsyNP5W +vHsRLQqgI1IIc95rRw6c2k3tzNwwR1aAgfgP2L59zIfCkxp+nI3EAxh7kAuPUSIl8tnGm4Tn 0ePXtuzhk9sYK6A/07htA1lcdk4Ja2+fmemI3C5swzobbpD8eb81/WfJYAZGnj8n5LRMn6GMT nmdlzSyCrAosEI5xeBPRXCFqSI//EHjFFzpR4I4EgxWZ5snLl13ec7AcmEsUaWnBlDXlNdx93 /llswG7asxD9SDUQGT30eNDFJsQy8sLOJeytVd9P1Zch/sWyvKy3OzQcZNM883041SUsybunH W6kmPo9iaePHqpZz77NAZZSIEq5D2dFQhhcuX6FZ9EgX7rl6xiSOQMFPzjQtqcdovFn2vGWMX ll8XnoR4WVQKGhVQjj2FbFcnEz+Ez1ZDXBHVOkXxhxuBkuSWV2HUTeJj+mJb48UhisiI835CO 0VsLR0RDPMcXN7U9o1glY0ZYYpJuLeQeMEDXia1RbmgfJH0FmaXJCvzyv3sPPyy4XP7oXjB08 6D8ITjz0sAkx3fxJxJK43VVIXTewzlnk62bL3rrcV7YDyTh7pXmkNzVJ+CdIR3kTFpnR1dmVG T3xuZKjWLi4Kdg/MrbdJHFNtlPKtVH+dTrkBA6H4U0Xp9srf3cARGY5eaQdiRCN1QPYqnvxxy zKAQPGpzR63dXscROcNr7Ip5uftD6j19pcgOLumskWjYeBiCS4kKVvUdK5K1xhIIaC4VNbkIa xmTT7mOfVa9lF Content-Type: text/plain; charset="utf-8" The LED subsystem specifies that LEDs capable of producing arbitrary colors (like RGB) should label themselfs as "rgb" instead of "multicolor". Use the "rgb" label instead of the "multicolor" label to fix detection by userspace applications. Reported-by: Werner Sembach Closes: https://github.com/Wer-Wolf/uniwill-laptop/issues/18 Signed-off-by: Armin Wolf --- Documentation/admin-guide/laptops/uniwill-laptop.rst | 4 ++-- drivers/platform/x86/uniwill/uniwill-acpi.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Documentation/admin-guide/laptops/uniwill-laptop.rst b/Documen= tation/admin-guide/laptops/uniwill-laptop.rst index aaf50e3074c1..d8ce30f10d7c 100644 --- a/Documentation/admin-guide/laptops/uniwill-laptop.rst +++ b/Documentation/admin-guide/laptops/uniwill-laptop.rst @@ -72,7 +72,7 @@ Lightbar -------- =20 The ``uniwill-laptop`` driver exposes the lightbar found on some models as= a standard multicolor -LED class device. The default name of this LED class device is ``uniwill:m= ulticolor:status``. +LED class device. The default name of this LED class device is ``uniwill:r= gb:status``. =20 The lightbar supports a separate rainbow animation mode that can be enable= d by selecting the `uniwill-rainbow` LED trigger. To enable a breathing animation during susp= end, see @@ -83,7 +83,7 @@ Keyboard Backlight =20 The ``uniwill-laptop`` driver supports controlling the keyboard backlight = using the standard LED class interface. The default name of this LED class device is ``uniwil= l:white:kbd_backlight`` -when the keyboard backlight supports only a single color, or ``uniwill:mul= ticolor:kbd_backlight`` +when the keyboard backlight supports only a single color, or ``uniwill:rgb= :kbd_backlight`` when the keyboard backlight supports RGB colors. The maximum intensity for= each color channel in RGB mode is 50. =20 diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index e527ed7461c3..27d5e54f0e1c 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -1554,7 +1554,7 @@ static int uniwill_led_init(struct uniwill_data *data) { struct led_init_data init_data =3D { .devicename =3D DRIVER_NAME, - .default_label =3D "multicolor:" LED_FUNCTION_STATUS, + .default_label =3D "rgb:" LED_FUNCTION_STATUS, .devname_mandatory =3D true, }; unsigned int color_indices[3] =3D { @@ -1600,7 +1600,7 @@ static int uniwill_led_init(struct uniwill_data *data) if (ret < 0) return ret; =20 - data->led_mc_cdev.led_cdev.color =3D LED_COLOR_ID_MULTI; + data->led_mc_cdev.led_cdev.color =3D LED_COLOR_ID_RGB; data->led_mc_cdev.led_cdev.max_brightness =3D 1; data->led_mc_cdev.led_cdev.flags =3D LED_REJECT_NAME_CONFLICT; data->led_mc_cdev.led_cdev.brightness_set_blocking =3D uniwill_led_bright= ness_set; @@ -1782,7 +1782,7 @@ static int uniwill_rgb_kbd_led_init(struct uniwill_da= ta *data) LED_COLOR_ID_BLUE, }; struct led_init_data init_data =3D { - .default_label =3D "multicolor:" LED_FUNCTION_KBD_BACKLIGHT, + .default_label =3D "rgb:" LED_FUNCTION_KBD_BACKLIGHT, .devicename =3D DRIVER_NAME, .devname_mandatory =3D true, }; @@ -1843,7 +1843,7 @@ static int uniwill_rgb_kbd_led_init(struct uniwill_da= ta *data) return ret; =20 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.color =3D LED_COLOR_ID_RGB; data->kbd_led_mc_cdev.led_cdev.flags =3D LED_BRIGHT_HW_CHANGED | LED_REJE= CT_NAME_CONFLICT; data->kbd_led_mc_cdev.led_cdev.brightness_set_blocking =3D uniwill_kbd_le= d_mc_brightness_set; data->kbd_led_mc_cdev.led_cdev.brightness_get =3D uniwill_kbd_led_mc_brig= htness_get; --=20 2.39.5 From nobody Sat Sep 26 02:00:39 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 EAD16224AF2; Sat, 5 Sep 2026 13:01: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=1788613309; cv=none; b=occ2f/m3TFuCt/F/47j0Ir0+Wp89eZMTvWSm00mylLU1SNUXEFplUFw4uEQ4+0P41M2UJhLpDU6U4CqV6VB9pSvIJVq+B9cPunKd1ZuuGCHWcvbKY2+a+jARUnEBoOdmkEJiJ3H4dBZ+GcVd/GRLtPPcz43dhcNRWpXyWOJExzk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788613309; c=relaxed/simple; bh=G5jzq1Doh54ldkY1Bcnq5bZ8K6lVYalfQ11Aq9WEHSU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YuKteVnUimTUpaOCHmmFuckWJKNXDZOv476NXNCHrvmrzKRFszJxmHTCTSFyBQlyzd2OmMT04YEyDfXLDxngj5EuJ7HKrRm2APmP0JnLz5UFSjyCEzuo2ppcIQn9JG/XGhmXXvaoVcR4gHLxLygu26yQKeKmWehcniJdxWCWW+g= 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=aKm+fbwc; 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="aKm+fbwc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1788613305; x=1789218105; i=w_armin@gmx.de; bh=+YNVNktWBBzePC4aJmJQezyQ0sDZ/JUJ1/SLrnwkA4I=; 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=aKm+fbwcMrMHM/+EtdEF0EZXq3SYbYtvRigKP6ndqLP4X5QzraedXLYRKkIgJRJs lYMeMWXySLXoZgzNgas7MktPoR1jNeLPjxjGAcek83nKVZ14XbrY0lAM7LxeNEXo1 w0xoWBxkvZaX0eREeNCv3Lzu0zgzzRpaZJINQKfQOJhL/Zu3i6VbftI6W73KrgNPv sAXrPvZl1VdFbPFLw/GpbYUETPxat9PHVemZsghlPx3TFpzAC5Xe/0J+LffiAUHpv rQ5M5k2UgYSL1hlv7PZrxrTEz1X+zGjDCo0T+Xiti3M9y0jbp1inkE9wstr5aKJsz VlrGjlE+PQOGS9UHNQ== 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 1N9dwd-1wp2gn3ggv-014Fyc; Sat, 05 Sep 2026 15:01:44 +0200 From: Armin Wolf To: hansg@kernel.org, ilpo.jarvinen@linux.intel.com Cc: wse@tuxedocomputers.com, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/5] platform/x86: uniwill-laptop: Extend support for the Intel NUC x15 Date: Sat, 5 Sep 2026 15:01:38 +0200 Message-Id: <20260905130138.6814-6-W_Armin@gmx.de> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260905130138.6814-1-W_Armin@gmx.de> References: <20260905130138.6814-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:CCwrNnhoXQKoXqgjp0n+bbj0oZq1eQ9l099v3Umg5YPvRiu7Fes 1xNGYNgYUiTSjwunaxrOOx+HzRjEfCtAXw6yddNuD9923pzBufRW0cEHt8LoxJDL+3zIkaf +N+edacPn4RFi/h1o6kRDABlplQlv/vCw+fS1BLsO/uoo/zMuPn15xoR7xCSvF5Kx+/Jxt8 c+NYBuZw8RYOa4TrRRYBg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:D7PQ1Tqq6t4=;Yy3ARS3mW/C1s3LyS/uDe99VFTq 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 GZ24jmf1WNxSUxvcMxMYw87qoyr2qeDyX8A== Content-Type: text/plain; charset="utf-8" A user has reported that the LAPKC71E variant of the Intel NUC x15 also works with the uniwill-laptop driver. The difference between the LAPKC71E and the LAPKC71F seems to be the dedicated NVidia GPU module. Add support for this device as well. It is suspected that the LAPKC71F also supports the new UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL feature, but this would need to be verified on real hardware. Link: https://github.com/Wer-Wolf/uniwill-laptop/issues/17 Signed-off-by: Armin Wolf --- drivers/platform/x86/uniwill/uniwill-acpi.c | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform= /x86/uniwill/uniwill-acpi.c index 27d5e54f0e1c..433a7a0eeba6 100644 --- a/drivers/platform/x86/uniwill/uniwill-acpi.c +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c @@ -2721,6 +2721,20 @@ static struct uniwill_device_descriptor lapac71h_des= criptor __initdata =3D { UNIWILL_FEATURE_SECONDARY_FAN, }; =20 +static struct uniwill_device_descriptor lapkc71e_descriptor __initdata =3D= { + .features =3D UNIWILL_FEATURE_FN_LOCK | + UNIWILL_FEATURE_SUPER_KEY | + UNIWILL_FEATURE_TOUCHPAD_TOGGLE | + UNIWILL_FEATURE_LIGHTBAR | + UNIWILL_FEATURE_BATTERY_CHARGE_LIMIT | + UNIWILL_FEATURE_CPU_TEMP | + UNIWILL_FEATURE_GPU_TEMP | + UNIWILL_FEATURE_PRIMARY_FAN | + UNIWILL_FEATURE_SECONDARY_FAN | + UNIWILL_FEATURE_NVIDIA_CTGP_CONTROL, + .lightbar_max_intensity =3D 200, +}; + static struct uniwill_device_descriptor lapkc71f_descriptor __initdata =3D= { .features =3D UNIWILL_FEATURE_FN_LOCK | UNIWILL_FEATURE_SUPER_KEY | @@ -2946,6 +2960,14 @@ static const struct dmi_system_id uniwill_dmi_table[= ] __initconst =3D { }, .driver_data =3D &lapac71h_descriptor, }, + { + .ident =3D "Intel NUC x15", + .matches =3D { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel(R) Client Systems"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "LAPKC71E"), + }, + .driver_data =3D &lapkc71e_descriptor, + }, { .ident =3D "Intel NUC x15", .matches =3D { --=20 2.39.5