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