Re: [PATCH v2] platform/x86: acer-wmi: Add support for Acer Nitro ANV15-51

Justin Vargas <[email protected]> Fri, 31 Jul 2026 03:15:16 -0400
Newsgroups org.kernel.vger.platform-driver-x86,org.kernel.vger.linux-kernel
Message-ID <CADkD=u7ADLuLrVcHYGFmy=3j1VDVYhx8+dA4YrJcoObtCqzauQ@mail.gmail.com>
> can you create a custom quirk entry and check if controlling the CPU/GPU =
fans
> works? For this you need to fill-in the number of CPU/GPU fans inside str=
uct
> quirk_entry and set "pwm" to "1".
>
> I think fo something like "quirk_acer_predator_ph16_72", just without ".t=
ubo =3D 1".

Happy to. Based on sensors output with predator_v4=3D1 loaded, this machine=
 has
two fans (fan1 and fan2 under acer-isa-0ace), so the quirk would be:

static struct quirk_entry quirk_acer_nitro_anv15_51 =3D {
    .cpu_fans =3D 1,
    .gpu_fans =3D 1,
    .predator_v4 =3D 1,
    .pwm =3D 1,
};

On testing: this laptop runs Windows day to day, and my earlier results cam=
e
from a live USB session, which turns out not to work for loading a self-bui=
lt
module - the live image's kernel and the current repo headers are different
versions. I'm setting up a persistent Linux install on a separate drive so =
I
can build and load a patched module properly, but I've hit some snags there=
.

So it will likely be about a week before I can report back on fan control. =
If
you'd rather not wait, I'm equally happy for the patch to go in as tested w=
ith
&quirk_acer_predator_v4, and to follow up with a separate patch adding the =
fan
fields once I've verified them.

Either way I'll report back with results rather than leaving it open.

Thanks,
Justin

On Thu, Jul 30, 2026 at 10:05=E2=80=AFAM Justin Vargas <[email protected]=
m> wrote:
>
> > can you create a custom quirk entry and check if controlling the CPU/GP=
U fans
> > works? For this you need to fill-in the number of CPU/GPU fans inside s=
truct
> > quirk_entry and set "pwm" to "1".
> >
> > I think fo something like "quirk_acer_predator_ph16_72", just without "=
.tubo =3D 1".
>
> Sure. The machine has two fans - with predator_v4=3D1 loaded, sensors rep=
orts
> fan1 and fan2 under acer-isa-0ace - so I'll use:
>
> static struct quirk_entry quirk_acer_nitro_anv15_51 =3D {
>     .cpu_fans =3D 1,
>     .gpu_fans =3D 1,
>     .predator_v4 =3D 1,
>     .pwm =3D 1,
> };
>
> One note on timing: this laptop runs Windows day to day and I've been tes=
ting
> from a live USB, so I need to set up an environment that can build and lo=
ad a
> patched module on the hardware before I can report back on fan control. T=
hat
> may take me a few days, but I'll follow up with results either way, and s=
end a
> v3 once I can confirm whether PWM control works.
>
> Thanks for the quick review,
> Justin
>
>
> On Thu, Jul 30, 2026 at 5:17=E2=80=AFAM Armin Wolf <[email protected]> wrote=
:
> >
> > Am 30.07.26 um 01:51 schrieb Justin Vargas:
> >
> > > The Acer Nitro ANV15-51 uses the Predator V4 WMI interface for therma=
l
> > > profile handling and hardware monitoring, but has no quirk entry, so
> > > these features are only available when the predator_v4 module paramet=
er
> > > is passed manually.
> > >
> > > Add a quirk entry for this model.
> > >
> > > Note that this machine does not support the turbo thermal profile: it=
s
> > > supported profiles bitmap (misc setting 0x0A) reads 0x53, and writing
> > > PLATFORM_PROFILE_PERFORMANCE is rejected by the firmware. The four
> > > remaining profiles work as expected.
> >
> > Hi,
> >
> > can you create a custom quirk entry and check if controlling the CPU/GP=
U fans
> > works? For this you need to fill-in the number of CPU/GPU fans inside s=
truct quirk_entry
> > and set "pwm" to "1".
> >
> > I think fo something like "quirk_acer_predator_ph16_72", just without "=
.tubo =3D 1".
> >
> > Thanks,
> > Armin Wolf
> >
> > > Assisted-by: Claude:claude-opus-5
> > > Signed-off-by: Justin Vargas <[email protected]>
> > > Tested-by: Justin Vargas <[email protected]>
> > > ---
> > > v2: Add Assisted-by trailer per
> > >      Documentation/process/coding-assistants.rst. No change to the co=
de.
> > >
> > > Tested on an Acer Nitro ANV15-51, BIOS V1.60 (04/08/2026),
> > > kernel 7.0.11-1-cachyos:
> > >
> > >    $ sudo dmidecode -s system-product-name
> > >    Nitro ANV15-51
> > >
> > >    $ sudo modprobe acer_wmi predator_v4=3D1
> > >    $ cat /sys/firmware/acpi/platform_profile_choices
> > >    low-power quiet balanced balanced-performance performance
> > >
> > > Writing low-power, quiet, balanced and balanced-performance all succe=
ed
> > > and audibly change fan behaviour. Writing performance is rejected by =
the
> > > firmware, consistent with the supported profiles bitmap (0x0A) readin=
g
> > > 0x53, i.e. bit 5 (turbo) clear.
> > >
> > > hwmon works: sensors reports acer-isa-0ace with fan1 3024 RPM,
> > > fan2 2685 RPM, temp1 +48.0 C.
> > >
> > > The WMI mechanism was cross-checked on Windows, where NitroSense swit=
ches
> > > profiles via SetGamingMiscSetting with index 0x0B and the same profil=
e
> > > values used by this driver.
> > >
> > > The analysis and patch were produced with AI assistance (see the
> > > Assisted-by trailer); all testing was performed by me on the physical
> > > machine, and I take responsibility for the patch as signed off above.
> > >
> > >   drivers/platform/x86/acer-wmi.c | 9 +++++++++
> > >   1 file changed, 9 insertions(+)
> > >
> > > diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/a=
cer-wmi.c
> > > index e0eaaefb13d..a7290f85166 100644
> > > --- a/drivers/platform/x86/acer-wmi.c
> > > +++ b/drivers/platform/x86/acer-wmi.c
> > > @@ -662,6 +662,15 @@ static const struct dmi_system_id acer_quirks[] =
__initconst =3D {
> > >               },
> > >               .driver_data =3D &quirk_acer_nitro_an515_58,
> > >       },
> > > +     {
> > > +             .callback =3D dmi_matched,
> > > +             .ident =3D "Acer Nitro ANV15-51",
> > > +             .matches =3D {
> > > +                     DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
> > > +                     DMI_MATCH(DMI_PRODUCT_NAME, "Nitro ANV15-51"),
> > > +             },
> > > +             .driver_data =3D &quirk_acer_predator_v4,
> > > +     },
> > >       {
> > >               .callback =3D dmi_matched,
> > >               .ident =3D "Acer Predator PH315-53",