From: Len Brown Date: Thu, 7 Feb 2008 08:09:43 +0000 (-0500) Subject: Merge branches 'release', 'bugzilla-6217', 'bugzilla-6629', 'bugzilla-6933', 'bugzill... X-Git-Tag: v2.6.25-rc1~297^2~3^2~2^2~1^2~7 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c64768a7d671bcde80bca2aed93f9e07edc069c3;p=linux-2.6 Merge branches 'release', 'bugzilla-6217', 'bugzilla-6629', 'bugzilla-6933', 'bugzilla-7186', 'bugzilla-8269', 'bugzilla-8570', 'bugzilla-9139', 'bugzilla-9277', 'bugzilla-9341', 'bugzilla-9444', 'bugzilla-9614', 'bugzilla-9643' and 'bugzilla-9644' into release --- c64768a7d671bcde80bca2aed93f9e07edc069c3 diff --cc drivers/acpi/ec.c index 987b967c74,06b78e5e33,06b78e5e33,d411017f8c,06b78e5e33,d411017f8c,d411017f8c,d411017f8c,987b967c74,445ecbabbe,06b78e5e33,987b967c74,d411017f8c,d411017f8c..7222a18a03 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@@@@@@@@@@@@@@ -78,11 -75,7 -75,7 -78,10 -75,7 -78,10 -78,10 -78,10 -78,11 -78,10 -75,7 -78,11 -78,10 -78,10 +78,11 @@@@@@@@@@@@@@@ enum EC_FLAGS_WAIT_GPE = 0, /* Don't check status until GPE arrives */ EC_FLAGS_QUERY_PENDING, /* Query is pending */ EC_FLAGS_GPE_MODE, /* Expect GPE to be sent for status change */ -- - - EC_FLAGS_ONLY_IBF_GPE, /* Expect GPE only for IBF = 0 event */ ++ + + EC_FLAGS_NO_ADDRESS_GPE, /* Expect GPE only for non-address event */ ++ + + EC_FLAGS_ADDRESS, /* Address is being written */ ++ + + EC_FLAGS_NO_WDATA_GPE, /* Don't expect WDATA GPE event */ ++ + + EC_FLAGS_WDATA, /* Data is being written */ +++++++ ++ ++ EC_FLAGS_NO_OBF1_GPE, /* Don't expect GPE before read */ }; static int acpi_ec_remove(struct acpi_device *device, int type); @@@@@@@@@@@@@@@ -138,27 -131,21 -131,21 -137,27 -131,21 -137,27 -137,27 -137,27 -138,27 -137,27 -131,21 -138,27 -137,27 -137,27 +138,27 @@@@@@@@@@@@@@@ static struct acpi_ec static inline u8 acpi_ec_read_status(struct acpi_ec *ec) { -- - - return inb(ec->command_addr); ++ + + u8 x = inb(ec->command_addr); - --- - -- pr_debug(PREFIX "---> status = 0x%2x\n", x); +++++++ ++ ++ pr_debug(PREFIX "---> status = 0x%2.2x\n", x); ++ + + return x; } static inline u8 acpi_ec_read_data(struct acpi_ec *ec) { ++ + + u8 x = inb(ec->data_addr); - --- - -- pr_debug(PREFIX "---> data = 0x%2x\n", x); +++++++ ++ ++ pr_debug(PREFIX "---> data = 0x%2.2x\n", x); return inb(ec->data_addr); } static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command) { - --- - -- pr_debug(PREFIX "<--- command = 0x%2x\n", command); +++++++ ++ ++ pr_debug(PREFIX "<--- command = 0x%2.2x\n", command); outb(command, ec->command_addr); } static inline void acpi_ec_write_data(struct acpi_ec *ec, u8 data) { - --- - -- pr_debug(PREFIX "<--- data = 0x%2x\n", data); +++++++ ++ ++ pr_debug(PREFIX "<--- data = 0x%2.2x\n", data); outb(data, ec->data_addr); } @@@@@@@@@@@@@@@ -179,47 -166,25 -166,25 -178,38 -166,25 -178,38 -178,38 -178,38 -179,47 -178,38 -166,25 -179,47 -178,38 -178,38 +179,47 @@@@@@@@@@@@@@@ static inline int acpi_ec_check_status( static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll) { ++ + + int ret = 0; +++++++ ++ ++ +++++++ ++ ++ if (unlikely(event == ACPI_EC_EVENT_OBF_1 && +++++++ ++ ++ test_bit(EC_FLAGS_NO_OBF1_GPE, &ec->flags))) +++++++ ++ ++ force_poll = 1; ++ + + if (unlikely(test_bit(EC_FLAGS_ADDRESS, &ec->flags) && ++ + + test_bit(EC_FLAGS_NO_ADDRESS_GPE, &ec->flags))) ++ + + force_poll = 1; ++ + + if (unlikely(test_bit(EC_FLAGS_WDATA, &ec->flags) && ++ + + test_bit(EC_FLAGS_NO_WDATA_GPE, &ec->flags))) ++ + + force_poll = 1; if (likely(test_bit(EC_FLAGS_GPE_MODE, &ec->flags)) && likely(!force_poll)) { if (wait_event_timeout(ec->wait, acpi_ec_check_status(ec, event), msecs_to_jiffies(ACPI_EC_DELAY))) -- - - return 0; ++ + + goto end; clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags); if (acpi_ec_check_status(ec, event)) { - --- - -- if (test_bit(EC_FLAGS_ADDRESS, &ec->flags)) { + +++ + ++ if (event == ACPI_EC_EVENT_OBF_1) { -- - - /* miss OBF = 1 GPE, don't expect it anymore */ -- - - printk(KERN_INFO PREFIX "missing OBF_1 confirmation," -- - - "switching to degraded mode.\n"); -- - - set_bit(EC_FLAGS_ONLY_IBF_GPE, &ec->flags); +++++++ ++ ++ /* miss OBF_1 GPE, don't expect it */ +++++++ ++ ++ pr_info(PREFIX "missing OBF confirmation, " +++++++ ++ ++ "don't expect it any longer.\n"); +++++++ ++ ++ set_bit(EC_FLAGS_NO_OBF1_GPE, &ec->flags); +++++++ ++ ++ } else if (test_bit(EC_FLAGS_ADDRESS, &ec->flags)) { ++ + + /* miss address GPE, don't expect it anymore */ ++ + + pr_info(PREFIX "missing address confirmation, " ++ + + "don't expect it any longer.\n"); ++ + + set_bit(EC_FLAGS_NO_ADDRESS_GPE, &ec->flags); ++ + + } else if (test_bit(EC_FLAGS_WDATA, &ec->flags)) { ++ + + /* miss write data GPE, don't expect it */ ++ + + pr_info(PREFIX "missing write data confirmation, " ++ + + "don't expect it any longer.\n"); ++ + + set_bit(EC_FLAGS_NO_WDATA_GPE, &ec->flags); } else { /* missing GPEs, switch back to poll mode */ -- - - printk(KERN_INFO PREFIX "missing IBF_1 confirmations," -- - - "switch off interrupt mode.\n"); ++ + + if (printk_ratelimit()) ++ + + pr_info(PREFIX "missing confirmations, " ++ + + "switch off interrupt mode.\n"); clear_bit(EC_FLAGS_GPE_MODE, &ec->flags); } -- - - return 0; ++ + + goto end; } } else { unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY); @@@@@@@@@@@@@@@ -943,12 -887,6 -887,6 -922,11 -887,6 -922,11 -922,11 -922,11 -943,12 -933,11 -887,6 -943,12 -922,11 -922,11 +954,12 @@@@@@@@@@@@@@@ int __init acpi_ec_ecdt_probe(void /* Check that acpi_get_devices actually find something */ if (ACPI_FAILURE(status) || !boot_ec->handle) goto error; ++ + + /* We really need to limit this workaround, the only ASUS, ++ + + * which needs it, has fake EC._INI method, so use it as flag. +++++++ ++ ++ * Keep boot_ec struct as it will be needed soon. ++ + + */ ++ + + if (ACPI_FAILURE(acpi_get_handle(boot_ec->handle, "_INI", &x))) - --- - -- goto error; +++++++ ++ ++ return -ENODEV; } ret = ec_install_handlers(boot_ec); diff --cc drivers/acpi/osl.c index e53fb516f9,aabc6ca4a8,aabc6ca4a8,e3a673a008,aabc6ca4a8,e3a673a008,e3a673a008,e3a673a008,e53fb516f9,e3a673a008,101691ef66,e53fb516f9,e3a673a008,e3a673a008..e96f3d933f --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@@@@@@@@@@@@@@ -1007,37 -971,13 -971,13 -964,13 -971,13 -964,13 -964,13 -964,13 -1007,37 -964,13 -975,13 -1007,37 -964,13 -964,13 +1011,37 @@@@@@@@@@@@@@@ static int __init acpi_os_name_setup(ch __setup("acpi_os_name=", acpi_os_name_setup); ------- -- --static void enable_osi_linux(int enable) { +++++++ ++ ++static void __init set_osi_linux(unsigned int enable) +++++++ ++ ++{ +++++++ ++ ++ if (osi_linux.enable != enable) { +++++++ ++ ++ osi_linux.enable = enable; +++++++ ++ ++ printk(KERN_NOTICE PREFIX "%sed _OSI(Linux)\n", +++++++ ++ ++ enable ? "Add": "Delet"); +++++++ ++ ++ } +++++++ ++ ++ return; +++++++ ++ ++} +++++++ + ++ - if (osi_linux != enable) - printk(KERN_INFO PREFIX "%sabled _OSI(Linux)\n", - enable ? "En": "Dis"); +++++++ ++ ++static void __init acpi_cmdline_osi_linux(unsigned int enable) +++++++ ++ ++{ +++++++ ++ ++ osi_linux.cmdline = 1; /* cmdline set the default */ +++++++ ++ ++ set_osi_linux(enable); +++++++ ++ ++ +++++++ ++ ++ return; +++++++ ++ ++} +++++++ ++ ++ +++++++ ++ ++void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d) +++++++ ++ ++{ +++++++ ++ ++ osi_linux.dmi = 1; /* DMI knows that this box asks OSI(Linux) */ + +++ ++ ++ -- - if (osi_linux != enable) -- - printk(KERN_INFO PREFIX "%sabled _OSI(Linux)\n", -- - enable ? "En": "Dis"); +++++++ ++ ++ printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident); +++++++ ++ ++ +++++++ ++ ++ if (enable == -1) +++++++ ++ ++ return; +++++++ ++ ++ +++++++ ++ ++ osi_linux.known = 1; /* DMI knows which OSI(Linux) default needed */ ++ + + - --- - -- if (osi_linux != enable) - --- - -- printk(KERN_INFO PREFIX "%sabled _OSI(Linux)\n", - --- - -- enable ? "En": "Dis"); +++++++ ++ ++ set_osi_linux(enable); ------- -- -- osi_linux = enable; return; }