lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 748/862] platform/x86: hp-wmi: Setting thermal profile fails with 0x06
    Date
    From: Jorge Lopez <jorge.lopez2@hp.com>

    [ Upstream commit 00b1829294b7c88ecba92c661fbe6fe347b364d2 ]

    Error 0x06 (invalid command parameter) is reported by hp-wmi module
    when reading the current thermal profile and then proceed to set it
    back. The failing condition occurs in Linux NixOS after user
    configures the thermal profile to ‘quiet mode’ in Windows. Quiet Fan
    Mode is supported in Windows but was not supported in hp-wmi module.

    This fix adds support for PLATFORM_PROFILE_QUIET in hp-wmi module for
    HP notebooks other than HP Omen series. Quiet thermal profile is not
    supported in HP Omen series notebooks.

    Signed-off-by: Jorge Lopez <jorge.lopez2@hp.com>
    Link: https://lore.kernel.org/r/20220912192603.4001-1-jorge.lopez2@hp.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/platform/x86/hp-wmi.c | 11 ++++++++++-
    1 file changed, 10 insertions(+), 1 deletion(-)

    diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
    index bc7020e9df9e..fc8dbbd6fc7c 100644
    --- a/drivers/platform/x86/hp-wmi.c
    +++ b/drivers/platform/x86/hp-wmi.c
    @@ -177,7 +177,8 @@ enum hp_thermal_profile_omen_v1 {
    enum hp_thermal_profile {
    HP_THERMAL_PROFILE_PERFORMANCE = 0x00,
    HP_THERMAL_PROFILE_DEFAULT = 0x01,
    - HP_THERMAL_PROFILE_COOL = 0x02
    + HP_THERMAL_PROFILE_COOL = 0x02,
    + HP_THERMAL_PROFILE_QUIET = 0x03,
    };

    #define IS_HWBLOCKED(x) ((x & HPWMI_POWER_FW_OR_HW) != HPWMI_POWER_FW_OR_HW)
    @@ -1194,6 +1195,9 @@ static int hp_wmi_platform_profile_get(struct platform_profile_handler *pprof,
    case HP_THERMAL_PROFILE_COOL:
    *profile = PLATFORM_PROFILE_COOL;
    break;
    + case HP_THERMAL_PROFILE_QUIET:
    + *profile = PLATFORM_PROFILE_QUIET;
    + break;
    default:
    return -EINVAL;
    }
    @@ -1216,6 +1220,9 @@ static int hp_wmi_platform_profile_set(struct platform_profile_handler *pprof,
    case PLATFORM_PROFILE_COOL:
    tp = HP_THERMAL_PROFILE_COOL;
    break;
    + case PLATFORM_PROFILE_QUIET:
    + tp = HP_THERMAL_PROFILE_QUIET;
    + break;
    default:
    return -EOPNOTSUPP;
    }
    @@ -1263,6 +1270,8 @@ static int thermal_profile_setup(void)

    platform_profile_handler.profile_get = hp_wmi_platform_profile_get;
    platform_profile_handler.profile_set = hp_wmi_platform_profile_set;
    +
    + set_bit(PLATFORM_PROFILE_QUIET, platform_profile_handler.choices);
    }

    set_bit(PLATFORM_PROFILE_COOL, platform_profile_handler.choices);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 11:37    [W:5.234 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site