Comment 15 for bug 75434

Revision history for this message
Patrick Day (patrick-b-day) wrote :

I've got sound to work with the Ubuntu 6.10 2.6.17-10-generic kernel by doing the following:

1) Copying my "fixed" dsdt.aml to /etc/initramfs-tools/DSDT.aml
2) Running mkinitramfs as below:

sudo mkinitramfs -o /boot/initrd.img-2.6.17-10-generic-fixed-dsdt

3) Rebooting and instruct grub to use the above initrd rather than the stock 2.6.17-10-generic initrd.

So my modified dsdt.dsl works on it's own. As Matthew G. noted in a above comment I don't I don't have any ACPI errors in my dmesg, so I reexamined my dsdt.dsl and found what I believe to be the problem. Below is the DSDT routine that checks the OS version:

        Method (_INI, 0, NotSerialized)
        {
            If (DTSE)
            {
                TRAP (0x47)
            }

            Store (0x07D0, OSYS)
            If (CondRefOf (_OSI, Local0))
            {
                If (_OSI ("Linux"))
                {
                    Store (0x03E8, OSYS)
                }
                Else
                {
                    Store (0x07D1, OSYS)
                    If (_OSI ("Windows 2001 SP2"))
                    {
                        Store (0x07D2, OSYS)
                    }

                    If (_OSI ("Windows 2001.1"))
                    {
                        Store (0x07D3, OSYS)
                    }

                    If (_OSI ("Windows 2001.1 SP1"))
                    {
                        Store (0x07D4, OSYS)
                    }

                    If (_OSI ("Windows 2006"))
                    {
                        Store (0x07D6, OSYS)
                    }

                    If (LAnd (MPEN, LEqual (OSYS, 0x07D1)))
                    {
                        TRAP (0x3D)
                    }
                }
            }
        }

Note that if _OSI returns true for "Linux" the routine doesn't check to see what other ACPI interfaces are supported by the operating system. Checking elsewhere for the usage of OSYS in the dsdt.dsl reveals that much AML code is not executed when OSYS=0x03E8 (Linux).

In my "fixed" dsdt.dsl the above routine is reduced to setting OSYS to the corresponding "Windows 2006" value. Here it is:

        Method (_INI, 0, NotSerialized)
        {
            If (DTSE)
            {
                TRAP (0x47)
            }

            Store (0x07D6, OSYS)
        }

A patch for enhancing the "acpi_osi=" kernel parameter to fix this problem was presented here http://marc.theaimsgroup.com/?l=linux-acpi&m=115563247228643&w=2 . It was rejected here, http://marc.theaimsgroup.com/?l=linux-acpi&m=115925608232609&w=2 .