From nobody Tue Dec 2 01:26:26 2025 Received: from sender3-op-o15.zoho.com (sender3-op-o15.zoho.com [136.143.184.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC84528D8DA; Sat, 22 Nov 2025 18:46:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763837170; cv=pass; b=OSdASGclj9x732IYvMPYwBDALBeiessn1URPT0Yk0H7VSIUkFPYDNS7LU4pgC2XeJ9exxSnuNIYq7OdeHO2FmB9gV8Mn/5cukttQW8biTprbYlUjCwEKZXmyyqX4BvGtiwGJ2IduRVc5Zppe5kQI6qHY7tK5Oax+K6mvDfr444k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763837170; c=relaxed/simple; bh=5FXYWr+OZfgBwgGo9Wmi7MNv9yqADJDUZSH0BCk/5oM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bAng/2dmt6sUIEth1mohGKtkvdUHg2YGx7eFvKfSM4Nt9FBFuxn14RrVt5nWqUSPDSv5ajfhg2G62kd97GcECKSey+PNCLVwBWKrUAIVAAH1AHjq009q2BznVzh08sD4nmLCtOPNYkL+m870V020ptBzpJLpwd3btWZG8blIlT8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rong.moe; spf=pass smtp.mailfrom=rong.moe; dkim=pass (1024-bit key) header.d=rong.moe header.i=i@rong.moe header.b=w48P84m2; arc=pass smtp.client-ip=136.143.184.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rong.moe Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rong.moe Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rong.moe header.i=i@rong.moe header.b="w48P84m2" ARC-Seal: i=1; a=rsa-sha256; t=1763837139; cv=none; d=zohomail.com; s=zohoarc; b=ngkpJ+cC6oiRXM+lAtXGa+QnR004W8lWn3/lFz8oQvg19R+zvBdawIxlAiGVagdjBwFgjZahRsqtJ5MGZaIAOTaJ70ENRhjqrTX1MxOdIMTBRlOnVxBGmhMcHSyyS5lvPeirbZgx4cpm60lDohxzUP2Vyek11tWK2rgI9+o0nTc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763837139; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=6rXa2Uw9KG3jpoFWXvixAbtuqbaUfxjnuJluUymabLM=; b=eKgzAJurG9yZ5adw/uP0deznfCqnVArTcpmRGycwRmXGfaM1TIg/k/ooSgR2Z2i0hT95mu1plr5o2rKVDauDHCTWwrq76FkFVdPWqVBFhs8WUKXiBqKzer9doqjsh+lNHU9EGVvJnwZ8ZZrv6iM1sX0fVCLI4x9onS4iEOO9Rwk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=rong.moe; spf=pass smtp.mailfrom=i@rong.moe; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763837139; s=zmail; d=rong.moe; i=i@rong.moe; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding:Message-Id:Reply-To; bh=6rXa2Uw9KG3jpoFWXvixAbtuqbaUfxjnuJluUymabLM=; b=w48P84m2sb66JotYX0FM8sKYS3fsVezyVxVGW0kXshvBmjPGle1AiIvw6SCnuJG4 j7FvgNJThJcv3//FD6l2UcrzXzy4r9gy3b+6GP1bBgIoZ/qRAf+fG3WKazuaYGXU//C 6mLAiH6NI3ylmtEGTjTWM1k3JCSm0yFIYjHL+ltk= Received: by mx.zohomail.com with SMTPS id 1763837136621187.96599812286593; Sat, 22 Nov 2025 10:45:36 -0800 (PST) From: Rong Zhang To: Mark Pearson , "Derek J. Clark" , Armin Wolf , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Cc: Rong Zhang , Guenter Roeck , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hwmon@vger.kernel.org Subject: [PATCH v6 2/7] platform/x86: Rename lenovo-wmi-capdata01 to lenovo-wmi-capdata Date: Sun, 23 Nov 2025 02:44:42 +0800 Message-ID: <20251122184522.18677-3-i@rong.moe> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251122184522.18677-1-i@rong.moe> References: <20251122184522.18677-1-i@rong.moe> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMailClient: External Content-Type: text/plain; charset="utf-8" Prepare for the upcoming changes to make it suitable to retrieve and provide other Capability Data as well. Signed-off-by: Rong Zhang Reviewed-by: Derek J. Clark Tested-by: Derek J. Clark --- drivers/platform/x86/lenovo/Kconfig | 4 +- drivers/platform/x86/lenovo/Makefile | 2 +- .../lenovo/{wmi-capdata01.c =3D> wmi-capdata.c} | 124 +++++++++--------- .../lenovo/{wmi-capdata01.h =3D> wmi-capdata.h} | 10 +- drivers/platform/x86/lenovo/wmi-other.c | 11 +- 5 files changed, 78 insertions(+), 73 deletions(-) rename drivers/platform/x86/lenovo/{wmi-capdata01.c =3D> wmi-capdata.c} (6= 0%) rename drivers/platform/x86/lenovo/{wmi-capdata01.h =3D> wmi-capdata.h} (6= 0%) diff --git a/drivers/platform/x86/lenovo/Kconfig b/drivers/platform/x86/len= ovo/Kconfig index d22b774e0236..fb96a0f908f0 100644 --- a/drivers/platform/x86/lenovo/Kconfig +++ b/drivers/platform/x86/lenovo/Kconfig @@ -233,7 +233,7 @@ config YT2_1380 To compile this driver as a module, choose M here: the module will be called lenovo-yogabook. =20 -config LENOVO_WMI_DATA01 +config LENOVO_WMI_DATA tristate depends on ACPI_WMI =20 @@ -264,7 +264,7 @@ config LENOVO_WMI_TUNING tristate "Lenovo Other Mode WMI Driver" depends on ACPI_WMI select FW_ATTR_CLASS - select LENOVO_WMI_DATA01 + select LENOVO_WMI_DATA select LENOVO_WMI_EVENTS select LENOVO_WMI_HELPERS help diff --git a/drivers/platform/x86/lenovo/Makefile b/drivers/platform/x86/le= novo/Makefile index 7b2128e3a214..29014d8c1376 100644 --- a/drivers/platform/x86/lenovo/Makefile +++ b/drivers/platform/x86/lenovo/Makefile @@ -12,7 +12,7 @@ lenovo-target-$(CONFIG_LENOVO_YMC) +=3D ymc.o lenovo-target-$(CONFIG_YOGABOOK) +=3D yogabook.o lenovo-target-$(CONFIG_YT2_1380) +=3D yoga-tab2-pro-1380-fastcharger.o lenovo-target-$(CONFIG_LENOVO_WMI_CAMERA) +=3D wmi-camera.o -lenovo-target-$(CONFIG_LENOVO_WMI_DATA01) +=3D wmi-capdata01.o +lenovo-target-$(CONFIG_LENOVO_WMI_DATA) +=3D wmi-capdata.o lenovo-target-$(CONFIG_LENOVO_WMI_EVENTS) +=3D wmi-events.o lenovo-target-$(CONFIG_LENOVO_WMI_HELPERS) +=3D wmi-helpers.o lenovo-target-$(CONFIG_LENOVO_WMI_GAMEZONE) +=3D wmi-gamezone.o diff --git a/drivers/platform/x86/lenovo/wmi-capdata01.c b/drivers/platform= /x86/lenovo/wmi-capdata.c similarity index 60% rename from drivers/platform/x86/lenovo/wmi-capdata01.c rename to drivers/platform/x86/lenovo/wmi-capdata.c index fc7e3454e71d..c5e74b2bfeb3 100644 --- a/drivers/platform/x86/lenovo/wmi-capdata01.c +++ b/drivers/platform/x86/lenovo/wmi-capdata.c @@ -1,14 +1,17 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Lenovo Capability Data 01 WMI Data Block driver. + * Lenovo Capability Data WMI Data Block driver. * - * Lenovo Capability Data 01 provides information on tunable attributes us= ed by - * the "Other Mode" WMI interface. The data includes if the attribute is - * supported by the hardware, the default_value, max_value, min_value, and= step - * increment. Each attribute has multiple pages, one for each of the therm= al - * modes managed by the Gamezone interface. + * Lenovo Capability Data provides information on tunable attributes used = by + * the "Other Mode" WMI interface. + * + * Capability Data 01 includes if the attribute is supported by the hardwa= re, + * and the default_value, max_value, min_value, and step increment. Each + * attribute has multiple pages, one for each of the thermal modes managed= by + * the Gamezone interface. * * Copyright (C) 2025 Derek J. Clark + * - Initial implementation (formerly named lenovo-wmi-capdata01) */ =20 #include @@ -26,55 +29,55 @@ #include #include =20 -#include "wmi-capdata01.h" +#include "wmi-capdata.h" =20 #define LENOVO_CAPABILITY_DATA_01_GUID "7A8F5407-CB67-4D6E-B547-39B3BE0181= 54" =20 #define ACPI_AC_CLASS "ac_adapter" #define ACPI_AC_NOTIFY_STATUS 0x80 =20 -struct lwmi_cd01_priv { +struct lwmi_cd_priv { struct notifier_block acpi_nb; /* ACPI events */ struct wmi_device *wdev; - struct cd01_list *list; + struct cd_list *list; }; =20 -struct cd01_list { +struct cd_list { struct mutex list_mutex; /* list R/W mutex */ u8 count; struct capdata01 data[]; }; =20 /** - * lwmi_cd01_component_bind() - Bind component to master device. - * @cd01_dev: Pointer to the lenovo-wmi-capdata01 driver parent device. + * lwmi_cd_component_bind() - Bind component to master device. + * @cd_dev: Pointer to the lenovo-wmi-capdata driver parent device. * @om_dev: Pointer to the lenovo-wmi-other driver parent device. - * @data: capdata01_list object pointer used to return the capability data. + * @data: cd_list object pointer used to return the capability data. * - * On lenovo-wmi-other's master bind, provide a pointer to the local capda= ta01 - * list. This is used to call lwmi_cd01_get_data to look up attribute data + * On lenovo-wmi-other's master bind, provide a pointer to the local capda= ta + * list. This is used to call lwmi_cd*_get_data to look up attribute data * from the lenovo-wmi-other driver. * * Return: 0 */ -static int lwmi_cd01_component_bind(struct device *cd01_dev, - struct device *om_dev, void *data) +static int lwmi_cd_component_bind(struct device *cd_dev, + struct device *om_dev, void *data) { - struct lwmi_cd01_priv *priv =3D dev_get_drvdata(cd01_dev); - struct cd01_list **cd01_list =3D data; + struct lwmi_cd_priv *priv =3D dev_get_drvdata(cd_dev); + struct cd_list **cd_list =3D data; =20 - *cd01_list =3D priv->list; + *cd_list =3D priv->list; =20 return 0; } =20 -static const struct component_ops lwmi_cd01_component_ops =3D { - .bind =3D lwmi_cd01_component_bind, +static const struct component_ops lwmi_cd_component_ops =3D { + .bind =3D lwmi_cd_component_bind, }; =20 /** * lwmi_cd01_get_data - Get the data of the specified attribute - * @list: The lenovo-wmi-capdata01 pointer to its cd01_list struct. + * @list: The lenovo-wmi-capdata pointer to its cd_list struct. * @attribute_id: The capdata attribute ID to be found. * @output: Pointer to a capdata01 struct to return the data. * @@ -83,7 +86,7 @@ static const struct component_ops lwmi_cd01_component_ops= =3D { * * Return: 0 on success, or -EINVAL. */ -int lwmi_cd01_get_data(struct cd01_list *list, u32 attribute_id, struct ca= pdata01 *output) +int lwmi_cd01_get_data(struct cd_list *list, u32 attribute_id, struct capd= ata01 *output) { u8 idx; =20 @@ -97,17 +100,17 @@ int lwmi_cd01_get_data(struct cd01_list *list, u32 att= ribute_id, struct capdata0 =20 return -EINVAL; } -EXPORT_SYMBOL_NS_GPL(lwmi_cd01_get_data, "LENOVO_WMI_CD01"); +EXPORT_SYMBOL_NS_GPL(lwmi_cd01_get_data, "LENOVO_WMI_CD"); =20 /** - * lwmi_cd01_cache() - Cache all WMI data block information - * @priv: lenovo-wmi-capdata01 driver data. + * lwmi_cd_cache() - Cache all WMI data block information + * @priv: lenovo-wmi-capdata driver data. * * Loop through each WMI data block and cache the data. * * Return: 0 on success, or an error. */ -static int lwmi_cd01_cache(struct lwmi_cd01_priv *priv) +static int lwmi_cd_cache(struct lwmi_cd_priv *priv) { int idx; =20 @@ -131,17 +134,17 @@ static int lwmi_cd01_cache(struct lwmi_cd01_priv *pri= v) } =20 /** - * lwmi_cd01_alloc() - Allocate a cd01_list struct in drvdata - * @priv: lenovo-wmi-capdata01 driver data. + * lwmi_cd_alloc() - Allocate a cd_list struct in drvdata + * @priv: lenovo-wmi-capdata driver data. * - * Allocate a cd01_list struct large enough to contain data from all WMI d= ata + * Allocate a cd_list struct large enough to contain data from all WMI data * blocks provided by the interface. * * Return: 0 on success, or an error. */ -static int lwmi_cd01_alloc(struct lwmi_cd01_priv *priv) +static int lwmi_cd_alloc(struct lwmi_cd_priv *priv) { - struct cd01_list *list; + struct cd_list *list; size_t list_size; int count, ret; =20 @@ -163,28 +166,28 @@ static int lwmi_cd01_alloc(struct lwmi_cd01_priv *pri= v) } =20 /** - * lwmi_cd01_setup() - Cache all WMI data block information - * @priv: lenovo-wmi-capdata01 driver data. + * lwmi_cd_setup() - Cache all WMI data block information + * @priv: lenovo-wmi-capdata driver data. * - * Allocate a cd01_list struct large enough to contain data from all WMI d= ata + * Allocate a cd_list struct large enough to contain data from all WMI data * blocks provided by the interface. Then loop through each data block and * cache the data. * * Return: 0 on success, or an error code. */ -static int lwmi_cd01_setup(struct lwmi_cd01_priv *priv) +static int lwmi_cd_setup(struct lwmi_cd_priv *priv) { int ret; =20 - ret =3D lwmi_cd01_alloc(priv); + ret =3D lwmi_cd_alloc(priv); if (ret) return ret; =20 - return lwmi_cd01_cache(priv); + return lwmi_cd_cache(priv); } =20 /** - * lwmi_cd01_notifier_call() - Call method for lenovo-wmi-capdata01 driver= notifier. + * lwmi_cd01_notifier_call() - Call method for cd01 notifier. * block call chain. * @nb: The notifier_block registered to lenovo-wmi-events driver. * @action: Unused. @@ -199,17 +202,17 @@ static int lwmi_cd01_notifier_call(struct notifier_bl= ock *nb, unsigned long acti void *data) { struct acpi_bus_event *event =3D data; - struct lwmi_cd01_priv *priv; + struct lwmi_cd_priv *priv; int ret; =20 if (strcmp(event->device_class, ACPI_AC_CLASS) !=3D 0) return NOTIFY_DONE; =20 - priv =3D container_of(nb, struct lwmi_cd01_priv, acpi_nb); + priv =3D container_of(nb, struct lwmi_cd_priv, acpi_nb); =20 switch (event->type) { case ACPI_AC_NOTIFY_STATUS: - ret =3D lwmi_cd01_cache(priv); + ret =3D lwmi_cd_cache(priv); if (ret) return NOTIFY_BAD; =20 @@ -230,10 +233,9 @@ static void lwmi_cd01_unregister(void *data) unregister_acpi_notifier(acpi_nb); } =20 -static int lwmi_cd01_probe(struct wmi_device *wdev, const void *context) - +static int lwmi_cd_probe(struct wmi_device *wdev, const void *context) { - struct lwmi_cd01_priv *priv; + struct lwmi_cd_priv *priv; int ret; =20 priv =3D devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); @@ -243,7 +245,7 @@ static int lwmi_cd01_probe(struct wmi_device *wdev, con= st void *context) priv->wdev =3D wdev; dev_set_drvdata(&wdev->dev, priv); =20 - ret =3D lwmi_cd01_setup(priv); + ret =3D lwmi_cd_setup(priv); if (ret) return ret; =20 @@ -257,27 +259,27 @@ static int lwmi_cd01_probe(struct wmi_device *wdev, c= onst void *context) if (ret) return ret; =20 - return component_add(&wdev->dev, &lwmi_cd01_component_ops); + return component_add(&wdev->dev, &lwmi_cd_component_ops); } =20 -static void lwmi_cd01_remove(struct wmi_device *wdev) +static void lwmi_cd_remove(struct wmi_device *wdev) { - component_del(&wdev->dev, &lwmi_cd01_component_ops); + component_del(&wdev->dev, &lwmi_cd_component_ops); } =20 -static const struct wmi_device_id lwmi_cd01_id_table[] =3D { +static const struct wmi_device_id lwmi_cd_id_table[] =3D { { LENOVO_CAPABILITY_DATA_01_GUID, NULL }, {} }; =20 -static struct wmi_driver lwmi_cd01_driver =3D { +static struct wmi_driver lwmi_cd_driver =3D { .driver =3D { - .name =3D "lenovo_wmi_cd01", + .name =3D "lenovo_wmi_cd", .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, }, - .id_table =3D lwmi_cd01_id_table, - .probe =3D lwmi_cd01_probe, - .remove =3D lwmi_cd01_remove, + .id_table =3D lwmi_cd_id_table, + .probe =3D lwmi_cd_probe, + .remove =3D lwmi_cd_remove, .no_singleton =3D true, }; =20 @@ -290,13 +292,13 @@ static struct wmi_driver lwmi_cd01_driver =3D { */ int lwmi_cd01_match(struct device *dev, void *data) { - return dev->driver =3D=3D &lwmi_cd01_driver.driver; + return dev->driver =3D=3D &lwmi_cd_driver.driver; } -EXPORT_SYMBOL_NS_GPL(lwmi_cd01_match, "LENOVO_WMI_CD01"); +EXPORT_SYMBOL_NS_GPL(lwmi_cd01_match, "LENOVO_WMI_CD"); =20 -module_wmi_driver(lwmi_cd01_driver); +module_wmi_driver(lwmi_cd_driver); =20 -MODULE_DEVICE_TABLE(wmi, lwmi_cd01_id_table); +MODULE_DEVICE_TABLE(wmi, lwmi_cd_id_table); MODULE_AUTHOR("Derek J. Clark "); -MODULE_DESCRIPTION("Lenovo Capability Data 01 WMI Driver"); +MODULE_DESCRIPTION("Lenovo Capability Data WMI Driver"); MODULE_LICENSE("GPL"); diff --git a/drivers/platform/x86/lenovo/wmi-capdata01.h b/drivers/platform= /x86/lenovo/wmi-capdata.h similarity index 60% rename from drivers/platform/x86/lenovo/wmi-capdata01.h rename to drivers/platform/x86/lenovo/wmi-capdata.h index bd06c5751f68..2a4746e38ad4 100644 --- a/drivers/platform/x86/lenovo/wmi-capdata01.h +++ b/drivers/platform/x86/lenovo/wmi-capdata.h @@ -2,13 +2,13 @@ =20 /* Copyright (C) 2025 Derek J. Clark */ =20 -#ifndef _LENOVO_WMI_CAPDATA01_H_ -#define _LENOVO_WMI_CAPDATA01_H_ +#ifndef _LENOVO_WMI_CAPDATA_H_ +#define _LENOVO_WMI_CAPDATA_H_ =20 #include =20 struct device; -struct cd01_list; +struct cd_list; =20 struct capdata01 { u32 id; @@ -19,7 +19,7 @@ struct capdata01 { u32 max_value; }; =20 -int lwmi_cd01_get_data(struct cd01_list *list, u32 attribute_id, struct ca= pdata01 *output); +int lwmi_cd01_get_data(struct cd_list *list, u32 attribute_id, struct capd= ata01 *output); int lwmi_cd01_match(struct device *dev, void *data); =20 -#endif /* !_LENOVO_WMI_CAPDATA01_H_ */ +#endif /* !_LENOVO_WMI_CAPDATA_H_ */ diff --git a/drivers/platform/x86/lenovo/wmi-other.c b/drivers/platform/x86= /lenovo/wmi-other.c index 2a960b278f11..c6dc1b4cff84 100644 --- a/drivers/platform/x86/lenovo/wmi-other.c +++ b/drivers/platform/x86/lenovo/wmi-other.c @@ -34,7 +34,7 @@ #include #include =20 -#include "wmi-capdata01.h" +#include "wmi-capdata.h" #include "wmi-events.h" #include "wmi-gamezone.h" #include "wmi-helpers.h" @@ -74,7 +74,10 @@ enum attribute_property { =20 struct lwmi_om_priv { struct component_master_ops *ops; - struct cd01_list *cd01_list; /* only valid after capdata01 bind */ + + /* only valid after capdata bind */ + struct cd_list *cd01_list; + struct device *fw_attr_dev; struct kset *fw_attr_kset; struct notifier_block nb; @@ -576,7 +579,7 @@ static void lwmi_om_fw_attr_remove(struct lwmi_om_priv = *priv) static int lwmi_om_master_bind(struct device *dev) { struct lwmi_om_priv *priv =3D dev_get_drvdata(dev); - struct cd01_list *tmp_list; + struct cd_list *tmp_list; int ret; =20 ret =3D component_bind_all(dev, &tmp_list); @@ -657,7 +660,7 @@ static struct wmi_driver lwmi_other_driver =3D { =20 module_wmi_driver(lwmi_other_driver); =20 -MODULE_IMPORT_NS("LENOVO_WMI_CD01"); +MODULE_IMPORT_NS("LENOVO_WMI_CD"); MODULE_IMPORT_NS("LENOVO_WMI_HELPERS"); MODULE_DEVICE_TABLE(wmi, lwmi_other_id_table); MODULE_AUTHOR("Derek J. Clark "); --=20 2.51.0