[PATCH 1/5] platform/x86: uniwill-laptop: Rename FN lock and super key lock attrs

Armin Wolf posted 5 patches 1 month, 2 weeks ago
There is a newer version of this series
[PATCH 1/5] platform/x86: uniwill-laptop: Rename FN lock and super key lock attrs
Posted by Armin Wolf 1 month, 2 weeks ago
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
Re: [PATCH 1/5] platform/x86: uniwill-laptop: Rename FN lock and super key lock attrs
Posted by Werner Sembach 1 month, 2 weeks ago
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 |
Re: [PATCH 1/5] platform/x86: uniwill-laptop: Rename FN lock and super key lock attrs
Posted by Armin Wolf 1 month, 2 weeks ago
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 |