platform/x86: ideapad-laptop: check for Fn-lock support in HALS
authorBarnabás Pőcze <pobrn@protonmail.com>
Wed, 3 Feb 2021 21:56:16 +0000 (21:56 +0000)
committerHans de Goede <hdegoede@redhat.com>
Thu, 4 Feb 2021 09:21:17 +0000 (10:21 +0100)
Bit 9 in the return value of the HALS ACPI method is set if
Fn-lock is supported. Change ideapad_check_features() to check it.

Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20210203215403.290792-20-pobrn@protonmail.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/ideapad-laptop.c

index 509f252..d63c19f 100644 (file)
@@ -57,7 +57,9 @@ enum {
 };
 
 enum {
-       HALS_FNLOCK_STATE_BIT = 10,
+       HALS_FNLOCK_SUPPORT_BIT  = 9,
+       HALS_FNLOCK_STATE_BIT    = 10,
+       HALS_HOTKEYS_PRIMARY_BIT = 11,
 };
 
 enum {
@@ -1290,8 +1292,12 @@ static void ideapad_check_features(struct ideapad_private *priv)
        if (acpi_has_method(handle, "DYTC"))
                priv->features.dytc = true;
 
-       if (acpi_has_method(handle, "HALS") && acpi_has_method(handle, "SALS"))
-               priv->features.fn_lock = true;
+       if (acpi_has_method(handle, "HALS") && acpi_has_method(handle, "SALS")) {
+               if (!eval_hals(handle, &val)) {
+                       if (test_bit(HALS_FNLOCK_SUPPORT_BIT, &val))
+                               priv->features.fn_lock = true;
+               }
+       }
 }
 
 static int ideapad_acpi_add(struct platform_device *pdev)