what is required to support a new laptop?

matt sendtomatt at gmail.com
Mon Feb 25 00:58:41 UTC 2013


On 01/29/13 10:24, Ian Smith wrote:
> On Tue, 29 Jan 2013 12:46:43 -0500, Eitan Adler wrote:
>  > On 29 January 2013 12:29, Ian Smith <smithi at nimnet.asn.au> wrote:
>  > > Ah right.  I don't suppose kldload -v shows anything useful about the
>  > > problem loading it?  Ah, never mind, it may be obvious .. lightly
>  > > skimming your asl.y530.gz, I recalled folks having to patch something
>  > > for Lenovo rather than IBM OEMIDs .. hunt, hunt .. ok, here it is:
>  > >
>  > > http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/164538
>  > 
>  > 
>  > This is after the install of a patched acpi_ibm
>  > [3500 root at gravity /usr/src/sys/modules/acpi ]#kldload -v acpi_ibm
>  > Loaded acpi_ibm, id=12
>
> Which looks maybe successful, on the face of it? ..
>
>  > [5507 eitan at gravity (100)% ~ !1!]%sysctl dev.acpi_ibm
>  > sysctl: unknown oid 'dev.acpi_ibm'
>
> .. but clearly wasn't.
>

The Y series doesn't have the HKEY stuff, or it's not the same. You want
acpi_video (as does every new Lenovo, thinkpad or not).

The problem is Lenovo is putting the "correct" _BCL/_BCM under "PEG"
devices....section from your dsdt follows, temporary workaround test
after that

Device (LCD)
                {
                    Method (_ADR, 0, NotSerialized)
                    {
                        Return (0x0110)
                    }

                    Method (LVLS, 1, NotSerialized)
                    {
                        Store (One, Local0)
                        Store (Zero, Local1)
                        If (LEqual (OSYS, 0x07DC))
                        {
                            Store (0x14, Local5)
                            Store (PLV2, Local6)
                        }
                        Else
                        {
                            Store (0x0F, Local5)
                            Store (PLVL, Local6)
                        }

                        While (Local0)
                        {
                            Add (Local1, 0x02, Local2)
                            Store (DerefOf (Index (Local6, Local2)), Local3)
                            And (Arg0, 0xFF, Local4)
                            If (LEqual (Local4, Local3))
                            {
                                Store (Zero, Local0)
                            }

                            Subtract (Local3, One, Local3)
                            If (LEqual (Local4, Local3))
                            {
                                Store (Zero, Local0)
                            }

                            If (LGreaterEqual (Local1, Local5))
                            {
                                Store (Zero, Local0)
                            }

                            If (Local0)
                            {
                                Add (One, Local1, Local1)
                            }
                        }

                        Return (Local1)
                    }

                    Method (_BCL, 0, NotSerialized)
                    {
                        If (LNotEqual (OSYS, 0x07DC))
                        {
                            Return (PLVL)
                        }
                        Else
                        {
                            Return (PLV2)
                        }
                    }

                    Method (_BCM, 1, NotSerialized)
                    {
                        If (IGDS)
                        {
                            Store (^^^^GFX0.DD02.LVLS (Arg0), Local1)
                            Store (Local1, ^^^^LPCB.EC0.BRTS)
                            ^^^^GFX0.AINT (One, Arg0)
                        }
                        Else
                        {
                            Store (LVLS (Arg0), Local1)
                            Store (Local1, ^^^^LPCB.EC0.BRTS)
                        }

                        Store (Arg0, BRTL)
                    }

                    Method (_BQC, 0, NotSerialized)
                    {
                        Return (BRTL)
                    }
                }
            }
        }


This would be under _SB.PCI0.PEG0.VGA

Try acpi_call -p '\_SB.PCI0.PEG0.VGA.LCD._BCL'
then
acpi_call -p '\_SB.PCI0.PEG0.VGA.LCD._BCL' -i 50

Experiment with the numbers.

We need to fix acpi_video so it attaches to the correct _BCL on these
laptops.

Matt




More information about the freebsd-acpi mailing list