From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Armin Wolf <W_Armin@gmx.de>
Cc: james@equiv.tech, markpearson@lenovo.com, jorge.lopez2@hp.com,
jdelvare@suse.com, linux@roeck-us.net,
linux-hwmon@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
Hans de Goede <hdegoede@redhat.com>,
platform-driver-x86@vger.kernel.org, corbet@lwn.net,
linux-doc@vger.kernel.org
Subject: Re: [PATCH 3/7] platform/x86: think-lmi: Use WMI bus API when accessing BIOS settings
Date: Thu, 13 Feb 2025 15:17:03 +0200 (EET) [thread overview]
Message-ID: <0dd7bda3-bf76-228b-27f3-f057e80e3a03@linux.intel.com> (raw)
In-Reply-To: <20250203182322.384883-4-W_Armin@gmx.de>
On Mon, 3 Feb 2025, Armin Wolf wrote:
> Since the driver already binds to LENOVO_BIOS_SETTING_GUID, using
> wmidev_block_query() inside tlmi_setting() allows for faster
> access to BIOS settings.
>
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
> ---
> drivers/platform/x86/think-lmi.c | 23 +++++++++--------------
> drivers/platform/x86/think-lmi.h | 2 ++
> 2 files changed, 11 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c
> index 2c94a4af9a1d..0fc275e461be 100644
> --- a/drivers/platform/x86/think-lmi.c
> +++ b/drivers/platform/x86/think-lmi.c
> @@ -344,20 +344,14 @@ static int tlmi_opcode_setting(char *setting, const char *value)
> return ret;
> }
>
> -static int tlmi_setting(int item, char **value, const char *guid_string)
> +static int tlmi_setting(struct wmi_device *wdev, int item, char **value)
> {
> - struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
> union acpi_object *obj;
> - acpi_status status;
> int ret;
>
> - status = wmi_query_block(guid_string, item, &output);
> - if (ACPI_FAILURE(status))
> - return -EIO;
> -
> - obj = output.pointer;
> + obj = wmidev_block_query(wdev, item);
> if (!obj)
> - return -ENODATA;
> + return -EIO;
Hi Armin,
I'm trying to understand why there are these back and forth changes in the
error code.
It almost looks to me like wmidev_block_query() would want to return the
error code itself because after you abstracted this code using
wmidev_block_query(), you had to change the error code because you no
longer have access to the key detail to decide which error code should be
returned. That is, use ERR_PTR() inside wmidev_block_query() and the
callers should just pass that error code on with IS_ERR & friends?
--
i.
> ret = tlmi_extract_output_string(obj, value);
> kfree(obj);
> @@ -995,7 +989,7 @@ static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *a
> char *item, *value;
> int ret;
>
> - ret = tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID);
> + ret = tlmi_setting(setting->wdev, setting->index, &item);
> if (ret)
> return ret;
>
> @@ -1588,7 +1582,7 @@ static struct tlmi_pwd_setting *tlmi_create_auth(const char *pwd_type,
> return new_pwd;
> }
>
> -static int tlmi_analyze(void)
> +static int tlmi_analyze(struct wmi_device *wdev)
> {
> int i, ret;
>
> @@ -1625,7 +1619,7 @@ static int tlmi_analyze(void)
> char *item = NULL;
>
> tlmi_priv.setting[i] = NULL;
> - ret = tlmi_setting(i, &item, LENOVO_BIOS_SETTING_GUID);
> + ret = tlmi_setting(wdev, i, &item);
> if (ret)
> break;
> if (!item)
> @@ -1648,6 +1642,7 @@ static int tlmi_analyze(void)
> kfree(item);
> goto fail_clear_attr;
> }
> + setting->wdev = wdev;
> setting->index = i;
> strscpy(setting->display_name, item);
> /* If BIOS selections supported, load those */
> @@ -1666,7 +1661,7 @@ static int tlmi_analyze(void)
> */
> char *optitem, *optstart, *optend;
>
> - if (!tlmi_setting(setting->index, &optitem, LENOVO_BIOS_SETTING_GUID)) {
> + if (!tlmi_setting(setting->wdev, setting->index, &optitem)) {
> optstart = strstr(optitem, "[Optional:");
> if (optstart) {
> optstart += strlen("[Optional:");
> @@ -1791,7 +1786,7 @@ static int tlmi_probe(struct wmi_device *wdev, const void *context)
> {
> int ret;
>
> - ret = tlmi_analyze();
> + ret = tlmi_analyze(wdev);
> if (ret)
> return ret;
>
> diff --git a/drivers/platform/x86/think-lmi.h b/drivers/platform/x86/think-lmi.h
> index f267d8b46957..a80452482227 100644
> --- a/drivers/platform/x86/think-lmi.h
> +++ b/drivers/platform/x86/think-lmi.h
> @@ -4,6 +4,7 @@
> #define _THINK_LMI_H_
>
> #include <linux/types.h>
> +#include <linux/wmi.h>
>
> #define TLMI_SETTINGS_COUNT 256
> #define TLMI_SETTINGS_MAXLEN 512
> @@ -87,6 +88,7 @@ struct tlmi_pwd_setting {
> /* Attribute setting details */
> struct tlmi_attr_setting {
> struct kobject kobj;
> + struct wmi_device *wdev;
> int index;
> char display_name[TLMI_SETTINGS_MAXLEN];
> char *possible_values;
> --
> 2.39.5
>
next prev parent reply other threads:[~2025-02-13 13:17 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-03 18:23 [PATCH 0/7] platform/x86: wmi: Rework WMI device enabling Armin Wolf
2025-02-03 18:23 ` [PATCH 1/7] hwmon: (hp-wmi-sensors) Use the WMI bus API when accessing sensors Armin Wolf
2025-02-04 0:41 ` James Seo
2025-02-04 1:18 ` Guenter Roeck
2025-02-04 9:41 ` Armin Wolf
2025-02-03 18:23 ` [PATCH 2/7] platform/x86: think-lmi: Use ACPI object when extracting strings Armin Wolf
2025-02-10 0:31 ` Armin Wolf
2025-02-11 16:46 ` Mark Pearson
2025-02-03 18:23 ` [PATCH 3/7] platform/x86: think-lmi: Use WMI bus API when accessing BIOS settings Armin Wolf
2025-02-13 13:17 ` Ilpo Järvinen [this message]
2025-02-14 3:07 ` Armin Wolf
2025-02-03 18:23 ` [PATCH 4/7] platform/x86: hp-bioscfg: Use wmi_instance_count() Armin Wolf
2025-02-04 10:37 ` Ilpo Järvinen
2025-02-04 13:06 ` Armin Wolf
2025-02-04 14:27 ` Ilpo Järvinen
2025-02-03 18:23 ` [PATCH 5/7] platform/x86: wmi: Rework WCxx/WExx ACPI method handling Armin Wolf
2025-02-03 18:23 ` [PATCH 6/7] platform/x86: wmi: Call WCxx methods when setting data blocks Armin Wolf
2025-02-03 18:23 ` [PATCH 7/7] platform/x86: wmi: Update documentation regarding the GUID-based API Armin Wolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0dd7bda3-bf76-228b-27f3-f057e80e3a03@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=W_Armin@gmx.de \
--cc=corbet@lwn.net \
--cc=hdegoede@redhat.com \
--cc=james@equiv.tech \
--cc=jdelvare@suse.com \
--cc=jorge.lopez2@hp.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hwmon@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=markpearson@lenovo.com \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.