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 >