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
}
}
}