Re: [PATCH v2 1/2] platform/x86: hp_accel: Remove _INI method call

From: Kai-Heng Feng
Date: Wed Aug 25 2021 - 06:40:38 EST


On Mon, Aug 23, 2021 at 5:32 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:
>
> According to ACPI specification the _INI method must be called
> when device is enumerated first time. After that there is no need
> to repeat the procedure. Convert the lis3lv02d_acpi_init() to be
> a stub (Note, we may not remove it because it is called unconditionally
> by the accelerometer main driver).
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>

The lis3lv02d still works after boot and after resume.

Tested-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>

> ---
> drivers/misc/lis3lv02d/lis3lv02d.h | 1 -
> drivers/platform/x86/hp_accel.c | 14 +-------------
> 2 files changed, 1 insertion(+), 14 deletions(-)
>
> diff --git a/drivers/misc/lis3lv02d/lis3lv02d.h b/drivers/misc/lis3lv02d/lis3lv02d.h
> index 7ac788fae1b8..c394c0b08519 100644
> --- a/drivers/misc/lis3lv02d/lis3lv02d.h
> +++ b/drivers/misc/lis3lv02d/lis3lv02d.h
> @@ -271,7 +271,6 @@ struct lis3lv02d {
> int regs_size;
> u8 *reg_cache;
> bool regs_stored;
> - bool init_required;
> u8 odr_mask; /* ODR bit mask */
> u8 whoami; /* indicates measurement precision */
> s16 (*read_data) (struct lis3lv02d *lis3, int reg);
> diff --git a/drivers/platform/x86/hp_accel.c b/drivers/platform/x86/hp_accel.c
> index 8c0867bda828..54a4addc7903 100644
> --- a/drivers/platform/x86/hp_accel.c
> +++ b/drivers/platform/x86/hp_accel.c
> @@ -78,23 +78,14 @@ static const struct acpi_device_id lis3lv02d_device_ids[] = {
> };
> MODULE_DEVICE_TABLE(acpi, lis3lv02d_device_ids);
>
> -
> /**
> - * lis3lv02d_acpi_init - ACPI _INI method: initialize the device.
> + * lis3lv02d_acpi_init - initialize the device for ACPI
> * @lis3: pointer to the device struct
> *
> * Returns 0 on success.
> */
> static int lis3lv02d_acpi_init(struct lis3lv02d *lis3)
> {
> - struct acpi_device *dev = lis3->bus_priv;
> - if (!lis3->init_required)
> - return 0;
> -
> - if (acpi_evaluate_object(dev->handle, METHOD_NAME__INI,
> - NULL, NULL) != AE_OK)
> - return -EINVAL;
> -
> return 0;
> }
>
> @@ -359,7 +350,6 @@ static int lis3lv02d_add(struct acpi_device *device)
> }
>
> /* call the core layer do its init */
> - lis3_dev.init_required = true;
> ret = lis3lv02d_init_device(&lis3_dev);
> if (ret)
> return ret;
> @@ -407,14 +397,12 @@ static int lis3lv02d_suspend(struct device *dev)
>
> static int lis3lv02d_resume(struct device *dev)
> {
> - lis3_dev.init_required = false;
> lis3lv02d_poweron(&lis3_dev);
> return 0;
> }
>
> static int lis3lv02d_restore(struct device *dev)
> {
> - lis3_dev.init_required = true;
> lis3lv02d_poweron(&lis3_dev);
> return 0;
> }
> --
> 2.32.0
>