I think i may have some answers about this "bug".
I own a toshiba P100, so i know about the problem and custom DSDT.
Last summer, i was using Arch Linux and when kernel 2.6.22 was out for Arch, i 
installed it on my laptop and lost sound, even if my DSDT file was ok.
I decided to check on patched applied by arch devs on their kernel to find out 
that acpi-asus-m6-battery-fix.patch was the cause of all this 
(http://bugs.archlinux.org/task/7598#comment17914).  I recompiled the 2.6.22 
kernel without this patch and magically, the sound on my laptop was working 
again with my custom DSDT file.
Last week, i've decided to try Gusty.  Before trying it, i found out about this 
bug so i decided to investigate on it. 
I downloaded patch-2.6.23.bz2 from kernel.org to find out that that the some of 
the modifications that were in acpi-asus-m6-battery-fix.patch were in kernel 
2.6.23.

Here's  acpi-asus-m6-battery-fix.patch

If ECDT is not found, look up EC in DSDT.

---------------------------------------------begins here 
---------------------------------------
From: Alexey Starikovskiy <[EMAIL PROTECTED]>


---

 drivers/acpi/ec.c |   29 ++++++++++++++++-------------
 1 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 82f496c..5cae633 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -801,8 +801,8 @@ ec_parse_device(acpi_handle handle, u32 Level, void 
*context, void **retval)
 
        ec->handle = handle;
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "GPE=0x%02lx, ports=0x%2lx, 0x%2lx",
-                         ec->gpe, ec->command_addr, ec->data_addr));
+       printk(KERN_INFO PREFIX "GPE=0x%02lx, ports=0x%2lx, 0x%2lx\n",
+                         ec->gpe, ec->command_addr, ec->data_addr);
 
        return AE_CTRL_TERMINATE;
 }
@@ -819,19 +819,22 @@ int __init acpi_ec_ecdt_probe(void)
        /*
         * Generate a boot ec context
         */
-
        status = acpi_get_table(ACPI_SIG_ECDT, 1,
                                (struct acpi_table_header **)&ecdt_ptr);
-       if (ACPI_FAILURE(status))
-               goto error;
-
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found ECDT"));
-
-       boot_ec->command_addr = ecdt_ptr->control.address;
-       boot_ec->data_addr = ecdt_ptr->data.address;
-       boot_ec->gpe = ecdt_ptr->gpe;
-       boot_ec->handle = ACPI_ROOT_OBJECT;
-
+       if (ACPI_SUCCESS(status)) {
+               printk(KERN_INFO PREFIX "Found ECDT\n");
+               boot_ec->command_addr = ecdt_ptr->control.address;
+               boot_ec->data_addr = ecdt_ptr->data.address;
+               boot_ec->gpe = ecdt_ptr->gpe;
+               boot_ec->handle = ACPI_ROOT_OBJECT;
+       } else {
+               printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n");
+               status = acpi_get_devices(ACPI_EC_HID, ec_parse_device,
+                                               boot_ec, NULL);
+               if (ACPI_FAILURE(status))
+                       goto error;
+       }
+       
        ret = ec_install_handlers(boot_ec);
        if (!ret) {
                first_ec = boot_ec;

---------------------------------------------ends here
---------------------------------------


Here's what's been changed in drivers/acpi/ec.c in kernel 2.6.23

---------------------------------------------begins here 
---------------------------------------
@@ -819,18 +874,22 @@ int __init acpi_ec_ecdt_probe(void)
        /*
         * Generate a boot ec context
         */
-
        status = acpi_get_table(ACPI_SIG_ECDT, 1,
                                (struct acpi_table_header **)&ecdt_ptr);
-       if (ACPI_FAILURE(status))
-               goto error;
-
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found ECDT"));
-
-       boot_ec->command_addr = ecdt_ptr->control.address;
-       boot_ec->data_addr = ecdt_ptr->data.address;
-       boot_ec->gpe = ecdt_ptr->gpe;
-       boot_ec->handle = ACPI_ROOT_OBJECT;
+       if (ACPI_SUCCESS(status)) {
+               printk(KERN_INFO PREFIX "EC description table is found, 
configuring boot EC\n\n");
+               boot_ec->command_addr = ecdt_ptr->control.address;
+               boot_ec->data_addr = ecdt_ptr->data.address;
+               boot_ec->gpe = ecdt_ptr->gpe;
+               boot_ec->handle = ACPI_ROOT_OBJECT;
+       } else {
+               printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n");
+               status = acpi_get_devices(ec_device_ids[0].id, ec_parse_device,
+                                               boot_ec, NULL);
+               /* Check that acpi_get_devices actually find something */
+               if (ACPI_FAILURE(status) || !boot_ec->handle)
+                       goto error;
+       }
 
        ret = ec_install_handlers(boot_ec);
        if (!ret) {

---------------------------------------------ends here
---------------------------------------


My laptop is my only production machine, so i currently uses mandriva 2008 and 
have some works to do on it for the next days.  Maybe, i'll try later to 
install gusty and look into the sources of their kernel to modify this file to 
try to prove my theory!  If someone is welling to do it, go ahead!

Sorry for my english since i'm french!

-- 
toshiba p100 series dsdt acpi error no sound, works with acpi turned off.
https://bugs.launchpad.net/bugs/136469
You received this bug notification because you are a member of Ubuntu
Bugs, which is the bug contact for Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to