From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Gergo Koteles <soyer@irl.hu>
Cc: Hans de Goede <hdegoede@redhat.com>,
Ike Panhc <ike.pan@canonical.com>,
platform-driver-x86@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 3/4] platform/x86: ideapad-laptop: move ACPI helpers from header to source file
Date: Thu, 18 Jul 2024 11:12:04 +0300 (EEST) [thread overview]
Message-ID: <33138d92-9f0f-de0f-b1d0-e89651574717@linux.intel.com> (raw)
In-Reply-To: <0d11fe28dedb77c0dd8a27e76d0bf467c6ab6c7d.1721258854.git.soyer@irl.hu>
[-- Attachment #1: Type: text/plain, Size: 9231 bytes --]
On Thu, 18 Jul 2024, Gergo Koteles wrote:
> Since moving ymc_trigger_ec from lenovo-ymc to ideapad-laptop, only the
> latter uses these definitions and functions.
>
> Move them back to source file.
>
> Signed-off-by: Gergo Koteles <soyer@irl.hu>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
--
i.
> ---
> drivers/platform/x86/ideapad-laptop.c | 136 +++++++++++++++++++++++++
> drivers/platform/x86/ideapad-laptop.h | 139 --------------------------
> 2 files changed, 136 insertions(+), 139 deletions(-)
>
> diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
> index 1d61bd921528..66b34e99147e 100644
> --- a/drivers/platform/x86/ideapad-laptop.c
> +++ b/drivers/platform/x86/ideapad-laptop.c
> @@ -21,6 +21,7 @@
> #include <linux/init.h>
> #include <linux/input.h>
> #include <linux/input/sparse-keymap.h>
> +#include <linux/jiffies.h>
> #include <linux/kernel.h>
> #include <linux/leds.h>
> #include <linux/module.h>
> @@ -86,6 +87,34 @@ enum {
> SALS_FNLOCK_OFF = 0xf,
> };
>
> +enum {
> + VPCCMD_R_VPC1 = 0x10,
> + VPCCMD_R_BL_MAX,
> + VPCCMD_R_BL,
> + VPCCMD_W_BL,
> + VPCCMD_R_WIFI,
> + VPCCMD_W_WIFI,
> + VPCCMD_R_BT,
> + VPCCMD_W_BT,
> + VPCCMD_R_BL_POWER,
> + VPCCMD_R_NOVO,
> + VPCCMD_R_VPC2,
> + VPCCMD_R_TOUCHPAD,
> + VPCCMD_W_TOUCHPAD,
> + VPCCMD_R_CAMERA,
> + VPCCMD_W_CAMERA,
> + VPCCMD_R_3G,
> + VPCCMD_W_3G,
> + VPCCMD_R_ODD, /* 0x21 */
> + VPCCMD_W_FAN,
> + VPCCMD_R_RF,
> + VPCCMD_W_RF,
> + VPCCMD_W_YMC = 0x2A,
> + VPCCMD_R_FAN = 0x2B,
> + VPCCMD_R_SPECIAL_BUTTONS = 0x31,
> + VPCCMD_W_BL_POWER = 0x33,
> +};
> +
> /*
> * These correspond to the number of supported states - 1
> * Future keyboard types may need a new system, if there's a collision
> @@ -234,6 +263,7 @@ static void ideapad_shared_exit(struct ideapad_private *priv)
> /*
> * ACPI Helpers
> */
> +#define IDEAPAD_EC_TIMEOUT 200 /* in ms */
>
> static int eval_int(acpi_handle handle, const char *name, unsigned long *res)
> {
> @@ -249,6 +279,29 @@ static int eval_int(acpi_handle handle, const char *name, unsigned long *res)
> return 0;
> }
>
> +static int eval_int_with_arg(acpi_handle handle, const char *name, unsigned long arg,
> + unsigned long *res)
> +{
> + struct acpi_object_list params;
> + unsigned long long result;
> + union acpi_object in_obj;
> + acpi_status status;
> +
> + params.count = 1;
> + params.pointer = &in_obj;
> + in_obj.type = ACPI_TYPE_INTEGER;
> + in_obj.integer.value = arg;
> +
> + status = acpi_evaluate_integer(handle, (char *)name, ¶ms, &result);
> + if (ACPI_FAILURE(status))
> + return -EIO;
> +
> + if (res)
> + *res = result;
> +
> + return 0;
> +}
> +
> static int exec_simple_method(acpi_handle handle, const char *name, unsigned long arg)
> {
> acpi_status status = acpi_execute_simple_method(handle, (char *)name, arg);
> @@ -291,6 +344,89 @@ static int eval_dytc(acpi_handle handle, unsigned long cmd, unsigned long *res)
> return eval_int_with_arg(handle, "DYTC", cmd, res);
> }
>
> +static int eval_vpcr(acpi_handle handle, unsigned long cmd, unsigned long *res)
> +{
> + return eval_int_with_arg(handle, "VPCR", cmd, res);
> +}
> +
> +static int eval_vpcw(acpi_handle handle, unsigned long cmd, unsigned long data)
> +{
> + struct acpi_object_list params;
> + union acpi_object in_obj[2];
> + acpi_status status;
> +
> + params.count = 2;
> + params.pointer = in_obj;
> + in_obj[0].type = ACPI_TYPE_INTEGER;
> + in_obj[0].integer.value = cmd;
> + in_obj[1].type = ACPI_TYPE_INTEGER;
> + in_obj[1].integer.value = data;
> +
> + status = acpi_evaluate_object(handle, "VPCW", ¶ms, NULL);
> + if (ACPI_FAILURE(status))
> + return -EIO;
> +
> + return 0;
> +}
> +
> +static int read_ec_data(acpi_handle handle, unsigned long cmd, unsigned long *data)
> +{
> + unsigned long end_jiffies, val;
> + int err;
> +
> + err = eval_vpcw(handle, 1, cmd);
> + if (err)
> + return err;
> +
> + end_jiffies = jiffies + msecs_to_jiffies(IDEAPAD_EC_TIMEOUT) + 1;
> +
> + while (time_before(jiffies, end_jiffies)) {
> + schedule();
> +
> + err = eval_vpcr(handle, 1, &val);
> + if (err)
> + return err;
> +
> + if (val == 0)
> + return eval_vpcr(handle, 0, data);
> + }
> +
> + acpi_handle_err(handle, "timeout in %s\n", __func__);
> +
> + return -ETIMEDOUT;
> +}
> +
> +static int write_ec_cmd(acpi_handle handle, unsigned long cmd, unsigned long data)
> +{
> + unsigned long end_jiffies, val;
> + int err;
> +
> + err = eval_vpcw(handle, 0, data);
> + if (err)
> + return err;
> +
> + err = eval_vpcw(handle, 1, cmd);
> + if (err)
> + return err;
> +
> + end_jiffies = jiffies + msecs_to_jiffies(IDEAPAD_EC_TIMEOUT) + 1;
> +
> + while (time_before(jiffies, end_jiffies)) {
> + schedule();
> +
> + err = eval_vpcr(handle, 1, &val);
> + if (err)
> + return err;
> +
> + if (val == 0)
> + return 0;
> + }
> +
> + acpi_handle_err(handle, "timeout in %s\n", __func__);
> +
> + return -ETIMEDOUT;
> +}
> +
> /*
> * debugfs
> */
> diff --git a/drivers/platform/x86/ideapad-laptop.h b/drivers/platform/x86/ideapad-laptop.h
> index 948cc61800a9..1e52f2aa0aac 100644
> --- a/drivers/platform/x86/ideapad-laptop.h
> +++ b/drivers/platform/x86/ideapad-laptop.h
> @@ -9,9 +9,6 @@
> #ifndef _IDEAPAD_LAPTOP_H_
> #define _IDEAPAD_LAPTOP_H_
>
> -#include <linux/acpi.h>
> -#include <linux/jiffies.h>
> -#include <linux/errno.h>
> #include <linux/notifier.h>
>
> enum ideapad_laptop_notifier_actions {
> @@ -22,140 +19,4 @@ int ideapad_laptop_register_notifier(struct notifier_block *nb);
> int ideapad_laptop_unregister_notifier(struct notifier_block *nb);
> void ideapad_laptop_call_notifier(unsigned long action, void *data);
>
> -enum {
> - VPCCMD_R_VPC1 = 0x10,
> - VPCCMD_R_BL_MAX,
> - VPCCMD_R_BL,
> - VPCCMD_W_BL,
> - VPCCMD_R_WIFI,
> - VPCCMD_W_WIFI,
> - VPCCMD_R_BT,
> - VPCCMD_W_BT,
> - VPCCMD_R_BL_POWER,
> - VPCCMD_R_NOVO,
> - VPCCMD_R_VPC2,
> - VPCCMD_R_TOUCHPAD,
> - VPCCMD_W_TOUCHPAD,
> - VPCCMD_R_CAMERA,
> - VPCCMD_W_CAMERA,
> - VPCCMD_R_3G,
> - VPCCMD_W_3G,
> - VPCCMD_R_ODD, /* 0x21 */
> - VPCCMD_W_FAN,
> - VPCCMD_R_RF,
> - VPCCMD_W_RF,
> - VPCCMD_W_YMC = 0x2A,
> - VPCCMD_R_FAN = 0x2B,
> - VPCCMD_R_SPECIAL_BUTTONS = 0x31,
> - VPCCMD_W_BL_POWER = 0x33,
> -};
> -
> -static inline int eval_int_with_arg(acpi_handle handle, const char *name, unsigned long arg, unsigned long *res)
> -{
> - struct acpi_object_list params;
> - unsigned long long result;
> - union acpi_object in_obj;
> - acpi_status status;
> -
> - params.count = 1;
> - params.pointer = &in_obj;
> - in_obj.type = ACPI_TYPE_INTEGER;
> - in_obj.integer.value = arg;
> -
> - status = acpi_evaluate_integer(handle, (char *)name, ¶ms, &result);
> - if (ACPI_FAILURE(status))
> - return -EIO;
> -
> - if (res)
> - *res = result;
> -
> - return 0;
> -}
> -
> -static inline int eval_vpcr(acpi_handle handle, unsigned long cmd, unsigned long *res)
> -{
> - return eval_int_with_arg(handle, "VPCR", cmd, res);
> -}
> -
> -static inline int eval_vpcw(acpi_handle handle, unsigned long cmd, unsigned long data)
> -{
> - struct acpi_object_list params;
> - union acpi_object in_obj[2];
> - acpi_status status;
> -
> - params.count = 2;
> - params.pointer = in_obj;
> - in_obj[0].type = ACPI_TYPE_INTEGER;
> - in_obj[0].integer.value = cmd;
> - in_obj[1].type = ACPI_TYPE_INTEGER;
> - in_obj[1].integer.value = data;
> -
> - status = acpi_evaluate_object(handle, "VPCW", ¶ms, NULL);
> - if (ACPI_FAILURE(status))
> - return -EIO;
> -
> - return 0;
> -}
> -
> -#define IDEAPAD_EC_TIMEOUT 200 /* in ms */
> -
> -static inline int read_ec_data(acpi_handle handle, unsigned long cmd, unsigned long *data)
> -{
> - unsigned long end_jiffies, val;
> - int err;
> -
> - err = eval_vpcw(handle, 1, cmd);
> - if (err)
> - return err;
> -
> - end_jiffies = jiffies + msecs_to_jiffies(IDEAPAD_EC_TIMEOUT) + 1;
> -
> - while (time_before(jiffies, end_jiffies)) {
> - schedule();
> -
> - err = eval_vpcr(handle, 1, &val);
> - if (err)
> - return err;
> -
> - if (val == 0)
> - return eval_vpcr(handle, 0, data);
> - }
> -
> - acpi_handle_err(handle, "timeout in %s\n", __func__);
> -
> - return -ETIMEDOUT;
> -}
> -
> -static inline int write_ec_cmd(acpi_handle handle, unsigned long cmd, unsigned long data)
> -{
> - unsigned long end_jiffies, val;
> - int err;
> -
> - err = eval_vpcw(handle, 0, data);
> - if (err)
> - return err;
> -
> - err = eval_vpcw(handle, 1, cmd);
> - if (err)
> - return err;
> -
> - end_jiffies = jiffies + msecs_to_jiffies(IDEAPAD_EC_TIMEOUT) + 1;
> -
> - while (time_before(jiffies, end_jiffies)) {
> - schedule();
> -
> - err = eval_vpcr(handle, 1, &val);
> - if (err)
> - return err;
> -
> - if (val == 0)
> - return 0;
> - }
> -
> - acpi_handle_err(handle, "timeout in %s\n", __func__);
> -
> - return -ETIMEDOUT;
> -}
> -
> -#undef IDEAPAD_EC_TIMEOUT
> #endif /* !_IDEAPAD_LAPTOP_H_ */
>
next prev parent reply other threads:[~2024-07-18 8:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-18 7:27 [PATCH v2 0/4] platform/x86: ideapad-laptop: synchronize VPC commands Gergo Koteles
2024-07-18 7:27 ` [PATCH v2 1/4] platform/x86: ideapad-laptop: introduce a generic notification chain Gergo Koteles
2024-07-18 7:27 ` [PATCH v2 2/4] platform/x86: ideapad-laptop: move ymc_trigger_ec from lenovo-ymc Gergo Koteles
2024-07-18 8:10 ` Ilpo Järvinen
2024-07-18 7:27 ` [PATCH v2 3/4] platform/x86: ideapad-laptop: move ACPI helpers from header to source file Gergo Koteles
2024-07-18 8:12 ` Ilpo Järvinen [this message]
2024-07-18 7:27 ` [PATCH v2 4/4] platform/x86: ideapad-laptop: add a mutex to synchronize VPC commands Gergo Koteles
2024-07-18 8:06 ` Ilpo Järvinen
2024-07-18 8:12 ` Hans de Goede
2024-07-18 8:17 ` Ilpo Järvinen
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=33138d92-9f0f-de0f-b1d0-e89651574717@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=hdegoede@redhat.com \
--cc=ike.pan@canonical.com \
--cc=linux-kernel@vger.kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=soyer@irl.hu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox