[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <E755BEB7-8A0E-42F7-BC61-B4188C28E7A4@gmail.com>
Date: Tue, 29 Apr 2025 20:26:57 -0700
From: "Derek J. Clark" <derekjohn.clark@...il.com>
To: ALOK TIWARI <alok.a.tiwari@...cle.com>, Hans de Goede <hdegoede@...hat.com>,
Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>
CC: Armin Wolf <W_Armin@....de>, Jonathan Corbet <corbet@....net>,
Mario Limonciello <superm1@...nel.org>, Luke Jones <luke@...nes.dev>,
Xino Ni <nijs1@...ovo.com>, Zhixin Zhang <zhangzx36@...ovo.com>,
Mia Shao <shaohz1@...ovo.com>, Mark Pearson <mpearson-lenovo@...ebb.ca>,
"Pierre-Loup A . Griffais" <pgriffais@...vesoftware.com>,
"Cody T . -H . Chiu" <codyit@...il.com>, John Martens <johnfanv2@...il.com>,
platform-driver-x86@...r.kernel.org, linux-doc@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6 6/6] platform/x86: Add Lenovo WMI Other Mode Driver
On April 29, 2025 1:13:10 PM PDT, ALOK TIWARI <alok.a.tiwari@...cle.com> wrote:
>
>
>On 28-04-2025 06:48, Derek J. Clark wrote:
>> Adds lenovo-wmi-other driver which provides the Lenovo "Other Mode" WMI
>> interface that comes on some Lenovo "Gaming Series" hardware. Provides a
>> firmware-attributes class which enables the use of tunable knobs for SPL,
>> SPPT, and FPPT.
>>
>> Signed-off-by: Derek J. Clark <derekjohn.clark@...il.com>
>> ---
>> +++ b/drivers/platform/x86/lenovo-wmi-other.c
>> @@ -0,0 +1,655 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Lenovo Other Mode WMI interface driver.
>> + *
>> + * This driver uses the fw_attributes class to expose the various WMI functions
>> + * provided by the "Other Mode" WMI interface. This enables CPU and GPU power
>> + * limit as well as various other attributes for devices that fall under the
>> + * "Gaming Series" of Lenovo laptop devices. Each attribute exposed by the
>> + * "Other Mode"" interface has a corresponding Capability Data struct that
>
>typo "Other Mode"" -> "Other Mode"
>
>> + * allows the driver to probe details about the attribute such as if it is
>> + * supported by the hardware, the default_value, max_value, min_value, and step
>> + * increment.
>> + *
>> + * These attributes typically don't fit anywhere else in the sysfs and are set
>> + * in Windows using one of Lenovo's multiple user applications.
>> + *
>> + * Copyright(C) 2025 Derek J. Clark <derekjohn.clark@...il.com>
>> + */
>> +
>[clip]
>> +
>> +/**
>> + * lwmi_om_register_notifier() - Add a notifier to the blocking notifier chain
>> + * @nb: The notifier_block struct to register
>> + *
>> + * Call blocking_notifier_chain_register to register the notifier block to the
>> + * lenovo-wmi-other driver notifer chain.
>
>typo notifer -> notifier
>
>> + *
>> + * Return: 0 on success, %-EEXIST on error.
>> + */
>> +int lwmi_om_register_notifier(struct notifier_block *nb)
>> +{
>> + return blocking_notifier_chain_register(&om_chain_head, nb);
>> +}
>> +EXPORT_SYMBOL_NS_GPL(lwmi_om_register_notifier, "LENOVO_WMI_OTHER");
>> +
>> +/**
>> + * lwmi_om_unregister_notifier() - Remove a notifier from the blocking notifier
>> + * chain.
>> + * @nb: The notifier_block struct to register
>> + *
>> + * Call blocking_notifier_chain_unregister to unregister the notifier block from the
>> + * lenovo-wmi-other driver notifer chain.
>> + *
>> + * Return: 0 on success, %-ENOENT on error.
>> + */
>> +int lwmi_om_unregister_notifier(struct notifier_block *nb)
>> +{
>> + return blocking_notifier_chain_unregister(&om_chain_head, nb);
>> +}
>> +EXPORT_SYMBOL_NS_GPL(lwmi_om_unregister_notifier, "LENOVO_WMI_OTHER");
>> +
>> +/**
>> + * devm_lwmi_om_unregister_notifier() - Remove a notifier from the blocking
>> + * notifier chain.
>> + * @data: Void pointer to the notifier_block struct to register.
>> + *
>> + * Call lwmi_om_unregister_notifier to unregister the notifier block from the
>> + * lenovo-wmi-other driver notifer chain.
>
>typo notifer -> notifier
>
>> + *
>> + * Return: 0 on success, %-ENOENT on error.
>> + */
>> +static void devm_lwmi_om_unregister_notifier(void *data)
>> +{
>> + struct notifier_block *nb = data;
>> +
>> + lwmi_om_unregister_notifier(nb);
>> +}
>> +
>> +/**
>> + * devm_lwmi_om_register_notifier() - Add a notifier to the blocking notifier
>> + * chain.
>> + * @dev: The parent device of the notifier_block struct.
>> + * @nb: The notifier_block struct to register
>> + *
>> + * Call lwmi_om_register_notifier to register the notifier block to the
>> + * lenovo-wmi-other driver notifer chain. Then add devm_lwmi_om_unregister_notifier
>
>typo notifer -> notifier
>
>> + * as a device managed ation to automatically unregister the notifier block
>
>typo ation
>
>> + * upon parent device removal.
>> + *
>> + * Return: 0 on success, or on error.
>> + */
>> +int devm_lwmi_om_register_notifier(struct device *dev,
>> + struct notifier_block *nb)
>> +{
>> + int ret;
>> +
>> + ret = lwmi_om_register_notifier(nb);
>> + if (ret < 0)
>> + return ret;
>> +
>
>
>Thanks,
>Alok
>
>
>
>
Ack all, thanks.
- Derek
Powered by blists - more mailing lists