Re: [PATCH v2 2/5] ACPI: button: Add button.lid_init_state=close

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 9, 2017 at 9:02 AM, Lv Zheng <lv.zheng@xxxxxxxxx> wrote:
> We have tested that:
> 1. If ACPI button driver sends "open" to the user space but _LID return
>    value to the kernel space, external monitor issues still cannot be fixed
>    (link #1, comment #33, test result #2), while
> 2. if ACPI button driver sends "close" to the user space but _LID return
>    value to the kernel space, external monitor issues can be fixed (link
>    #1, comment #33, test result #3).
> We knew that some platforms require "open" to be sent to the user space to
> avoid entering a suspend/resume loop. So we have 2 contradictory user space
> requirements and are not possible to fix them both in 1 kernel driver mode
> without using platform specific quirks. This actually can also be treated
> as a proof that the root causes of the bugs are not in the kernel button
> driver but in the user space usage models.
>
> This patch adds button.lid_init_state=close so that it can explicitly
> explain the contradictory requirements and help the kernel community to
> raise such bugs to the correct responsibles.

Well, I just can't see the difference between "close" and "method".
The intel driver actually triggers the evaluation of _LID, so this
explains why the value gets corrected on platform where the _LID
method is accurate.

And I don't see the point of sending "close" to user space if close
means suspend loops and only fixes a dynamic case where you boot your
laptop with the lid closed. Do you expect users to append this option
at each boot when the lid is closed?

Cheers,
Benjamin

>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=195455 [#1]
> Link: https://bugzilla.redhat.com/show_bug.cgi?id=1430259
> Tested-by: Steffen Weber <steffen.weber@xxxxxxxxx>
> Tested-by: Julian Wiedmann <julian.wiedmann@xxxxxxxx>
> Reported-by: Joachim Frieben <jfrieben@xxxxxxxxxxx>
> Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx>
> ---
>  Documentation/acpi/acpi-lid.txt | 12 +++++++-----
>  drivers/acpi/button.c           | 11 ++++++++++-
>  2 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/acpi/acpi-lid.txt b/Documentation/acpi/acpi-lid.txt
> index effe7af..e846a59 100644
> --- a/Documentation/acpi/acpi-lid.txt
> +++ b/Documentation/acpi/acpi-lid.txt
> @@ -69,13 +69,15 @@ A. button.lid_init_state=method:
>     notification is missing.
>     This option is the default behavior during the period the userspace
>     isn't ready to handle the buggy AML tables.
> -B. button.lid_init_state=open:
> -   When this option is specified, the ACPI button driver always reports the
> -   initial lid state as "opened" and whether the "opened"/"closed" events
> -   are paired fully relies on the firmware implementation.
> +B. button.lid_init_state=open/close:
> +   When one of these options are specified, the ACPI button driver always
> +   reports the initial lid state as fixed "opened"/"closed" and whether the
> +   "opened"/"closed" events are paired fully relies on the firmware
> +   implementation.
>     This may fix some platforms where the returning value of the _LID
>     control method is not reliable and the initial lid state notification is
> -   missing.
> +   missing. Especially useful for platforms where different usage models
> +   require contractory initial lid state.
>
>  If the userspace has been prepared to ignore the unreliable "opened" events
>  and the unreliable initial state notification, Linux users should always
> diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c
> index 6d5a8c1..8b4666f 100644
> --- a/drivers/acpi/button.c
> +++ b/drivers/acpi/button.c
> @@ -57,7 +57,8 @@
>
>  #define ACPI_BUTTON_LID_INIT_IGNORE    0x00
>  #define ACPI_BUTTON_LID_INIT_OPEN      0x01
> -#define ACPI_BUTTON_LID_INIT_METHOD    0x02
> +#define ACPI_BUTTON_LID_INIT_CLOSE     0x02
> +#define ACPI_BUTTON_LID_INIT_METHOD    0x03
>
>  #define _COMPONENT             ACPI_BUTTON_COMPONENT
>  ACPI_MODULE_NAME("button");
> @@ -377,6 +378,9 @@ static void acpi_lid_initialize_state(struct acpi_device *device)
>         case ACPI_BUTTON_LID_INIT_OPEN:
>                 (void)acpi_lid_notify_state(device, 1);
>                 break;
> +       case ACPI_BUTTON_LID_INIT_CLOSE:
> +               (void)acpi_lid_notify_state(device, 0);
> +               break;
>         case ACPI_BUTTON_LID_INIT_METHOD:
>                 (void)acpi_lid_update_state(device);
>                 break;
> @@ -563,6 +567,9 @@ static int param_set_lid_init_state(const char *val, struct kernel_param *kp)
>         if (!strncmp(val, "open", sizeof("open") - 1)) {
>                 lid_init_state = ACPI_BUTTON_LID_INIT_OPEN;
>                 pr_info("Notify initial lid state as open\n");
> +       } else if (!strncmp(val, "close", sizeof("close") - 1)) {
> +               lid_init_state = ACPI_BUTTON_LID_INIT_CLOSE;
> +               pr_info("Notify initial lid state as close\n");
>         } else if (!strncmp(val, "method", sizeof("method") - 1)) {
>                 lid_init_state = ACPI_BUTTON_LID_INIT_METHOD;
>                 pr_info("Notify initial lid state with _LID return value\n");
> @@ -579,6 +586,8 @@ static int param_get_lid_init_state(char *buffer, struct kernel_param *kp)
>         switch (lid_init_state) {
>         case ACPI_BUTTON_LID_INIT_OPEN:
>                 return sprintf(buffer, "open");
> +       case ACPI_BUTTON_LID_INIT_CLOSE:
> +               return sprintf(buffer, "close");
>         case ACPI_BUTTON_LID_INIT_METHOD:
>                 return sprintf(buffer, "method");
>         case ACPI_BUTTON_LID_INIT_IGNORE:
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux