@@ -153,6 +153,7 @@ struct acpi_button {
153153 int last_state ;
154154 ktime_t last_time ;
155155 bool suspended ;
156+ bool lid_state_initialized ;
156157};
157158
158159static struct acpi_device * lid_device ;
@@ -383,6 +384,8 @@ static int acpi_lid_update_state(struct acpi_device *device,
383384
384385static void acpi_lid_initialize_state (struct acpi_device * device )
385386{
387+ struct acpi_button * button = acpi_driver_data (device );
388+
386389 switch (lid_init_state ) {
387390 case ACPI_BUTTON_LID_INIT_OPEN :
388391 (void )acpi_lid_notify_state (device , 1 );
@@ -394,13 +397,14 @@ static void acpi_lid_initialize_state(struct acpi_device *device)
394397 default :
395398 break ;
396399 }
400+
401+ button -> lid_state_initialized = true;
397402}
398403
399404static void acpi_button_notify (struct acpi_device * device , u32 event )
400405{
401406 struct acpi_button * button = acpi_driver_data (device );
402407 struct input_dev * input ;
403- int users ;
404408
405409 switch (event ) {
406410 case ACPI_FIXED_HARDWARE_EVENT :
@@ -409,10 +413,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
409413 case ACPI_BUTTON_NOTIFY_STATUS :
410414 input = button -> input ;
411415 if (button -> type == ACPI_BUTTON_TYPE_LID ) {
412- mutex_lock (& button -> input -> mutex );
413- users = button -> input -> users ;
414- mutex_unlock (& button -> input -> mutex );
415- if (users )
416+ if (button -> lid_state_initialized )
416417 acpi_lid_update_state (device , true);
417418 } else {
418419 int keycode ;
@@ -457,7 +458,7 @@ static int acpi_button_resume(struct device *dev)
457458 struct acpi_button * button = acpi_driver_data (device );
458459
459460 button -> suspended = false;
460- if (button -> type == ACPI_BUTTON_TYPE_LID && button -> input -> users ) {
461+ if (button -> type == ACPI_BUTTON_TYPE_LID ) {
461462 button -> last_state = !!acpi_lid_evaluate_state (device );
462463 button -> last_time = ktime_get ();
463464 acpi_lid_initialize_state (device );
0 commit comments