Message ID | 20220603170212.164963-1-markpearson@lenovo.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | [1/4] platform/x86: thinkpad-acpi: profile capabilities as integer | expand |
Hi, On 6/3/22 19:02, Mark Pearson wrote: > 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> Thank you for your patch-series, I've applied the series to my review-hans branch: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans Note it will show up in my review-hans branch once I've pushed my local branch there, which might take a while. Once I've run some tests on this branch the patches there will be added to the platform-drivers-x86/for-next branch and eventually will be included in the pdx86 pull-request to Linus for the next merge-window. Regards, Hans > --- > drivers/platform/x86/thinkpad_acpi.c | 45 +++++++++++----------------- > 1 file changed, 18 insertions(+), 27 deletions(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c > index e6cb4a14cdd4..5d1e0a3a5c1e 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -10299,21 +10299,15 @@ static struct ibm_struct proxsensor_driver_data = { > #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; > @@ -10330,7 +10324,7 @@ static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *p > } > 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; > @@ -10352,21 +10346,21 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe > { > 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 */ > @@ -10445,7 +10439,7 @@ static int dytc_profile_set(struct platform_profile_handler *pprof, > 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. > @@ -10464,7 +10458,7 @@ static int dytc_profile_set(struct platform_profile_handler *pprof, > 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; > @@ -10483,12 +10477,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); > @@ -10517,7 +10511,6 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) > 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; > @@ -10530,13 +10523,12 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) > 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 > @@ -10547,8 +10539,8 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) > 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; > @@ -10574,7 +10566,6 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) > > static void dytc_profile_exit(void) > { > - dytc_profile_available = DYTC_FUNCMODE_NONE; > platform_profile_remove(); > } >
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index e6cb4a14cdd4..5d1e0a3a5c1e 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -10299,21 +10299,15 @@ static struct ibm_struct proxsensor_driver_data = { #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; @@ -10330,7 +10324,7 @@ static int convert_dytc_to_profile(int dytcmode, enum platform_profile_option *p } 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; @@ -10352,21 +10346,21 @@ static int convert_profile_to_dytc(enum platform_profile_option profile, int *pe { 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 */ @@ -10445,7 +10439,7 @@ static int dytc_profile_set(struct platform_profile_handler *pprof, 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. @@ -10464,7 +10458,7 @@ static int dytc_profile_set(struct platform_profile_handler *pprof, 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; @@ -10483,12 +10477,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); @@ -10517,7 +10511,6 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) 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; @@ -10530,13 +10523,12 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) 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 @@ -10547,8 +10539,8 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) 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; @@ -10574,7 +10566,6 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) static void dytc_profile_exit(void) { - dytc_profile_available = DYTC_FUNCMODE_NONE; platform_profile_remove(); }