lkml.org 
[lkml]   [2010]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [Regression] 2.6.37-rc1: Lenovo T61 mute button does not work
    On Tue, Dec 07, 2010 at 11:19:27AM +0800, Lin Ming wrote:
    > Would you please try below patch?

    yes, the patch fixed my problem with the mute button. Thanks.

    > Thanks.
    >
    > ---
    > drivers/acpi/osl.c | 55 ++++++++++++++++++++++++++++++---------------------
    > 1 files changed, 32 insertions(+), 23 deletions(-)
    >
    > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
    > index 966fedd..f620689 100644
    > --- a/drivers/acpi/osl.c
    > +++ b/drivers/acpi/osl.c
    > @@ -152,8 +152,7 @@ static struct osi_linux {
    > unsigned int enable:1;
    > unsigned int dmi:1;
    > unsigned int cmdline:1;
    > - unsigned int known:1;
    > -} osi_linux = { 0, 0, 0, 0};
    > +} osi_linux = {0, 0, 0};
    >
    > static u32 acpi_osi_handler(acpi_string interface, u32 supported)
    > {
    > @@ -1055,18 +1054,25 @@ static int __init acpi_os_name_setup(char *str)
    >
    > __setup("acpi_os_name=", acpi_os_name_setup);
    >
    > +static void __init osi_setup(char *str)
    > +{
    > + if (str == NULL || *str == '\0') {
    > + printk(KERN_INFO PREFIX "_OSI method disabled\n");
    > + acpi_gbl_create_osi_method = FALSE;
    > + } else {
    > + strncpy(osi_setup_string, str, OSI_STRING_LENGTH_MAX);
    > + }
    > +}
    > +
    > static void __init set_osi_linux(unsigned int enable)
    > {
    > - if (osi_linux.enable != enable) {
    > + if (osi_linux.enable != enable)
    > osi_linux.enable = enable;
    > - printk(KERN_NOTICE PREFIX "%sed _OSI(Linux)\n",
    > - enable ? "Add": "Delet");
    > - }
    >
    > if (osi_linux.enable)
    > - acpi_osi_setup("Linux");
    > + osi_setup("Linux");
    > else
    > - acpi_osi_setup("!Linux");
    > + osi_setup("!Linux");
    >
    > return;
    > }
    > @@ -1088,8 +1094,6 @@ void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
    > if (enable == -1)
    > return;
    >
    > - osi_linux.known = 1; /* DMI knows which OSI(Linux) default needed */
    > -
    > set_osi_linux(enable);
    >
    > return;
    > @@ -1105,31 +1109,36 @@ void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
    > static void __init acpi_osi_setup_late(void)
    > {
    > char *str = osi_setup_string;
    > + acpi_status status;
    >
    > if (*str == '\0')
    > return;
    >
    > - if (!strcmp("!Linux", str)) {
    > - acpi_cmdline_osi_linux(0); /* !enable */
    > - } else if (*str == '!') {
    > - if (acpi_remove_interface(++str) == AE_OK)
    > + if (*str == '!') {
    > + status = acpi_remove_interface(++str);
    > +
    > + if (ACPI_SUCCESS(status))
    > printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
    > - } else if (!strcmp("Linux", str)) {
    > - acpi_cmdline_osi_linux(1); /* enable */
    > } else {
    > - if (acpi_install_interface(str) == AE_OK)
    > + status = acpi_install_interface(str);
    > +
    > + if (ACPI_SUCCESS(status))
    > printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
    > }
    > }
    >
    > int __init acpi_osi_setup(char *str)
    > {
    > - if (str == NULL || *str == '\0') {
    > - printk(KERN_INFO PREFIX "_OSI method disabled\n");
    > - acpi_gbl_create_osi_method = FALSE;
    > - } else {
    > - strncpy(osi_setup_string, str, OSI_STRING_LENGTH_MAX);
    > - }
    > + /* kernel command line overrides DMI */
    > + osi_linux.dmi = 0;
    > + osi_linux.enable = 0;
    > +
    > + if (str && !strcmp("Linux", str))
    > + acpi_cmdline_osi_linux(1);
    > + else if (str && !strcmp("!Linux", str))
    > + acpi_cmdline_osi_linux(0);
    > + else
    > + osi_setup(str);
    >
    > return 1;
    > }
    >

    --
    Lukáš Hejtmánek
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2010-12-08 13:37    [W:0.031 / U:90.316 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site