[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <33138d92-9f0f-de0f-b1d0-e89651574717@linux.intel.com>
Date: Thu, 18 Jul 2024 11:12:04 +0300 (EEST)
From: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>
To: Gergo Koteles <soyer@....hu>
cc: Hans de Goede <hdegoede@...hat.com>, Ike Panhc <ike.pan@...onical.com>,
platform-driver-x86@...r.kernel.org, LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v2 3/4] platform/x86: ideapad-laptop: move ACPI helpers
from header to source file
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@....hu>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@...ux.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_ */
>
Powered by blists - more mailing lists