tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: ACPI Issues on Lifebook P7120 (with fixes)



Joerg Sonnenberger wrote:
On Fri, Dec 05, 2008 at 05:38:06PM +0100, Gr?goire Sutre wrote:
- a patch acpi.c.patch that comments the discarding of ACPI devices
  without HID.  This patch is required for acpi_display.c, since
  otherwise the display adapter device would be discarded in
  autoconfiguration of ACPI devices.

How is the ACPI device defined in the DSDT? Unless this is a special
device class like a Processor object, this is plainly invalid.

I get the following with acpidump. I would not be surprised that my laptop's BIOS does not conform to the ACPI spec. Is it written in the spec that every ACPI device must have an HID?

Best,

Grégoire


/*
RSD PTR: Checksum=116, OEMID=FUJ, RsdtAddress=0x3f67b1d1
 */
/*
RSDT: Length=60, Revision=1, Checksum=131,
        OEMID=FUJ, OEM Table ID=FJNB1A5, OEM Revision=0x1230000,
        Creator ID=FUJ, Creator Revision=0x100
 */


[lots of other stuff]

        Device(GFX0) {
            Name(_ADR, 0x00020000)
            Method(XLCD) {
                Return(One)
            }
            Method(XCRT) {
                Return(One)
            }
            Method(XTV) {
                Return(XOr(SOUT, One, ))
            }
            Method(XDVI) {
                Return(Zero)
            }
            Scope(\) {
                Name(WLCD, Zero)
                Name(WCRT, Zero)
                Name(WTV, Zero)
                Name(WDVI, Zero)
            }
            Method(PHTK) {
                Store(Zero, DSWF)
            }
            Name(F10T, Package(0x0a) {
                0x01,
                0x02,
                0x03,
                0x04,
                0x05,
                0x01,
                0x02,
                0x03,
                0x04,
                0x05,
            })
            Method(AHTK) {
                If(LAnd(LEqual(And(ADOS, 0x03, ), Zero), DSWF)) {
                    UPDD()
                    If(LEqual(DSWF, 0x01)) {
Or(ShiftLeft(CDVI, 0x02, ), Or(ShiftLeft(CCRT, 0x01, ), CLCD, ), Local0) Or(ShiftLeft(ADVI, 0x02, ), Or(ShiftLeft(ACRT, 0x01, ), ALCD, ), Local1)
                        Store(Zero, Local2)
                        Store(0xff, Local3)
While(LAnd(LLess(Local2, 0x0a), LEqual(Local3, 0xff))) { If(LEqual(DerefOf(Index(F10T, Local2, )), Local0)) {
                                If(LAnd(CTV, ATV)) {
                                    Store(Local2, Local3)
                                }
                                Else {
                                    Add(Local2, 0x01, Local3)
                                }
                            }
                            Increment(Local2)
                        }
                        Store(0xff, Local2)
                        If(LNot(LEqual(Local3, 0xff))) {
While(LAnd(LLess(Local3, 0x0a), LEqual(Local2, 0xff))) { If(LEqual(And(DerefOf(Index(F10T, Local3, )), Local1, ), DerefOf(Index(F10T, Local3, )))) { Store(DerefOf(Index(F10T, Local3, )), Local2)
                                }
                                Increment(Local3)
                            }
                        }
                        If(LEqual(Local2, 0xff)) {
                            If(ALCD) {
                                Store(0x01, Local2)
                            }
                            Else {
                                If(ACRT) {
                                    Store(0x02, Local2)
                                }
                                Else {
                                    If(ADVI) {
                                        Store(0x04, Local2)
                                    }
                                    Else {
                                        Store(0x02, Local2)
                                    }
                                }
                            }
                        }
                        And(Local2, 0x01, WLCD)
                        ShiftRight(And(Local2, 0x02, ), 0x01, WCRT)
                        ShiftRight(And(Local2, 0x04, ), 0x02, WDVI)
                        Store(Zero, WTV)
                        Notify(\_SB.PCI0.GFX0, 0x80)
                    }
                    Else {
                        If(LEqual(DSWF, 0x02)) {
                            And(CLCD, ALCD, WLCD)
                            And(CCRT, ACRT, WCRT)
                            And(CDVI, ADVI, WDVI)
                            And(XOr(CTV, 0x01, ), ATV, WTV)
                            If(LOr(LOr(WTV, WDVI), LOr(WCRT, WLCD))) {
                                If(LAnd(LAnd(WLCD, WCRT), WTV)) {
                                    Store(Zero, WCRT)
                                }
                                If(LAnd(LAnd(WLCD, WDVI), WTV)) {
                                    Store(Zero, WDVI)
                                }
                                If(LAnd(LAnd(WCRT, WDVI), WTV)) {
                                    Store(Zero, WDVI)
                                }
                                Notify(\_SB.PCI0.GFX0, 0x80)
                            }
                        }
                    }
                }
            }
            Method(UPDD) {
                If(LNot(LLess(\_SB.OSTP(), 0x08))) {
                    Notify(\_SB.PCI0, 0x00)
                }
                Else {
                    Notify(\_SB.PCI0.GFX0, 0x00)
                }
                Sleep(0x02ee)
                Store(0xff, DVID)
                Store(0x8e, CMD)
                Store(Zero, SSMI)
            }
            Method(_DOS, 1) {
                And(Arg0, 0x07, ADOS)
            }
            Method(_DOD) {
                Return(Package(0x04) {
                    0x00010100,
                    0x00010400,
                    0x00010200,
                    0x00010300,
                })
            }
            Device(CRT) {
                Method(_ADR) {
                    Return(0x0100)
                }
                Method(_DCS) {
                    If(XCRT()) {
                        UPDD()
Return(Or(0x0d, Or(ShiftLeft(ACRT, 0x04, ), ShiftLeft(CCRT, 0x01, ), ), ))
                    }
                    Else {
                        Return(Zero)
                    }
                }
                Method(_DGS) {
                    Return(WCRT)
                }
                Method(_DSS, 1) {
                    Noop
                }
            }
            Device(LCD) {
                Method(_ADR) {
                    Return(0x0400)
                }
                Method(_DCS) {
                    If(XLCD()) {
                        UPDD()
Return(Or(0x0d, Or(ShiftLeft(ALCD, 0x04, ), ShiftLeft(CLCD, 0x01, ), ), ))
                    }
                    Else {
                        Return(Zero)
                    }
                }
                Method(_DGS) {
                    Return(WLCD)
                }
                Method(_DSS, 1) {
                    Noop
                }
            }
            Device(TV) {
                Method(_ADR) {
                    Return(0x0200)
                }
                Method(_DCS) {
                    If(XTV()) {
                        UPDD()
Return(Or(0x0d, Or(ShiftLeft(ATV, 0x04, ), ShiftLeft(CTV, 0x01, ), ), ))
                    }
                    Else {
                        Return(Zero)
                    }
                }
                Method(_DGS) {
                    Return(WTV)
                }
                Method(_DSS, 1) {
                    Noop
                }
            }
            Device(DVI) {
                Method(_ADR) {
                    Return(0x0300)
                }
                Method(_DCS) {
                    If(XDVI()) {
                        UPDD()
Return(Or(0x0d, Or(ShiftLeft(ADVI, 0x04, ), ShiftLeft(CDVI, 0x01, ), ), ))
                    }
                    Else {
                        Return(Zero)
                    }
                }
                Method(_DGS) {
                    Return(WDVI)
                }
                Method(_DSS, 1) {
                    Noop
                }
            }
        }


Home | Main Index | Thread Index | Old Index