On April 29, 2025 1:13:10 PM PDT, ALOK TIWARI <alok.a.tiwari@xxxxxxxxxx> 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@xxxxxxxxx> >> --- >> +++ 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@xxxxxxxxx> >> + */ >> + >[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