lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 172/231] platform/x86: thinkpad-acpi: profile capabilities as integer
    Date
    From: Mark Pearson <markpearson@lenovo.com>

    [ Upstream commit 42504af775361ca2330a2bfde496a5ebc5655c86 ]

    Currently the active mode (PSC/MMC) is stored in an enum and queried
    throughout the driver.

    Other driver changes will enumerate additional submodes that are relevant
    to be tracked, so instead track PSC/MMC in a single integer variable.

    Co-developed-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Mark Pearson <markpearson@lenovo.com>
    Link: https://lore.kernel.org/r/20220603170212.164963-1-markpearson@lenovo.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/thinkpad_acpi.c | 45 ++++++++++++++---------------------
    1 file changed, 18 insertions(+), 27 deletions(-)

    --- a/drivers/platform/x86/thinkpad_acpi.c
    +++ b/drivers/platform/x86/thinkpad_acpi.c
    @@ -10300,21 +10300,15 @@ static struct ibm_struct proxsensor_driv
    #define DYTC_DISABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_MMC_BALANCE, 0)
    #define DYTC_ENABLE_CQL DYTC_SET_COMMAND(DYTC_FUNCTION_CQL, DYTC_MODE_MMC_BALANCE, 1)

    -enum dytc_profile_funcmode {
    - DYTC_FUNCMODE_NONE = 0,
    - DYTC_FUNCMODE_MMC,
    - DYTC_FUNCMODE_PSC,
    -};
    -
    -static enum dytc_profile_funcmode dytc_profile_available;
    static enum platform_profile_option dytc_current_profile;
    static atomic_t dytc_ignore_event = ATOMIC_INIT(0);
    static DEFINE_MUTEX(dytc_mutex);
    +static int dytc_capabilities;
    static bool dytc_mmc_get_available;

    static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *profile)
    {
    - if (dytc_profile_available == DYTC_FUNCMODE_MMC) {
    + if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
    switch (dytcmode) {
    case DYTC_MODE_MMC_LOWPOWER:
    *profile = PLATFORM_PROFILE_LOW_POWER;
    @@ -10331,7 +10325,7 @@ static int convert_dytc_to_profile(int d
    }
    return 0;
    }
    - if (dytc_profile_available == DYTC_FUNCMODE_PSC) {
    + if (dytc_capabilities & BIT(DYTC_FC_PSC)) {
    switch (dytcmode) {
    case DYTC_MODE_PSC_LOWPOWER:
    *profile = PLATFORM_PROFILE_LOW_POWER;
    @@ -10353,21 +10347,21 @@ static int convert_profile_to_dytc(enum
    {
    switch (profile) {
    case PLATFORM_PROFILE_LOW_POWER:
    - if (dytc_profile_available == DYTC_FUNCMODE_MMC)
    + if (dytc_capabilities & BIT(DYTC_FC_MMC))
    *perfmode = DYTC_MODE_MMC_LOWPOWER;
    - else if (dytc_profile_available == DYTC_FUNCMODE_PSC)
    + else if (dytc_capabilities & BIT(DYTC_FC_PSC))
    *perfmode = DYTC_MODE_PSC_LOWPOWER;
    break;
    case PLATFORM_PROFILE_BALANCED:
    - if (dytc_profile_available == DYTC_FUNCMODE_MMC)
    + if (dytc_capabilities & BIT(DYTC_FC_MMC))
    *perfmode = DYTC_MODE_MMC_BALANCE;
    - else if (dytc_profile_available == DYTC_FUNCMODE_PSC)
    + else if (dytc_capabilities & BIT(DYTC_FC_PSC))
    *perfmode = DYTC_MODE_PSC_BALANCE;
    break;
    case PLATFORM_PROFILE_PERFORMANCE:
    - if (dytc_profile_available == DYTC_FUNCMODE_MMC)
    + if (dytc_capabilities & BIT(DYTC_FC_MMC))
    *perfmode = DYTC_MODE_MMC_PERFORM;
    - else if (dytc_profile_available == DYTC_FUNCMODE_PSC)
    + else if (dytc_capabilities & BIT(DYTC_FC_PSC))
    *perfmode = DYTC_MODE_PSC_PERFORM;
    break;
    default: /* Unknown profile */
    @@ -10446,7 +10440,7 @@ static int dytc_profile_set(struct platf
    if (err)
    goto unlock;

    - if (dytc_profile_available == DYTC_FUNCMODE_MMC) {
    + if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
    if (profile == PLATFORM_PROFILE_BALANCED) {
    /*
    * To get back to balanced mode we need to issue a reset command.
    @@ -10465,7 +10459,7 @@ static int dytc_profile_set(struct platf
    goto unlock;
    }
    }
    - if (dytc_profile_available == DYTC_FUNCMODE_PSC) {
    + if (dytc_capabilities & BIT(DYTC_FC_PSC)) {
    err = dytc_command(DYTC_SET_COMMAND(DYTC_FUNCTION_PSC, perfmode, 1), &output);
    if (err)
    goto unlock;
    @@ -10484,12 +10478,12 @@ static void dytc_profile_refresh(void)
    int perfmode;

    mutex_lock(&dytc_mutex);
    - if (dytc_profile_available == DYTC_FUNCMODE_MMC) {
    + if (dytc_capabilities & BIT(DYTC_FC_MMC)) {
    if (dytc_mmc_get_available)
    err = dytc_command(DYTC_CMD_MMC_GET, &output);
    else
    err = dytc_cql_command(DYTC_CMD_GET, &output);
    - } else if (dytc_profile_available == DYTC_FUNCMODE_PSC)
    + } else if (dytc_capabilities & BIT(DYTC_FC_PSC))
    err = dytc_command(DYTC_CMD_GET, &output);

    mutex_unlock(&dytc_mutex);
    @@ -10518,7 +10512,6 @@ static int tpacpi_dytc_profile_init(stru
    set_bit(PLATFORM_PROFILE_BALANCED, dytc_profile.choices);
    set_bit(PLATFORM_PROFILE_PERFORMANCE, dytc_profile.choices);

    - dytc_profile_available = DYTC_FUNCMODE_NONE;
    err = dytc_command(DYTC_CMD_QUERY, &output);
    if (err)
    return err;
    @@ -10531,13 +10524,12 @@ static int tpacpi_dytc_profile_init(stru
    return -ENODEV;

    /* Check what capabilities are supported */
    - err = dytc_command(DYTC_CMD_FUNC_CAP, &output);
    + err = dytc_command(DYTC_CMD_FUNC_CAP, &dytc_capabilities);
    if (err)
    return err;

    - if (output & BIT(DYTC_FC_MMC)) { /* MMC MODE */
    - dytc_profile_available = DYTC_FUNCMODE_MMC;
    -
    + if (dytc_capabilities & BIT(DYTC_FC_MMC)) { /* MMC MODE */
    + pr_debug("MMC is supported\n");
    /*
    * Check if MMC_GET functionality available
    * Version > 6 and return success from MMC_GET command
    @@ -10548,8 +10540,8 @@ static int tpacpi_dytc_profile_init(stru
    if (!err && ((output & DYTC_ERR_MASK) == DYTC_ERR_SUCCESS))
    dytc_mmc_get_available = true;
    }
    - } else if (output & BIT(DYTC_FC_PSC)) { /* PSC MODE */
    - dytc_profile_available = DYTC_FUNCMODE_PSC;
    + } else if (dytc_capabilities & BIT(DYTC_FC_PSC)) { /* PSC MODE */
    + pr_debug("PSC is supported\n");
    } else {
    dbg_printk(TPACPI_DBG_INIT, "No DYTC support available\n");
    return -ENODEV;
    @@ -10575,7 +10567,6 @@ static int tpacpi_dytc_profile_init(stru

    static void dytc_profile_exit(void)
    {
    - dytc_profile_available = DYTC_FUNCMODE_NONE;
    platform_profile_remove();
    }


    \
     
     \ /
      Last update: 2022-07-19 15:06    [W:4.181 / U:0.488 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site