From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Radhey Kalra <radheykalra901@gmail.com>
Cc: platform-driver-x86@vger.kernel.org,
Hans de Goede <hansg@kernel.org>,
krishna.chomal108@gmail.com
Subject: Re: [PATCH v9 1/3] platform/x86: hp-wmi: Introduce board-specific feature data
Date: Wed, 10 Jun 2026 12:22:37 +0300 (EEST) [thread overview]
Message-ID: <03f68166-5b76-8fbf-5782-048a0e3d1c8a@linux.intel.com> (raw)
In-Reply-To: <20260606080204.724444-2-radheykalra901@gmail.com>
On Sat, 6 Jun 2026, Radhey Kalra wrote:
> The hp_wmi DMI table is about to carry more than thermal-profile data.
> Replace the direct thermal_profile_params .driver_data pointers with
> hp_wmi_board_params and rename the table/setup helper accordingly.
>
> No functional changes intended.
>
> Signed-off-by: Radhey Kalra <radheykalra901@gmail.com>
> ---
> drivers/platform/x86/hp/hp-wmi.c | 121 ++++++++++++++++++++-----------
> 1 file changed, 77 insertions(+), 44 deletions(-)
>
> diff --git a/drivers/platform/x86/hp/hp-wmi.c b/drivers/platform/x86/hp/hp-wmi.c
> index 48292cc..4a795e6 100644
> --- a/drivers/platform/x86/hp/hp-wmi.c
> +++ b/drivers/platform/x86/hp/hp-wmi.c
> @@ -133,11 +133,35 @@ static const struct thermal_profile_params omen_v1_no_ec_thermal_params = {
> .ec_tp_offset = HP_NO_THERMAL_PROFILE_OFFSET,
> };
>
> -/*
> - * A generic pointer for the currently-active board's thermal profile
> - * parameters.
> - */
> -static struct thermal_profile_params *active_thermal_profile_params;
> +struct hp_wmi_board_params {
> + const struct thermal_profile_params *thermal_profile;
> +};
> +
> +static const struct hp_wmi_board_params victus_s_board_params = {
> + .thermal_profile = &victus_s_thermal_params,
> +};
> +
> +static const struct hp_wmi_board_params omen_v1_board_params = {
> + .thermal_profile = &omen_v1_thermal_params,
> +};
> +
> +static const struct hp_wmi_board_params omen_v1_legacy_board_params = {
> + .thermal_profile = &omen_v1_legacy_thermal_params,
> +};
> +
> +static const struct hp_wmi_board_params omen_v1_no_ec_board_params = {
> + .thermal_profile = &omen_v1_no_ec_thermal_params,
> +};
> +
> +static const struct hp_wmi_board_params *active_board_params;
> +
> +static const struct thermal_profile_params *hp_wmi_thermal_profile(void)
> +{
> + if (!active_board_params)
> + return NULL;
> +
> + return active_board_params->thermal_profile;
> +}
>
> /* DMI board names of devices that should use the omen specific path for
> * thermal profiles.
> @@ -187,75 +211,75 @@ static const char * const victus_thermal_profile_boards[] = {
> "8A25",
> };
>
> -/* DMI Board names of Victus 16-r and Victus 16-s laptops */
> -static const struct dmi_system_id victus_s_thermal_profile_boards[] __initconst = {
> +/* DMI board-specific feature data for Omen and Victus laptops. */
> +static const struct dmi_system_id hp_wmi_feature_boards[] __initconst = {
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8902") },
> - .driver_data = (void *)&omen_v1_legacy_thermal_params,
> + .driver_data = (void *)&omen_v1_legacy_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8A44") },
> - .driver_data = (void *)&omen_v1_legacy_thermal_params,
> + .driver_data = (void *)&omen_v1_legacy_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8A4D") },
> - .driver_data = (void *)&omen_v1_legacy_thermal_params,
> + .driver_data = (void *)&omen_v1_legacy_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BAB") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BBE") },
> - .driver_data = (void *)&victus_s_thermal_params,
> + .driver_data = (void *)&victus_s_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BC2") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BCA") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BCD") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BD4") },
> - .driver_data = (void *)&victus_s_thermal_params,
> + .driver_data = (void *)&victus_s_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8BD5") },
> - .driver_data = (void *)&victus_s_thermal_params,
> + .driver_data = (void *)&victus_s_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8C76") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8C77") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8C78") },
> - .driver_data = (void *)&omen_v1_thermal_params,
> + .driver_data = (void *)&omen_v1_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8C99") },
> - .driver_data = (void *)&victus_s_thermal_params,
> + .driver_data = (void *)&victus_s_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8C9C") },
> - .driver_data = (void *)&victus_s_thermal_params,
> + .driver_data = (void *)&victus_s_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8D41") },
> - .driver_data = (void *)&omen_v1_no_ec_thermal_params,
> + .driver_data = (void *)&omen_v1_no_ec_board_params,
> },
> {
> .matches = { DMI_MATCH(DMI_BOARD_NAME, "8D87") },
> - .driver_data = (void *)&omen_v1_no_ec_thermal_params,
> + .driver_data = (void *)&omen_v1_no_ec_board_params,
> },
> {},
> };
Could you do a rebase for this as there are a few ID additions in the
for-next branch so I don't need to handle the conversion myself.
> @@ -1862,7 +1886,10 @@ static int platform_profile_victus_s_get_ec(enum platform_profile_option *profil
> u8 current_dstate, current_gpu_slowdown_temp, tp;
> const struct thermal_profile_params *params;
>
> - params = active_thermal_profile_params;
> + params = hp_wmi_thermal_profile();
> + if (!params)
> + return -ENODEV;
> +
> if (params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN ||
> params->ec_tp_offset == HP_NO_THERMAL_PROFILE_OFFSET) {
> *profile = active_platform_profile;
> @@ -1874,10 +1901,10 @@ static int platform_profile_victus_s_get_ec(enum platform_profile_option *profil
> return ret;
>
> /*
> - * We cannot use active_thermal_profile_params here, because boards
> - * like 8C78 have tp == 0x0 || tp == 0x1 after cold boot, but logically
> - * it should have tp == 0x30 || tp == 0x31, as corrected by the Omen
> - * Gaming Hub on windows. Hence accept both of these values.
> + * Boards like 8C78 have tp == 0x0 || tp == 0x1 after cold boot,
> + * but logically it should have tp == 0x30 || tp == 0x31, as
> + * corrected by the Omen Gaming Hub on windows. Hence accept both
> + * of these values.
> */
> if (tp == victus_s_thermal_params.performance ||
> tp == omen_v1_thermal_params.performance) {
> @@ -1912,12 +1939,12 @@ static int platform_profile_victus_s_get_ec(enum platform_profile_option *profil
>
> static int platform_profile_victus_s_set_ec(enum platform_profile_option profile)
> {
> - struct thermal_profile_params *params;
> + const struct thermal_profile_params *params;
> bool gpu_ctgp_enable, gpu_ppab_enable;
> u8 gpu_dstate; /* Test shows 1 = 100%, 2 = 50%, 3 = 25%, 4 = 12.5% */
> int err, tp;
>
> - params = active_thermal_profile_params;
> + params = hp_wmi_thermal_profile();
> if (!params)
> return -ENODEV;
>
> @@ -2183,6 +2210,7 @@ static const struct platform_profile_ops hp_wmi_platform_profile_ops = {
> static int thermal_profile_setup(struct platform_device *device)
> {
> const struct platform_profile_ops *ops;
> + const struct thermal_profile_params *params;
> int err, tp;
>
> if (is_omen_thermal_profile()) {
> @@ -2214,13 +2242,17 @@ static int thermal_profile_setup(struct platform_device *device)
>
> ops = &platform_profile_victus_ops;
> } else if (is_victus_s_thermal_profile()) {
> + params = hp_wmi_thermal_profile();
> + if (!params)
> + return -ENODEV;
> +
> /*
> * For an unknown EC layout board, platform_profile_victus_s_get_ec(),
> * behaves like a wrapper around active_platform_profile, to avoid using
> * uninitialized data, we default to PLATFORM_PROFILE_BALANCED.
> */
> - if (active_thermal_profile_params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN ||
> - active_thermal_profile_params->ec_tp_offset == HP_NO_THERMAL_PROFILE_OFFSET) {
> + if (params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN ||
> + params->ec_tp_offset == HP_NO_THERMAL_PROFILE_OFFSET) {
> active_platform_profile = PLATFORM_PROFILE_BALANCED;
> } else {
> err = platform_profile_victus_s_get_ec(&active_platform_profile);
> @@ -2681,24 +2713,25 @@ static int hp_wmi_hwmon_init(void)
> return 0;
> }
>
> -static void __init setup_active_thermal_profile_params(void)
> +static void __init setup_active_board_params(void)
> {
> const struct dmi_system_id *id;
> + const struct thermal_profile_params *params;
>
> - /*
> - * Currently only victus_s devices use the
> - * active_thermal_profile_params
> - */
> - id = dmi_first_match(victus_s_thermal_profile_boards);
> + id = dmi_first_match(hp_wmi_feature_boards);
> if (id) {
> + active_board_params = id->driver_data;
> + params = hp_wmi_thermal_profile();
> + if (!params)
> + return;
> +
> /*
> * Marking this boolean is required to ensure that
> * is_victus_s_thermal_profile() behaves like a valid
> * wrapper.
> */
> is_victus_s_board = true;
> - active_thermal_profile_params = id->driver_data;
> - if (active_thermal_profile_params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN) {
> + if (params->ec_tp_offset == HP_EC_OFFSET_UNKNOWN) {
> pr_warn("Unknown EC layout for board %s. Thermal profile readback will be disabled. Please report this to platform-driver-x86@vger.kernel.org\n",
> dmi_get_system_info(DMI_BOARD_NAME));
> }
> @@ -2733,10 +2766,10 @@ static int __init hp_wmi_init(void)
> }
>
> /*
> - * Setup active board's thermal profile parameters before
> - * starting platform driver probe.
> + * Setup active board feature data before starting platform
> + * driver probe.
> */
> - setup_active_thermal_profile_params();
> + setup_active_board_params();
> err = platform_driver_probe(&hp_wmi_driver, hp_wmi_bios_setup);
> if (err)
> goto err_unregister_device;
>
--
i.
next prev parent reply other threads:[~2026-06-10 9:23 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-06 8:01 [PATCH v9 0/3] platform/x86: hp-wmi: Add Victus 15-fb0xxx support Radhey Kalra
2026-06-06 8:01 ` [PATCH v9 1/3] platform/x86: hp-wmi: Introduce board-specific feature data Radhey Kalra
2026-06-10 9:22 ` Ilpo Järvinen [this message]
2026-06-10 10:18 ` Radhey Kalra
2026-06-10 10:31 ` Ilpo Järvinen
2026-06-10 10:34 ` Radhey Kalra
2026-06-06 8:01 ` [PATCH v9 2/3] platform/x86: hp-wmi: Drive fan control from board data Radhey Kalra
2026-06-06 8:01 ` [PATCH v9 3/3] platform/x86: hp-wmi: Add Victus 15-fb0xxx support Radhey Kalra
2026-06-10 9:21 ` Ilpo Järvinen
2026-06-10 10:18 ` Radhey Kalra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=03f68166-5b76-8fbf-5782-048a0e3d1c8a@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=hansg@kernel.org \
--cc=krishna.chomal108@gmail.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=radheykalra901@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.