From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dl1-f49.google.com (mail-dl1-f49.google.com [74.125.82.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4EBA17080D for ; Sun, 15 Mar 2026 03:38:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773545912; cv=none; b=VeL+iQqr8KNv17dcA9NNhgs1Vgs2BVy5wOqKG1c5AT8iGaeee7k0r5l0k3iOdf/YhtuUx9LAnvAdfKEDGwk2bXX6diuikdKg9cLZ0GNuDNW7fr+bM/qP4MGO+IlSGLh/qtndgXurnV+57nm/oScHI73EY0VqdW7+VGe90LedoO0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773545912; c=relaxed/simple; bh=km/9YQqxJRq7GbL5RUJXbitffO64zQjJiWCqt23xAtM=; h=Date:From:To:CC:Subject:In-Reply-To:References:Message-ID: MIME-Version:Content-Type; b=he4DeuBVQhLh761rk2RjkbxFGSfV/G1/lMyvEmYo3rbPaGj/b7xnQLMW56T1EInnyuSprDDruF3t8M6tM27Nve7EWHFB4KKCUkK3GWZNXvxByhHAtfWgmdTJdKxGshBrY5U47MMvkqaLhRBb/jf0/iVs3jnkunX43Fb85BecNww= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=U8hoBChx; arc=none smtp.client-ip=74.125.82.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="U8hoBChx" Received: by mail-dl1-f49.google.com with SMTP id a92af1059eb24-12776bebe9fso3075074c88.1 for ; Sat, 14 Mar 2026 20:38:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773545910; x=1774150710; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:user-agent:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to; bh=urc/PuqszAe8yAYq6qvIC1Ky84Rwd+mAljkRAsfJV+s=; b=U8hoBChxOSr7NsRP9dZ2jIAMBD2zpQw7P6gukusMIwHOZAf16FOUe7m+TQx1HPdvZc nUWaRIjXDmVcheqsCjRWIAI1wvDWkCTVNiSiLusQkxxlsBQoT86WY8l47jedYq+vVidC Bs+10ObUtaxWFKN8xak0pWq4RNt4KpeYxgVQH5TEO5/z9PelYNA2rvrS9rk9aV7t1AhX 4cq8oEqYqyuRUKtKQPDKf/UZfRLiwlhOTEJUrCw21yr64DngaIEmLFlfbV0O+2vxVuAk xk9JwLGQfbLo2lAncfDelFzMOHK7nAzyLhGN/94c3QGgSx1X8dNsVtvnImHCls7CCiYn SW0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773545910; x=1774150710; h=content-transfer-encoding:mime-version:message-id:references :in-reply-to:user-agent:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=urc/PuqszAe8yAYq6qvIC1Ky84Rwd+mAljkRAsfJV+s=; b=CUFSt2JJ9hdrYVx+j6/Ht72aJWQqGkAFVIdguH0vx5nMbo4TrmR+NXYrnKsbVy8QFU xysd8uW4S9WUNwi+DdsMz5k2YgDW6/MSjqE4rftpy+txn2WTlUHVaGu8ZxOdq9AjNmN7 RIMJluw5u2uN7Xl0qPAnWP3oSWNH9VJt7K0uJwmZsQwdNTFAynFOhfNVQFsEa/jfDWbO 5tBuIhEMY0CztDtlFDCoxDtr+lMVqaoX+XGEc4llyEbsSaQ0lduxxEyI5vxOqZGOCZgh muP/8NBkn0kbWJ2+qGi8bJ1aHhKO1a4kEGQK6RaVhMny/8Eh4wGLC3JZgiSBBq9aet2p uOSg== X-Forwarded-Encrypted: i=1; AJvYcCW1Neg6ko1BPZqY5q96ji3yy9oneq802M771+AxPvhkSswhlbg6WYg5Cd2O+RCamUPQcY2wVqsekvontGU=@vger.kernel.org X-Gm-Message-State: AOJu0YxfaKjnzb0A93eOAiuWgwYc2r2skR74V3yXBAiUlzx78ksoj6hJ 9mGGTs+c2pbVEzLs1/up8XIiLkqQo8lWCqqbzml/QThv1pOzwA0Cl5AD X-Gm-Gg: ATEYQzwFSa1+A3vise5R6LK1FXP76V0t3opk9aS6orEHz8WZv8YgNDZw5vUFyNX4ymf l3cq/m1alhcRn5jbb8vfp82tCqflbV5ft4r0kNUrliiNl/tp7RsUQH5OmbnvE1kBtHCajurUERF 3VlSG6WloRnRZ4FwdKbhHegvjHll/MQhy31s6AcDXHeihjqNBwRqgNdymS3m8z0ob+uW1NwwDtG UyAVtQXL6f8ALT0BDfTyr0M0GesvAGj7TWGCehT3yB42w93sa8NSjj7c6Zn/5z+8Z/vuMqPKIOR 4UUW534yPZDwDEQVboJTkqR1Uvnbs3K7wFyB2YNvuzyL3E/XCIm4P9Gk3FlfGdAssDhF8XYWtEG r/Njd5y5dzZXvSzYzFLeJHvph5gswCvLA8pGxYY1SLDHcBvF7TO/j1QIu76gqu9Ivhx3Nvwaspn oFn9VxkVInYVwEiE/LkAEpE5swxmjMfFS/LXp7jaFzQhjWtZDt5nH+cZ2xuq2bNrLdxGFDAbOZJ u6hoz2Eh5Q2B+skHCweYQ== X-Received: by 2002:a05:7022:4587:b0:119:e569:f27f with SMTP id a92af1059eb24-128f3e2a616mr4412916c88.40.1773545910279; Sat, 14 Mar 2026 20:38:30 -0700 (PDT) Received: from ehlo.thunderbird.net (108-228-232-20.lightspeed.sndgca.sbcglobal.net. [108.228.232.20]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-128f6295ebfsm7528094c88.4.2026.03.14.20.38.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 14 Mar 2026 20:38:29 -0700 (PDT) Date: Sat, 14 Mar 2026 20:38:28 -0700 From: "Derek J. Clark" To: Rong Zhang , =?ISO-8859-1?Q?Ilpo_J=E4rvinen?= , Hans de Goede CC: Mark Pearson , Armin Wolf , Jonathan Corbet , Kurt Borja , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: =?US-ASCII?Q?Re=3A_=5BPATCH_v4_3/8=5D_platform/x86=3A_lenovo?= =?US-ASCII?Q?-wmi-other=3A_Add_lwmi=5Fattr=5Fid=28=29_function?= User-Agent: Thunderbird for Android In-Reply-To: References: <20260312031032.3467565-1-derekjohn.clark@gmail.com> <20260312031032.3467565-4-derekjohn.clark@gmail.com> Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On March 14, 2026 6:08:55 PM PDT, Rong Zhang wrote: >Hi Derek, > >On Thu, 2026-03-12 at 03:10 +0000, Derek J=2E Clark wrote: >> Adds lwmi_attr_id() function=2E In the same vein as LWMI_ATTR_ID_FAN_RP= M(), >> but as a generic, to de-duplicate attribute_id assignment biolerplate= =2E >>=20 >> Reviewed-by: Mark Pearson >> Signed-off-by: Derek J=2E Clark >> --- >> v4: >> - Switch from macro to static inline to preserve types=2E >> --- >> drivers/platform/x86/lenovo/wmi-gamezone=2Eh | 1 + >> drivers/platform/x86/lenovo/wmi-other=2Ec | 59 +++++++++++++-------= -- >> 2 files changed, 35 insertions(+), 25 deletions(-) >>=20 >> diff --git a/drivers/platform/x86/lenovo/wmi-gamezone=2Eh b/drivers/pla= tform/x86/lenovo/wmi-gamezone=2Eh >> index 6b163a5eeb95=2E=2Eddb919cf6c36 100644 >> --- a/drivers/platform/x86/lenovo/wmi-gamezone=2Eh >> +++ b/drivers/platform/x86/lenovo/wmi-gamezone=2Eh >> @@ -10,6 +10,7 @@ enum gamezone_events_type { >> }; >> =20 >> enum thermal_mode { >> + LWMI_GZ_THERMAL_MODE_NONE =3D 0x00, >> LWMI_GZ_THERMAL_MODE_QUIET =3D 0x01, >> LWMI_GZ_THERMAL_MODE_BALANCED =3D 0x02, >> LWMI_GZ_THERMAL_MODE_PERFORMANCE =3D 0x03, >> diff --git a/drivers/platform/x86/lenovo/wmi-other=2Ec b/drivers/platfo= rm/x86/lenovo/wmi-other=2Ec >> index c1728c7c2957=2E=2E9fff9c1f768c 100644 >> --- a/drivers/platform/x86/lenovo/wmi-other=2Ec >> +++ b/drivers/platform/x86/lenovo/wmi-other=2Ec >> @@ -73,10 +73,26 @@ >> =20 >> #define LWMI_FAN_DIV 100 >> =20 >> -#define LWMI_ATTR_ID_FAN_RPM(x) \ >> - (FIELD_PREP(LWMI_ATTR_DEV_ID_MASK, LWMI_DEVICE_ID_FAN) | \ >> - FIELD_PREP(LWMI_ATTR_FEAT_ID_MASK, LWMI_FEATURE_ID_FAN_RPM) | \ >> - FIELD_PREP(LWMI_ATTR_TYPE_ID_MASK, LWMI_FAN_ID(x))) >> +/** >> + * lwmi_attr_id() - Formats a capability data attribute ID >> + * @dev_id: The u8 corresponding to the device ID=2E >> + * @feat_id: The u8 corresponding to the feature ID on the device=2E >> + * @mode_id: The u8 corresponding to the wmi-gamezone mode for set/get= =2E >> + * @type_id: The u8 corresponding to the sub-device=2E >> + * >> + * Return: u32=2E >> + */ >> +static u32 lwmi_attr_id(u8 dev_id, u8 feat_id, u8 mode_id, u8 type_id) >> +{ >> + return (FIELD_PREP(LWMI_ATTR_DEV_ID_MASK, dev_id) | >> + FIELD_PREP(LWMI_ATTR_FEAT_ID_MASK, feat_id) | >> + FIELD_PREP(LWMI_ATTR_MODE_ID_MASK, mode_id) | >> + FIELD_PREP(LWMI_ATTR_TYPE_ID_MASK, type_id)); >> +} >> + >> +#define LWMI_ATTR_ID_FAN_RPM(x) \ >> + lwmi_attr_id(LWMI_DEVICE_ID_FAN, LWMI_FEATURE_ID_FAN_RPM, \ >> + LWMI_GZ_THERMAL_MODE_NONE, LWMI_FAN_ID(x)) >> =20 >> #define LWMI_OM_FW_ATTR_BASE_PATH "lenovo-wmi-other" >> #define LWMI_OM_HWMON_NAME "lenovo_wmi_other" >> @@ -550,6 +566,8 @@ struct tunable_attr_01 { >> u8 feature_id; >> u8 device_id; >> u8 type_id; >> + u8 cd_mode_id; /* mode arg for searching capdata */ >> + u8 cv_mode_id; /* mode arg for set/get current_value */ > >Adding them actually depends on [PATCH v4 4/8], otherwise you always >get 0 when accessing them in this patch=2E There are potential >regressions=2E=2E=2E > > Hi Rong, Good catch=2E I think they got moved during a rebase edit by mistake=2E Th= anks=2E - Derek >> }; >> =20 >> static struct tunable_attr_01 ppt_pl1_spl =3D { >> @@ -715,12 +733,8 @@ static ssize_t attr_capdata01_show(struct kobject = *kobj, >> u32 attribute_id; >> int value, ret; >> =20 >> - attribute_id =3D >> - FIELD_PREP(LWMI_ATTR_DEV_ID_MASK, tunable_attr->device_id) | >> - FIELD_PREP(LWMI_ATTR_FEAT_ID_MASK, tunable_attr->feature_id) | >> - FIELD_PREP(LWMI_ATTR_MODE_ID_MASK, >> - LWMI_GZ_THERMAL_MODE_CUSTOM) | >> - FIELD_PREP(LWMI_ATTR_TYPE_ID_MASK, tunable_attr->type_id); >> + attribute_id =3D lwmi_attr_id(tunable_attr->device_id, tunable_attr->= feature_id, >> + LWMI_GZ_THERMAL_MODE_CUSTOM, tunable_attr->type_id); >> =20 >> ret =3D lwmi_cd01_get_data(priv->cd01_list, attribute_id, &capdata); >> if (ret) >> @@ -775,7 +789,6 @@ static ssize_t attr_current_value_store(struct kobj= ect *kobj, >> struct wmi_method_args_32 args; >> struct capdata01 capdata; >> enum thermal_mode mode; >> - u32 attribute_id; >> u32 value; >> int ret; >> =20 >> @@ -786,13 +799,10 @@ static ssize_t attr_current_value_store(struct ko= bject *kobj, >> if (mode !=3D LWMI_GZ_THERMAL_MODE_CUSTOM) >> return -EBUSY; >> =20 >> - attribute_id =3D >> - FIELD_PREP(LWMI_ATTR_DEV_ID_MASK, tunable_attr->device_id) | >> - FIELD_PREP(LWMI_ATTR_FEAT_ID_MASK, tunable_attr->feature_id) | >> - FIELD_PREP(LWMI_ATTR_MODE_ID_MASK, mode) | >> - FIELD_PREP(LWMI_ATTR_TYPE_ID_MASK, tunable_attr->type_id); >> + args=2Earg0 =3D lwmi_attr_id(tunable_attr->device_id, tunable_attr->f= eature_id, >> + mode, tunable_attr->type_id); >> =20 >> - ret =3D lwmi_cd01_get_data(priv->cd01_list, attribute_id, &capdata); >> + ret =3D lwmi_cd01_get_data(priv->cd01_list, args=2Earg0, &capdata); >> if (ret) >> return ret; >> =20 >> @@ -803,7 +813,8 @@ static ssize_t attr_current_value_store(struct kobj= ect *kobj, >> if (value < capdata=2Emin_value || value > capdata=2Emax_value) >> return -EINVAL; >> =20 >> - args=2Earg0 =3D attribute_id; >> + args=2Earg0 =3D lwmi_attr_id(tunable_attr->device_id, tunable_attr->f= eature_id, >> + tunable_attr->cv_mode_id, tunable_attr->type_id); > >=2E=2E=2Ehere=2E=2E=2E > >> args=2Earg1 =3D value; >> =20 >> ret =3D lwmi_dev_evaluate_int(priv->wdev, 0x0, LWMI_FEATURE_VALUE_SET= , >> @@ -837,7 +848,6 @@ static ssize_t attr_current_value_show(struct kobje= ct *kobj, >> struct lwmi_om_priv *priv =3D dev_get_drvdata(tunable_attr->dev); >> struct wmi_method_args_32 args; >> enum thermal_mode mode; >> - u32 attribute_id; >> int retval; >> int ret; >> =20 >> @@ -845,13 +855,12 @@ static ssize_t attr_current_value_show(struct kob= ject *kobj, >> if (ret) >> return ret; >> =20 >> - attribute_id =3D >> - FIELD_PREP(LWMI_ATTR_DEV_ID_MASK, tunable_attr->device_id) | >> - FIELD_PREP(LWMI_ATTR_FEAT_ID_MASK, tunable_attr->feature_id) | >> - FIELD_PREP(LWMI_ATTR_MODE_ID_MASK, mode) | >> - FIELD_PREP(LWMI_ATTR_TYPE_ID_MASK, tunable_attr->type_id); >> + /* If "no-mode" is the supported mode, ensure we never send current m= ode */ >> + if (tunable_attr->cv_mode_id =3D=3D LWMI_GZ_THERMAL_MODE_NONE) >> + mode =3D tunable_attr->cv_mode_id; > >=2E=2E=2Eand here=2E > >Thanks, >Rong > >> =20 >> - args=2Earg0 =3D attribute_id; >> + args=2Earg0 =3D lwmi_attr_id(tunable_attr->device_id, tunable_attr->f= eature_id, >> + mode, tunable_attr->type_id); >> =20 >> ret =3D lwmi_dev_evaluate_int(priv->wdev, 0x0, LWMI_FEATURE_VALUE_GET= , >> (unsigned char *)&args, sizeof(args),