X86 platform drivers
 help / color / mirror / Atom feed
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 13:31:54 +0300 (EEST)	[thread overview]
Message-ID: <457b00e5-ac64-f424-8a73-28d5976dba1d@linux.intel.com> (raw)
In-Reply-To: <CAJ5VyXKzub-1hu2Wbmt8HeP7J6uRQjyiAzVHz3ef9muicqFy1A@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 13642 bytes --]

On Wed, 10 Jun 2026, Radhey Kalra wrote:

> Hi Ilpo,
> 
> Will do. I'll rebase this series against for-next and send v10 shortly.

It seems I had a problem in my end, so all the ID changes are only now in 
for-next. I'm sorry about the extra hassle.

--
 i.

> Thanks, Radhey
> 
> 
> On Wed, Jun 10, 2026 at 2:53 PM Ilpo Järvinen
> <ilpo.jarvinen@linux.intel.com> wrote:
> >
> > 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.
> >
> 

  reply	other threads:[~2026-06-10 10:32 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
2026-06-10 10:18     ` Radhey Kalra
2026-06-10 10:31       ` Ilpo Järvinen [this message]
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=457b00e5-ac64-f424-8a73-28d5976dba1d@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox