From: Len Brown <len.brown@intel.com>
To: linux-acpi@vger.kernel.org
Cc: Alexey Starikovskiy <astarikivskiy@suse.de>,
Alexey Starikovskiy <astarikovskiy@suse.de>,
Len Brown <len.brown@intel.com>
Subject: [PATCH 12/12] ACPI: EC: Switch from boot_ec as soon as we find its desc in DSDT.
Date: Fri, 3 Aug 2007 18:33:45 -0400 [thread overview]
Message-ID: <1186180437438-git-send-email-len.brown@intel.com> (raw)
Message-ID: <7c010de7506954e973abfab5c5999c5a97f7a73e.1186180370.git.len.brown@intel.com> (raw)
In-Reply-To: <11861804251625-git-send-email-len.brown@intel.com>
In-Reply-To: <67effe8fff32f60bdf51cba484766ba6003005bb.1186180370.git.len.brown@intel.com>
From: Alexey Starikovskiy <astarikivskiy@suse.de>
Some ASUS laptops fail to use boot time EC
and need to eventually switch to one described in DSDT.
http://bugzilla.kernel.org/show_bug.cgi?id=8709
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
---
drivers/acpi/ec.c | 45 ++++++++++++++++-----------------------------
1 files changed, 16 insertions(+), 29 deletions(-)
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 6292890..71caa7d 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -679,6 +679,14 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
return AE_CTRL_TERMINATE;
}
+static void ec_remove_handlers(struct acpi_ec *ec)
+{
+ acpi_remove_address_space_handler(ec->handle,
+ ACPI_ADR_SPACE_EC,
+ &acpi_ec_space_handler);
+ acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler);
+}
+
static int acpi_ec_add(struct acpi_device *device)
{
struct acpi_ec *ec = NULL;
@@ -702,16 +710,15 @@ static int acpi_ec_add(struct acpi_device *device)
/* Check if we found the boot EC */
if (boot_ec) {
if (boot_ec->gpe == ec->gpe) {
- /* We might have incorrect info for GL at boot time */
mutex_lock(&boot_ec->lock);
- boot_ec->global_lock = ec->global_lock;
- /* Copy handlers from new ec into boot ec */
- list_splice(&ec->list, &boot_ec->list);
+ ec_remove_handlers(boot_ec);
mutex_unlock(&boot_ec->lock);
- kfree(ec);
- ec = boot_ec;
+ mutex_destroy(&boot_ec->lock);
+ kfree(boot_ec);
+ first_ec = boot_ec = NULL;
}
- } else
+ }
+ if (!first_ec)
first_ec = ec;
ec->handle = device->handle;
acpi_driver_data(device) = ec;
@@ -740,9 +747,6 @@ static int acpi_ec_remove(struct acpi_device *device, int type)
if (ec == first_ec)
first_ec = NULL;
- /* Don't touch boot EC */
- if (boot_ec != ec)
- kfree(ec);
return 0;
}
@@ -806,9 +810,7 @@ static int acpi_ec_start(struct acpi_device *device)
if (!ec)
return -EINVAL;
- /* Boot EC is already working */
- if (ec != boot_ec)
- ret = ec_install_handlers(ec);
+ ret = ec_install_handlers(ec);
/* EC is fully operational, allow queries */
atomic_set(&ec->query_pending, 0);
@@ -818,7 +820,6 @@ static int acpi_ec_start(struct acpi_device *device)
static int acpi_ec_stop(struct acpi_device *device, int type)
{
- acpi_status status;
struct acpi_ec *ec;
if (!device)
@@ -827,21 +828,7 @@ static int acpi_ec_stop(struct acpi_device *device, int type)
ec = acpi_driver_data(device);
if (!ec)
return -EINVAL;
-
- /* Don't touch boot EC */
- if (ec == boot_ec)
- return 0;
-
- status = acpi_remove_address_space_handler(ec->handle,
- ACPI_ADR_SPACE_EC,
- &acpi_ec_space_handler);
- if (ACPI_FAILURE(status))
- return -ENODEV;
-
- status = acpi_remove_gpe_handler(NULL, ec->gpe, &acpi_ec_gpe_handler);
- if (ACPI_FAILURE(status))
- return -ENODEV;
-
+ ec_remove_handlers(ec);
return 0;
}
--
1.5.3.rc3.7.gd58e
next prev parent reply other threads:[~2007-08-03 22:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-03 22:33 ACPI patches for 2.6.23-rc2 Len Brown
[not found] ` <67effe8fff32f60bdf51cba484766ba6003005bb.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 01/12] ACPI: add "acpi_no_auto_ssdt" bootparam Len Brown
[not found] ` <e84a02ba0b33a97a8486f3248fd45f50b1a1c014.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 02/12] sony-laptop: restore the last user requested brightness level on resume Len Brown
[not found] ` <11604ecf6fb9c2ab0152fbddb7ea2724438ef76e.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 03/12] sony-laptop: sony_nc_ids[] can become static Len Brown
[not found] ` <f7b88ccb63188e775fe02e746c39ed177741cfc7.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 04/12] sonypi: fix ids member of struct acpi_driver Len Brown
[not found] ` <ac36393de6034be7266264a435360e7628849005.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 05/12] ACPI: thinkpad-acpi: fix the module init failure path Len Brown
[not found] ` <6c77088daa419b0bba83b0ce162e2f25a1a5e131.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 06/12] ACPI: button: re-scan lid state on resume Len Brown
2007-08-05 15:11 ` Thomas Renninger
[not found] ` <de47b69c7b7be46b0848b2c4f8e23c478cd68690.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 07/12] asus_acpi: fix possible double free (found by Coverity) Len Brown
[not found] ` <f1cd1fe61b96e4312312d42c0a9784dfab12e007.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 08/12] ACPI: EC: Remove noisy debug printk fron EC driver Len Brown
[not found] ` <3bd92ba19a89fe61ebf58804f9c8675372f50c1c.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 09/12] ACPI: Battery: Synchronize battery operations Len Brown
[not found] ` <cd8c93a4e04dce8f00d1ef3a476aac8bd65ae40b.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 10/12] ACPI: EC: If ECDT is not found, look up EC in DSDT Len Brown
[not found] ` <52fe4bdf40bc07498c5f7935551774e8f8458190.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` [PATCH 11/12] ACPI: EC: fix build warning Len Brown
[not found] ` <7c010de7506954e973abfab5c5999c5a97f7a73e.1186180370.git.len.brown@intel.com>
2007-08-03 22:33 ` Len Brown [this message]
2007-08-08 8:11 ` [PATCH 01/12] ACPI: add "acpi_no_auto_ssdt" bootparam Thomas Renninger
2007-08-08 16:38 ` Len Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1186180437438-git-send-email-len.brown@intel.com \
--to=len.brown@intel.com \
--cc=astarikivskiy@suse.de \
--cc=astarikovskiy@suse.de \
--cc=linux-acpi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).