* Re: [PATCH] ACPI: button: send initial lid state after add and resume [not found] <20071021094426.5025.54274.stgit@samsung> @ 2007-10-21 11:48 ` Rafael J. Wysocki 0 siblings, 0 replies; 2+ messages in thread From: Rafael J. Wysocki @ 2007-10-21 11:48 UTC (permalink / raw) To: Alexey Starikovskiy; +Cc: ACPI Devel Maling List On Sunday, 21 October 2007 11:44, Alexey Starikovskiy wrote: > Input layer should know about initial state of lid switch, > even before first notify. > > Reference: https://bugzilla.novell.com/show_bug.cgi?id=326814 > > Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> > --- > > drivers/acpi/button.c | 40 ++++++++++++++++++++++++++++++---------- > 1 files changed, 30 insertions(+), 10 deletions(-) > > diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c > index 301e832..16418c3 100644 > --- a/drivers/acpi/button.c > +++ b/drivers/acpi/button.c > @@ -78,6 +78,7 @@ MODULE_DEVICE_TABLE(acpi, button_device_ids); > > static int acpi_button_add(struct acpi_device *device); > static int acpi_button_remove(struct acpi_device *device, int type); > +static int acpi_button_resume(struct acpi_device *device); > static int acpi_button_info_open_fs(struct inode *inode, struct file *file); > static int acpi_button_state_open_fs(struct inode *inode, struct file *file); > > @@ -87,6 +88,7 @@ static struct acpi_driver acpi_button_driver = { > .ids = button_device_ids, > .ops = { > .add = acpi_button_add, > + .resume = acpi_button_resume, > .remove = acpi_button_remove, > }, > }; > @@ -253,6 +255,23 @@ static int acpi_button_remove_fs(struct acpi_device *device) > /* -------------------------------------------------------------------------- > Driver Interface > -------------------------------------------------------------------------- */ > +static int acpi_button_send_state(struct acpi_button *button) > +{ > + unsigned long state; > + acpi_status status; > + > + if (!button) > + return -EINVAL; > + if (button->type != ACPI_BUTTON_TYPE_LID) > + return 0; Well, it looks like this function only does anything for _LID, so I'd call it acpi_lid_button_send_state() and probably the callers should do the above checks (for clarity). > + status = acpi_evaluate_integer(button->device->handle, "_LID", NULL, > + &state); > + if (ACPI_FAILURE(status)) > + return -ENODEV; > + /* input layer checks if event is redundant */ > + input_report_switch(button->input, SW_LID, !state); > + return 0; > +} > > static void acpi_button_notify(acpi_handle handle, u32 event, void *data) > { > @@ -265,16 +284,8 @@ static void acpi_button_notify(acpi_handle handle, u32 event, void *data) > switch (event) { > case ACPI_BUTTON_NOTIFY_STATUS: > input = button->input; > - > - if (button->type == ACPI_BUTTON_TYPE_LID) { > - struct acpi_handle *handle = button->device->handle; > - unsigned long state; > - > - if (!ACPI_FAILURE(acpi_evaluate_integer(handle, "_LID", > - NULL, &state))) > - input_report_switch(input, SW_LID, !state); > - > - } else { > + acpi_button_send_state(button); > + if (button->type != ACPI_BUTTON_TYPE_LID) { The type check is done here anyway, for example, and if button is NULL, it will oops. > int keycode = test_bit(KEY_SLEEP, input->keybit) ? > KEY_SLEEP : KEY_POWER; > > @@ -336,6 +347,13 @@ static int acpi_button_install_notify_handlers(struct acpi_button *button) > return ACPI_FAILURE(status) ? -ENODEV : 0; > } > > +static int acpi_button_resume(struct acpi_device *device) > +{ > + if (!device) > + return -EINVAL; > + return acpi_button_send_state(acpi_driver_data(device)); > +} > + > static void acpi_button_remove_notify_handlers(struct acpi_button *button) > { > switch (button->type) { > @@ -454,6 +472,8 @@ static int acpi_button_add(struct acpi_device *device) > if (error) > goto err_remove_handlers; > > + acpi_button_send_state(button); > + Also, button cannot be NULL here. > if (device->wakeup.flags.valid) { > /* Button's GPE is run-wake GPE */ > acpi_set_gpe_type(device->wakeup.gpe_device, > Greetings, Rafael ^ permalink raw reply [flat|nested] 2+ messages in thread
[parent not found: <20071021121610.14733.47209.stgit@samsung>]
* Re: [PATCH] ACPI: button: send initial lid state after add and resume [not found] <20071021121610.14733.47209.stgit@samsung> @ 2007-10-21 12:35 ` Rafael J. Wysocki 0 siblings, 0 replies; 2+ messages in thread From: Rafael J. Wysocki @ 2007-10-21 12:35 UTC (permalink / raw) To: Alexey Starikovskiy; +Cc: ACPI Devel Maling List, Len Brown On Sunday, 21 October 2007 14:16, Alexey Starikovskiy wrote: > Input layer should know about initial state of lid switch, > even before first notify. > > Reference: https://bugzilla.novell.com/show_bug.cgi?id=326814 > > Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> > --- Acked-by: Rafael J. Wysocki <rjw@sisk.pl> > drivers/acpi/button.c | 37 +++++++++++++++++++++++++++++-------- > 1 files changed, 29 insertions(+), 8 deletions(-) > > diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c > index 301e832..24a7865 100644 > --- a/drivers/acpi/button.c > +++ b/drivers/acpi/button.c > @@ -78,6 +78,7 @@ MODULE_DEVICE_TABLE(acpi, button_device_ids); > > static int acpi_button_add(struct acpi_device *device); > static int acpi_button_remove(struct acpi_device *device, int type); > +static int acpi_button_resume(struct acpi_device *device); > static int acpi_button_info_open_fs(struct inode *inode, struct file *file); > static int acpi_button_state_open_fs(struct inode *inode, struct file *file); > > @@ -87,6 +88,7 @@ static struct acpi_driver acpi_button_driver = { > .ids = button_device_ids, > .ops = { > .add = acpi_button_add, > + .resume = acpi_button_resume, > .remove = acpi_button_remove, > }, > }; > @@ -253,6 +255,19 @@ static int acpi_button_remove_fs(struct acpi_device *device) > /* -------------------------------------------------------------------------- > Driver Interface > -------------------------------------------------------------------------- */ > +static int acpi_lid_send_state(struct acpi_button *button) > +{ > + unsigned long state; > + acpi_status status; > + > + status = acpi_evaluate_integer(button->device->handle, "_LID", NULL, > + &state); > + if (ACPI_FAILURE(status)) > + return -ENODEV; > + /* input layer checks if event is redundant */ > + input_report_switch(button->input, SW_LID, !state); > + return 0; > +} > > static void acpi_button_notify(acpi_handle handle, u32 event, void *data) > { > @@ -265,15 +280,8 @@ static void acpi_button_notify(acpi_handle handle, u32 event, void *data) > switch (event) { > case ACPI_BUTTON_NOTIFY_STATUS: > input = button->input; > - > if (button->type == ACPI_BUTTON_TYPE_LID) { > - struct acpi_handle *handle = button->device->handle; > - unsigned long state; > - > - if (!ACPI_FAILURE(acpi_evaluate_integer(handle, "_LID", > - NULL, &state))) > - input_report_switch(input, SW_LID, !state); > - > + acpi_lid_send_state(button); > } else { > int keycode = test_bit(KEY_SLEEP, input->keybit) ? > KEY_SLEEP : KEY_POWER; > @@ -336,6 +344,17 @@ static int acpi_button_install_notify_handlers(struct acpi_button *button) > return ACPI_FAILURE(status) ? -ENODEV : 0; > } > > +static int acpi_button_resume(struct acpi_device *device) > +{ > + struct acpi_button *button; > + if (!device) > + return -EINVAL; > + button = acpi_driver_data(device); > + if (button && button->type == ACPI_BUTTON_TYPE_LID) > + return acpi_lid_send_state(button); > + return 0; > +} > + > static void acpi_button_remove_notify_handlers(struct acpi_button *button) > { > switch (button->type) { > @@ -453,6 +472,8 @@ static int acpi_button_add(struct acpi_device *device) > error = input_register_device(input); > if (error) > goto err_remove_handlers; > + if (button->type == ACPI_BUTTON_TYPE_LID) > + acpi_lid_send_state(button); > > if (device->wakeup.flags.valid) { > /* Button's GPE is run-wake GPE */ > > - > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- "Premature optimization is the root of all evil." - Donald Knuth ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-10-21 12:19 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20071021094426.5025.54274.stgit@samsung>
2007-10-21 11:48 ` [PATCH] ACPI: button: send initial lid state after add and resume Rafael J. Wysocki
[not found] <20071021121610.14733.47209.stgit@samsung>
2007-10-21 12:35 ` Rafael J. Wysocki
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox