diff options
Diffstat (limited to 'drivers/acpi/button.c')
| -rw-r--r-- | drivers/acpi/button.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c index a4eda7fe50d3..da4b125ab4c3 100644 --- a/drivers/acpi/button.c +++ b/drivers/acpi/button.c @@ -153,6 +153,7 @@ struct acpi_button {  	int last_state;  	ktime_t last_time;  	bool suspended; +	bool lid_state_initialized;  };  static struct acpi_device *lid_device; @@ -383,6 +384,8 @@ static int acpi_lid_update_state(struct acpi_device *device,  static void acpi_lid_initialize_state(struct acpi_device *device)  { +	struct acpi_button *button = acpi_driver_data(device); +  	switch (lid_init_state) {  	case ACPI_BUTTON_LID_INIT_OPEN:  		(void)acpi_lid_notify_state(device, 1); @@ -394,13 +397,14 @@ static void acpi_lid_initialize_state(struct acpi_device *device)  	default:  		break;  	} + +	button->lid_state_initialized = true;  }  static void acpi_button_notify(struct acpi_device *device, u32 event)  {  	struct acpi_button *button = acpi_driver_data(device);  	struct input_dev *input; -	int users;  	switch (event) {  	case ACPI_FIXED_HARDWARE_EVENT: @@ -409,10 +413,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)  	case ACPI_BUTTON_NOTIFY_STATUS:  		input = button->input;  		if (button->type == ACPI_BUTTON_TYPE_LID) { -			mutex_lock(&button->input->mutex); -			users = button->input->users; -			mutex_unlock(&button->input->mutex); -			if (users) +			if (button->lid_state_initialized)  				acpi_lid_update_state(device, true);  		} else {  			int keycode; @@ -457,7 +458,7 @@ static int acpi_button_resume(struct device *dev)  	struct acpi_button *button = acpi_driver_data(device);  	button->suspended = false; -	if (button->type == ACPI_BUTTON_TYPE_LID && button->input->users) { +	if (button->type == ACPI_BUTTON_TYPE_LID) {  		button->last_state = !!acpi_lid_evaluate_state(device);  		button->last_time = ktime_get();  		acpi_lid_initialize_state(device); | 
