Re: [PATCH] platform/x86: asus-wmi: try to set als by default

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 28, 2017 at 5:19 PM, Oleksij Rempel <linux@xxxxxxxxxxxxxxxx> wrote:
> some laptops, for example ASUS UX330UAK, have brocken als_get function
> but working als_set funktion. In this case, ALS will stay turned off.
>
>              Method (WMNB, 3, Serialized)
>             {
>             ...
>                If (Local0 == 0x53545344)
>                 {
>                 ...
>                     If (IIA0 == 0x00050001)
>                     {
>                         If (!ALSP)
>                         {
>                             Return (0x02)
>                         }
>
>                         Local0 = (GALS & 0x10)    <<<---- bug,
>                                                     should be: (GALS () & 0x10)
>                         If (Local0)
>                         {
>                             Return (0x00050001)
>                         }
>                         Else
>                         {
>                             Return (0x00050000)
>                         }
>                     }
>
>              .....
>                 If (Local0 == 0x53564544)
>                 {
>                 ...
>                     If (IIA0 == 0x00050001)
>                     {
>                         Return (ALSC (IIA1))
>                     }
>
>                   ......
>                     Method (GALS, 0, NotSerialized)
>                     {
>                         Local0 = Zero
>                         Local0 |= 0x20
>                         If (ALAE)
>                         {
>                             Local0 |= 0x10
>                         }
>
>                         Local1 = 0x0A
>                         Local1 <<= 0x08
>                         Local0 |= Local1
>                         Return (Local0)
>                     }
>
> Since it works without problems on Windows I assume ASUS WMI driver for Win
> never trying to get ALS state, and instead it is setting it by default to ON.
>
> This patch will do the same. Turn ALS on by default.
>
> Signed-off-by: Oleksij Rempel <linux@xxxxxxxxxxxxxxxx>

Pushed to testing, thanks.

> ---
>  drivers/platform/x86/asus-nb-wmi.c | 13 +++++++++++++
>  drivers/platform/x86/asus-wmi.c    | 12 ++++++++++++
>  drivers/platform/x86/asus-wmi.h    |  1 +
>  3 files changed, 26 insertions(+)
>
> diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c
> index dea98ffb6f60..e030a8d470a4 100644
> --- a/drivers/platform/x86/asus-nb-wmi.c
> +++ b/drivers/platform/x86/asus-nb-wmi.c
> @@ -111,6 +111,10 @@ static struct quirk_entry quirk_asus_x550lb = {
>         .xusb2pr = 0x01D9,
>  };
>
> +static struct quirk_entry quirk_asus_ux330uak = {
> +       .wmi_force_als_set = true,
> +};
> +
>  static int dmi_matched(const struct dmi_system_id *dmi)
>  {
>         pr_info("Identified laptop model '%s'\n", dmi->ident);
> @@ -369,6 +373,15 @@ static const struct dmi_system_id asus_quirks[] = {
>         },
>         {
>                 .callback = dmi_matched,
> +               .ident = "ASUSTeK COMPUTER INC. UX330UAK",
> +               .matches = {
> +                       DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
> +                       DMI_MATCH(DMI_PRODUCT_NAME, "UX330UAK"),
> +               },
> +               .driver_data = &quirk_asus_ux330uak,
> +       },
> +       {
> +               .callback = dmi_matched,
>                 .ident = "ASUSTeK COMPUTER INC. X550LB",
>                 .matches = {
>                         DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 8fe5890bf539..9d3dac30cb08 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -1109,6 +1109,15 @@ static void asus_wmi_set_xusb2pr(struct asus_wmi *asus)
>  }
>
>  /*
> + * Some devices dont support or have borcken get_als method
> + * but still support set method.
> + */
> +static void asus_wmi_set_als(void)
> +{
> +       asus_wmi_set_devstate(ASUS_WMI_DEVID_ALS_ENABLE, 1, NULL);
> +}
> +
> +/*
>   * Hwmon device
>   */
>  static int asus_hwmon_agfn_fan_speed_read(struct asus_wmi *asus, int fan,
> @@ -2117,6 +2126,9 @@ static int asus_wmi_add(struct platform_device *pdev)
>                         goto fail_rfkill;
>         }
>
> +       if (asus->driver->quirks->wmi_force_als_set)
> +               asus_wmi_set_als();
> +
>         /* Some Asus desktop boards export an acpi-video backlight interface,
>            stop this from showing up */
>         chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
> diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h
> index c9589d9342bb..6c1311f4b04d 100644
> --- a/drivers/platform/x86/asus-wmi.h
> +++ b/drivers/platform/x86/asus-wmi.h
> @@ -44,6 +44,7 @@ struct quirk_entry {
>         bool store_backlight_power;
>         bool wmi_backlight_power;
>         bool wmi_backlight_native;
> +       bool wmi_force_als_set;
>         int wapf;
>         /*
>          * For machines with AMD graphic chips, it will send out WMI event
> --
> 2.11.0
>



-- 
With Best Regards,
Andy Shevchenko



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux