It turns out that both sysfs attributes actually directly control
the FN lock status/super key enable status, rather than the
triggering of the associated events. This behavior was first observed
on a Tuxedo notebook and was belived to be a hardware quirk.
However, it seems that i simply misunderstood the manual of the
OEM software for Intel NUC devices. The correct behavior is:
- fn_lock_toggle_enable enables/disables FN lock mode
- super_key_toggle_enable enables/disables the super key
Rename both sysfs attributes to avoid confusing users.
Fixes: d050479693bb ("platform/x86: Add Uniwill laptop driver")
Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
.../ABI/testing/sysfs-driver-uniwill-laptop | 10 ++--
drivers/platform/x86/uniwill/uniwill-acpi.c | 46 +++++++++----------
2 files changed, 27 insertions(+), 29 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
index eaeb659793d2..2df70792968f 100644
--- a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
+++ b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
@@ -1,4 +1,4 @@
-What: /sys/bus/platform/devices/INOU0000:XX/fn_lock_toggle_enable
+What: /sys/bus/platform/devices/INOU0000:XX/fn_lock
Date: November 2025
KernelVersion: 6.19
Contact: Armin Wolf <W_Armin@gmx.de>
@@ -8,15 +8,15 @@ Description:
Reading this file returns the current enable status of the FN lock functionality.
-What: /sys/bus/platform/devices/INOU0000:XX/super_key_toggle_enable
+What: /sys/bus/platform/devices/INOU0000:XX/super_key_enable
Date: November 2025
KernelVersion: 6.19
Contact: Armin Wolf <W_Armin@gmx.de>
Description:
- Allows userspace applications to enable/disable the super key functionality
- of the integrated keyboard by writing "1"/"0" into this file.
+ Allows userspace applications to enable/disable the super key of the integrated
+ keyboard by writing "1"/"0" into this file.
- Reading this file returns the current enable status of the super key functionality.
+ Reading this file returns the current enable status of the super key.
What: /sys/bus/platform/devices/INOU0000:XX/touchpad_toggle_enable
Date: November 2025
diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c
index 3c9af441d133..856d5e38e045 100644
--- a/drivers/platform/x86/uniwill/uniwill-acpi.c
+++ b/drivers/platform/x86/uniwill/uniwill-acpi.c
@@ -314,8 +314,8 @@
#define LED_CHANNELS 3
#define LED_MAX_BRIGHTNESS 200
-#define UNIWILL_FEATURE_FN_LOCK_TOGGLE BIT(0)
-#define UNIWILL_FEATURE_SUPER_KEY_TOGGLE BIT(1)
+#define UNIWILL_FEATURE_FN_LOCK BIT(0)
+#define UNIWILL_FEATURE_SUPER_KEY BIT(1)
#define UNIWILL_FEATURE_TOUCHPAD_TOGGLE BIT(2)
#define UNIWILL_FEATURE_LIGHTBAR BIT(3)
#define UNIWILL_FEATURE_BATTERY BIT(4)
@@ -600,8 +600,8 @@ static const struct regmap_config uniwill_ec_config = {
.use_single_write = true,
};
-static ssize_t fn_lock_toggle_enable_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
+static ssize_t fn_lock_store(struct device *dev, struct device_attribute *attr, const char *buf,
+ size_t count)
{
struct uniwill_data *data = dev_get_drvdata(dev);
unsigned int value;
@@ -624,8 +624,7 @@ static ssize_t fn_lock_toggle_enable_store(struct device *dev, struct device_att
return count;
}
-static ssize_t fn_lock_toggle_enable_show(struct device *dev, struct device_attribute *attr,
- char *buf)
+static ssize_t fn_lock_show(struct device *dev, struct device_attribute *attr, char *buf)
{
struct uniwill_data *data = dev_get_drvdata(dev);
unsigned int value;
@@ -638,10 +637,10 @@ static ssize_t fn_lock_toggle_enable_show(struct device *dev, struct device_attr
return sysfs_emit(buf, "%d\n", !!(value & FN_LOCK_STATUS));
}
-static DEVICE_ATTR_RW(fn_lock_toggle_enable);
+static DEVICE_ATTR_RW(fn_lock);
-static ssize_t super_key_toggle_enable_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
+static ssize_t super_key_enable_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
{
struct uniwill_data *data = dev_get_drvdata(dev);
unsigned int value;
@@ -673,8 +672,7 @@ static ssize_t super_key_toggle_enable_store(struct device *dev, struct device_a
return count;
}
-static ssize_t super_key_toggle_enable_show(struct device *dev, struct device_attribute *attr,
- char *buf)
+static ssize_t super_key_enable_show(struct device *dev, struct device_attribute *attr, char *buf)
{
struct uniwill_data *data = dev_get_drvdata(dev);
unsigned int value;
@@ -687,7 +685,7 @@ static ssize_t super_key_toggle_enable_show(struct device *dev, struct device_at
return sysfs_emit(buf, "%d\n", !(value & SUPER_KEY_LOCK_STATUS));
}
-static DEVICE_ATTR_RW(super_key_toggle_enable);
+static DEVICE_ATTR_RW(super_key_enable);
static ssize_t touchpad_toggle_enable_store(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count)
@@ -881,8 +879,8 @@ static int uniwill_nvidia_ctgp_init(struct uniwill_data *data)
static struct attribute *uniwill_attrs[] = {
/* Keyboard-related */
- &dev_attr_fn_lock_toggle_enable.attr,
- &dev_attr_super_key_toggle_enable.attr,
+ &dev_attr_fn_lock.attr,
+ &dev_attr_super_key_enable.attr,
&dev_attr_touchpad_toggle_enable.attr,
/* Lightbar-related */
&dev_attr_rainbow_animation.attr,
@@ -897,13 +895,13 @@ static umode_t uniwill_attr_is_visible(struct kobject *kobj, struct attribute *a
struct device *dev = kobj_to_dev(kobj);
struct uniwill_data *data = dev_get_drvdata(dev);
- if (attr == &dev_attr_fn_lock_toggle_enable.attr) {
- if (uniwill_device_supports(data, UNIWILL_FEATURE_FN_LOCK_TOGGLE))
+ if (attr == &dev_attr_fn_lock.attr) {
+ if (uniwill_device_supports(data, UNIWILL_FEATURE_FN_LOCK))
return attr->mode;
}
- if (attr == &dev_attr_super_key_toggle_enable.attr) {
- if (uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
+ if (attr == &dev_attr_super_key_enable.attr) {
+ if (uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
return attr->mode;
}
@@ -1505,7 +1503,7 @@ static void uniwill_shutdown(struct platform_device *pdev)
static int uniwill_suspend_keyboard(struct uniwill_data *data)
{
- if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
+ if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
return 0;
/*
@@ -1565,7 +1563,7 @@ static int uniwill_resume_keyboard(struct uniwill_data *data)
unsigned int value;
int ret;
- if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
+ if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
return 0;
ret = regmap_read(data->regmap, EC_ADDR_SWITCH_STATUS, &value);
@@ -1643,16 +1641,16 @@ static struct platform_driver uniwill_driver = {
};
static struct uniwill_device_descriptor lapac71h_descriptor __initdata = {
- .features = UNIWILL_FEATURE_FN_LOCK_TOGGLE |
- UNIWILL_FEATURE_SUPER_KEY_TOGGLE |
+ .features = UNIWILL_FEATURE_FN_LOCK |
+ UNIWILL_FEATURE_SUPER_KEY |
UNIWILL_FEATURE_TOUCHPAD_TOGGLE |
UNIWILL_FEATURE_BATTERY |
UNIWILL_FEATURE_HWMON,
};
static struct uniwill_device_descriptor lapkc71f_descriptor __initdata = {
- .features = UNIWILL_FEATURE_FN_LOCK_TOGGLE |
- UNIWILL_FEATURE_SUPER_KEY_TOGGLE |
+ .features = UNIWILL_FEATURE_FN_LOCK |
+ UNIWILL_FEATURE_SUPER_KEY |
UNIWILL_FEATURE_TOUCHPAD_TOGGLE |
UNIWILL_FEATURE_LIGHTBAR |
UNIWILL_FEATURE_BATTERY |
--
2.39.5
Hi,
Am 11.02.26 um 00:29 schrieb Armin Wolf:
> It turns out that both sysfs attributes actually directly control
> the FN lock status/super key enable status, rather than the
> triggering of the associated events. This behavior was first observed
> on a Tuxedo notebook and was belived to be a hardware quirk.
> However, it seems that i simply misunderstood the manual of the
> OEM software for Intel NUC devices. The correct behavior is:
>
> - fn_lock_toggle_enable enables/disables FN lock mode
> - super_key_toggle_enable enables/disables the super key
>
> Rename both sysfs attributes to avoid confusing users.
>
> Fixes: d050479693bb ("platform/x86: Add Uniwill laptop driver")
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
> ---
> .../ABI/testing/sysfs-driver-uniwill-laptop | 10 ++--
> drivers/platform/x86/uniwill/uniwill-acpi.c | 46 +++++++++----------
> 2 files changed, 27 insertions(+), 29 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
> index eaeb659793d2..2df70792968f 100644
> --- a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
> +++ b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
> @@ -1,4 +1,4 @@
> -What: /sys/bus/platform/devices/INOU0000:XX/fn_lock_toggle_enable
> +What: /sys/bus/platform/devices/INOU0000:XX/fn_lock
> Date: November 2025
> KernelVersion: 6.19
> Contact: Armin Wolf <W_Armin@gmx.de>
> @@ -8,15 +8,15 @@ Description:
>
> Reading this file returns the current enable status of the FN lock functionality.
>
> -What: /sys/bus/platform/devices/INOU0000:XX/super_key_toggle_enable
> +What: /sys/bus/platform/devices/INOU0000:XX/super_key_enable
> Date: November 2025
> KernelVersion: 6.19
> Contact: Armin Wolf <W_Armin@gmx.de>
> Description:
> - Allows userspace applications to enable/disable the super key functionality
> - of the integrated keyboard by writing "1"/"0" into this file.
> + Allows userspace applications to enable/disable the super key of the integrated
> + keyboard by writing "1"/"0" into this file.
>
> - Reading this file returns the current enable status of the super key functionality.
> + Reading this file returns the current enable status of the super key.
>
> What: /sys/bus/platform/devices/INOU0000:XX/touchpad_toggle_enable
> Date: November 2025
> diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c
> index 3c9af441d133..856d5e38e045 100644
> --- a/drivers/platform/x86/uniwill/uniwill-acpi.c
> +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c
> @@ -314,8 +314,8 @@
> #define LED_CHANNELS 3
> #define LED_MAX_BRIGHTNESS 200
>
> -#define UNIWILL_FEATURE_FN_LOCK_TOGGLE BIT(0)
> -#define UNIWILL_FEATURE_SUPER_KEY_TOGGLE BIT(1)
> +#define UNIWILL_FEATURE_FN_LOCK BIT(0)
> +#define UNIWILL_FEATURE_SUPER_KEY BIT(1)
> #define UNIWILL_FEATURE_TOUCHPAD_TOGGLE BIT(2)
> #define UNIWILL_FEATURE_LIGHTBAR BIT(3)
> #define UNIWILL_FEATURE_BATTERY BIT(4)
Maybe also rename UNIWILL_OSD_SUPER_KEY_LOCK_ENABLE and
UNIWILL_OSD_SUPER_KEY_LOCK_DISABLE
Best regards,
Werner
> @@ -600,8 +600,8 @@ static const struct regmap_config uniwill_ec_config = {
> .use_single_write = true,
> };
>
> -static ssize_t fn_lock_toggle_enable_store(struct device *dev, struct device_attribute *attr,
> - const char *buf, size_t count)
> +static ssize_t fn_lock_store(struct device *dev, struct device_attribute *attr, const char *buf,
> + size_t count)
> {
> struct uniwill_data *data = dev_get_drvdata(dev);
> unsigned int value;
> @@ -624,8 +624,7 @@ static ssize_t fn_lock_toggle_enable_store(struct device *dev, struct device_att
> return count;
> }
>
> -static ssize_t fn_lock_toggle_enable_show(struct device *dev, struct device_attribute *attr,
> - char *buf)
> +static ssize_t fn_lock_show(struct device *dev, struct device_attribute *attr, char *buf)
> {
> struct uniwill_data *data = dev_get_drvdata(dev);
> unsigned int value;
> @@ -638,10 +637,10 @@ static ssize_t fn_lock_toggle_enable_show(struct device *dev, struct device_attr
> return sysfs_emit(buf, "%d\n", !!(value & FN_LOCK_STATUS));
> }
>
> -static DEVICE_ATTR_RW(fn_lock_toggle_enable);
> +static DEVICE_ATTR_RW(fn_lock);
>
> -static ssize_t super_key_toggle_enable_store(struct device *dev, struct device_attribute *attr,
> - const char *buf, size_t count)
> +static ssize_t super_key_enable_store(struct device *dev, struct device_attribute *attr,
> + const char *buf, size_t count)
> {
> struct uniwill_data *data = dev_get_drvdata(dev);
> unsigned int value;
> @@ -673,8 +672,7 @@ static ssize_t super_key_toggle_enable_store(struct device *dev, struct device_a
> return count;
> }
>
> -static ssize_t super_key_toggle_enable_show(struct device *dev, struct device_attribute *attr,
> - char *buf)
> +static ssize_t super_key_enable_show(struct device *dev, struct device_attribute *attr, char *buf)
> {
> struct uniwill_data *data = dev_get_drvdata(dev);
> unsigned int value;
> @@ -687,7 +685,7 @@ static ssize_t super_key_toggle_enable_show(struct device *dev, struct device_at
> return sysfs_emit(buf, "%d\n", !(value & SUPER_KEY_LOCK_STATUS));
> }
>
> -static DEVICE_ATTR_RW(super_key_toggle_enable);
> +static DEVICE_ATTR_RW(super_key_enable);
>
> static ssize_t touchpad_toggle_enable_store(struct device *dev, struct device_attribute *attr,
> const char *buf, size_t count)
> @@ -881,8 +879,8 @@ static int uniwill_nvidia_ctgp_init(struct uniwill_data *data)
>
> static struct attribute *uniwill_attrs[] = {
> /* Keyboard-related */
> - &dev_attr_fn_lock_toggle_enable.attr,
> - &dev_attr_super_key_toggle_enable.attr,
> + &dev_attr_fn_lock.attr,
> + &dev_attr_super_key_enable.attr,
> &dev_attr_touchpad_toggle_enable.attr,
> /* Lightbar-related */
> &dev_attr_rainbow_animation.attr,
> @@ -897,13 +895,13 @@ static umode_t uniwill_attr_is_visible(struct kobject *kobj, struct attribute *a
> struct device *dev = kobj_to_dev(kobj);
> struct uniwill_data *data = dev_get_drvdata(dev);
>
> - if (attr == &dev_attr_fn_lock_toggle_enable.attr) {
> - if (uniwill_device_supports(data, UNIWILL_FEATURE_FN_LOCK_TOGGLE))
> + if (attr == &dev_attr_fn_lock.attr) {
> + if (uniwill_device_supports(data, UNIWILL_FEATURE_FN_LOCK))
> return attr->mode;
> }
>
> - if (attr == &dev_attr_super_key_toggle_enable.attr) {
> - if (uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
> + if (attr == &dev_attr_super_key_enable.attr) {
> + if (uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
> return attr->mode;
> }
>
> @@ -1505,7 +1503,7 @@ static void uniwill_shutdown(struct platform_device *pdev)
>
> static int uniwill_suspend_keyboard(struct uniwill_data *data)
> {
> - if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
> + if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
> return 0;
>
> /*
> @@ -1565,7 +1563,7 @@ static int uniwill_resume_keyboard(struct uniwill_data *data)
> unsigned int value;
> int ret;
>
> - if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
> + if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
> return 0;
>
> ret = regmap_read(data->regmap, EC_ADDR_SWITCH_STATUS, &value);
> @@ -1643,16 +1641,16 @@ static struct platform_driver uniwill_driver = {
> };
>
> static struct uniwill_device_descriptor lapac71h_descriptor __initdata = {
> - .features = UNIWILL_FEATURE_FN_LOCK_TOGGLE |
> - UNIWILL_FEATURE_SUPER_KEY_TOGGLE |
> + .features = UNIWILL_FEATURE_FN_LOCK |
> + UNIWILL_FEATURE_SUPER_KEY |
> UNIWILL_FEATURE_TOUCHPAD_TOGGLE |
> UNIWILL_FEATURE_BATTERY |
> UNIWILL_FEATURE_HWMON,
> };
>
> static struct uniwill_device_descriptor lapkc71f_descriptor __initdata = {
> - .features = UNIWILL_FEATURE_FN_LOCK_TOGGLE |
> - UNIWILL_FEATURE_SUPER_KEY_TOGGLE |
> + .features = UNIWILL_FEATURE_FN_LOCK |
> + UNIWILL_FEATURE_SUPER_KEY |
> UNIWILL_FEATURE_TOUCHPAD_TOGGLE |
> UNIWILL_FEATURE_LIGHTBAR |
> UNIWILL_FEATURE_BATTERY |
Am 11.02.26 um 01:16 schrieb Werner Sembach:
> Hi,
>
> Am 11.02.26 um 00:29 schrieb Armin Wolf:
>> It turns out that both sysfs attributes actually directly control
>> the FN lock status/super key enable status, rather than the
>> triggering of the associated events. This behavior was first observed
>> on a Tuxedo notebook and was belived to be a hardware quirk.
>> However, it seems that i simply misunderstood the manual of the
>> OEM software for Intel NUC devices. The correct behavior is:
>>
>> - fn_lock_toggle_enable enables/disables FN lock mode
>> - super_key_toggle_enable enables/disables the super key
>>
>> Rename both sysfs attributes to avoid confusing users.
>>
>> Fixes: d050479693bb ("platform/x86: Add Uniwill laptop driver")
>> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
>> ---
>> .../ABI/testing/sysfs-driver-uniwill-laptop | 10 ++--
>> drivers/platform/x86/uniwill/uniwill-acpi.c | 46 +++++++++----------
>> 2 files changed, 27 insertions(+), 29 deletions(-)
>>
>> diff --git a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
>> b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
>> index eaeb659793d2..2df70792968f 100644
>> --- a/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
>> +++ b/Documentation/ABI/testing/sysfs-driver-uniwill-laptop
>> @@ -1,4 +1,4 @@
>> -What: /sys/bus/platform/devices/INOU0000:XX/fn_lock_toggle_enable
>> +What: /sys/bus/platform/devices/INOU0000:XX/fn_lock
>> Date: November 2025
>> KernelVersion: 6.19
>> Contact: Armin Wolf <W_Armin@gmx.de>
>> @@ -8,15 +8,15 @@ Description:
>> Reading this file returns the current enable status of
>> the FN lock functionality.
>> -What: /sys/bus/platform/devices/INOU0000:XX/super_key_toggle_enable
>> +What: /sys/bus/platform/devices/INOU0000:XX/super_key_enable
>> Date: November 2025
>> KernelVersion: 6.19
>> Contact: Armin Wolf <W_Armin@gmx.de>
>> Description:
>> - Allows userspace applications to enable/disable the
>> super key functionality
>> - of the integrated keyboard by writing "1"/"0" into
>> this file.
>> + Allows userspace applications to enable/disable the super
>> key of the integrated
>> + keyboard by writing "1"/"0" into this file.
>> - Reading this file returns the current enable status of the
>> super key functionality.
>> + Reading this file returns the current enable status of the
>> super key.
>> What: /sys/bus/platform/devices/INOU0000:XX/touchpad_toggle_enable
>> Date: November 2025
>> diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c
>> b/drivers/platform/x86/uniwill/uniwill-acpi.c
>> index 3c9af441d133..856d5e38e045 100644
>> --- a/drivers/platform/x86/uniwill/uniwill-acpi.c
>> +++ b/drivers/platform/x86/uniwill/uniwill-acpi.c
>> @@ -314,8 +314,8 @@
>> #define LED_CHANNELS 3
>> #define LED_MAX_BRIGHTNESS 200
>> -#define UNIWILL_FEATURE_FN_LOCK_TOGGLE BIT(0)
>> -#define UNIWILL_FEATURE_SUPER_KEY_TOGGLE BIT(1)
>> +#define UNIWILL_FEATURE_FN_LOCK BIT(0)
>> +#define UNIWILL_FEATURE_SUPER_KEY BIT(1)
>> #define UNIWILL_FEATURE_TOUCHPAD_TOGGLE BIT(2)
>> #define UNIWILL_FEATURE_LIGHTBAR BIT(3)
>> #define UNIWILL_FEATURE_BATTERY BIT(4)
>
> Maybe also rename UNIWILL_OSD_SUPER_KEY_LOCK_ENABLE and
> UNIWILL_OSD_SUPER_KEY_LOCK_DISABLE
>
> Best regards,
>
> Werner
>
Good idea, i also found out that i forgot to update the admin-guide for uniwill laptops. I will
send a v2 addressing both issues.
Thanks,
Armin Wolf
>> @@ -600,8 +600,8 @@ static const struct regmap_config
>> uniwill_ec_config = {
>> .use_single_write = true,
>> };
>> -static ssize_t fn_lock_toggle_enable_store(struct device *dev,
>> struct device_attribute *attr,
>> - const char *buf, size_t count)
>> +static ssize_t fn_lock_store(struct device *dev, struct
>> device_attribute *attr, const char *buf,
>> + size_t count)
>> {
>> struct uniwill_data *data = dev_get_drvdata(dev);
>> unsigned int value;
>> @@ -624,8 +624,7 @@ static ssize_t fn_lock_toggle_enable_store(struct
>> device *dev, struct device_att
>> return count;
>> }
>> -static ssize_t fn_lock_toggle_enable_show(struct device *dev,
>> struct device_attribute *attr,
>> - char *buf)
>> +static ssize_t fn_lock_show(struct device *dev, struct
>> device_attribute *attr, char *buf)
>> {
>> struct uniwill_data *data = dev_get_drvdata(dev);
>> unsigned int value;
>> @@ -638,10 +637,10 @@ static ssize_t
>> fn_lock_toggle_enable_show(struct device *dev, struct device_attr
>> return sysfs_emit(buf, "%d\n", !!(value & FN_LOCK_STATUS));
>> }
>> -static DEVICE_ATTR_RW(fn_lock_toggle_enable);
>> +static DEVICE_ATTR_RW(fn_lock);
>> -static ssize_t super_key_toggle_enable_store(struct device *dev,
>> struct device_attribute *attr,
>> - const char *buf, size_t count)
>> +static ssize_t super_key_enable_store(struct device *dev, struct
>> device_attribute *attr,
>> + const char *buf, size_t count)
>> {
>> struct uniwill_data *data = dev_get_drvdata(dev);
>> unsigned int value;
>> @@ -673,8 +672,7 @@ static ssize_t
>> super_key_toggle_enable_store(struct device *dev, struct device_a
>> return count;
>> }
>> -static ssize_t super_key_toggle_enable_show(struct device *dev,
>> struct device_attribute *attr,
>> - char *buf)
>> +static ssize_t super_key_enable_show(struct device *dev, struct
>> device_attribute *attr, char *buf)
>> {
>> struct uniwill_data *data = dev_get_drvdata(dev);
>> unsigned int value;
>> @@ -687,7 +685,7 @@ static ssize_t
>> super_key_toggle_enable_show(struct device *dev, struct device_at
>> return sysfs_emit(buf, "%d\n", !(value & SUPER_KEY_LOCK_STATUS));
>> }
>> -static DEVICE_ATTR_RW(super_key_toggle_enable);
>> +static DEVICE_ATTR_RW(super_key_enable);
>> static ssize_t touchpad_toggle_enable_store(struct device *dev,
>> struct device_attribute *attr,
>> const char *buf, size_t count)
>> @@ -881,8 +879,8 @@ static int uniwill_nvidia_ctgp_init(struct
>> uniwill_data *data)
>> static struct attribute *uniwill_attrs[] = {
>> /* Keyboard-related */
>> - &dev_attr_fn_lock_toggle_enable.attr,
>> - &dev_attr_super_key_toggle_enable.attr,
>> + &dev_attr_fn_lock.attr,
>> + &dev_attr_super_key_enable.attr,
>> &dev_attr_touchpad_toggle_enable.attr,
>> /* Lightbar-related */
>> &dev_attr_rainbow_animation.attr,
>> @@ -897,13 +895,13 @@ static umode_t uniwill_attr_is_visible(struct
>> kobject *kobj, struct attribute *a
>> struct device *dev = kobj_to_dev(kobj);
>> struct uniwill_data *data = dev_get_drvdata(dev);
>> - if (attr == &dev_attr_fn_lock_toggle_enable.attr) {
>> - if (uniwill_device_supports(data,
>> UNIWILL_FEATURE_FN_LOCK_TOGGLE))
>> + if (attr == &dev_attr_fn_lock.attr) {
>> + if (uniwill_device_supports(data, UNIWILL_FEATURE_FN_LOCK))
>> return attr->mode;
>> }
>> - if (attr == &dev_attr_super_key_toggle_enable.attr) {
>> - if (uniwill_device_supports(data,
>> UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
>> + if (attr == &dev_attr_super_key_enable.attr) {
>> + if (uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
>> return attr->mode;
>> }
>> @@ -1505,7 +1503,7 @@ static void uniwill_shutdown(struct
>> platform_device *pdev)
>> static int uniwill_suspend_keyboard(struct uniwill_data *data)
>> {
>> - if (!uniwill_device_supports(data,
>> UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
>> + if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
>> return 0;
>> /*
>> @@ -1565,7 +1563,7 @@ static int uniwill_resume_keyboard(struct
>> uniwill_data *data)
>> unsigned int value;
>> int ret;
>> - if (!uniwill_device_supports(data,
>> UNIWILL_FEATURE_SUPER_KEY_TOGGLE))
>> + if (!uniwill_device_supports(data, UNIWILL_FEATURE_SUPER_KEY))
>> return 0;
>> ret = regmap_read(data->regmap, EC_ADDR_SWITCH_STATUS, &value);
>> @@ -1643,16 +1641,16 @@ static struct platform_driver uniwill_driver = {
>> };
>> static struct uniwill_device_descriptor lapac71h_descriptor
>> __initdata = {
>> - .features = UNIWILL_FEATURE_FN_LOCK_TOGGLE |
>> - UNIWILL_FEATURE_SUPER_KEY_TOGGLE |
>> + .features = UNIWILL_FEATURE_FN_LOCK |
>> + UNIWILL_FEATURE_SUPER_KEY |
>> UNIWILL_FEATURE_TOUCHPAD_TOGGLE |
>> UNIWILL_FEATURE_BATTERY |
>> UNIWILL_FEATURE_HWMON,
>> };
>> static struct uniwill_device_descriptor lapkc71f_descriptor
>> __initdata = {
>> - .features = UNIWILL_FEATURE_FN_LOCK_TOGGLE |
>> - UNIWILL_FEATURE_SUPER_KEY_TOGGLE |
>> + .features = UNIWILL_FEATURE_FN_LOCK |
>> + UNIWILL_FEATURE_SUPER_KEY |
>> UNIWILL_FEATURE_TOUCHPAD_TOGGLE |
>> UNIWILL_FEATURE_LIGHTBAR |
>> UNIWILL_FEATURE_BATTERY |
© 2016 - 2026 Red Hat, Inc.