diff options
author | Patrick Georgi <patrick.georgi@secunet.com> | 2014-06-27 12:17:17 +0200 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2014-07-11 09:23:57 +0200 |
commit | 7fc2da910766686d55d489d0e539a1586b98d5bb (patch) | |
tree | af0029b0b2d3df1f214b182566344452db038a3c | |
parent | 40f9ce93fa1d9e5206cd5c1081d22c60bfc6d3f3 (diff) | |
download | coreboot-staging-7fc2da910766686d55d489d0e539a1586b98d5bb.zip coreboot-staging-7fc2da910766686d55d489d0e539a1586b98d5bb.tar.gz |
kontron/ktqm77: Clean up int15 handler
Worked out the purpose of more int15 calls and let them return
appropriate values. Also remove handlers for copy-pasted calls never
observed on this board.
Change-Id: I3d8c4ec5542bd19baca1dca83badc9b568779e1b
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: http://review.coreboot.org/6249
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
-rw-r--r-- | src/mainboard/kontron/ktqm77/mainboard.c | 80 |
1 files changed, 54 insertions, 26 deletions
diff --git a/src/mainboard/kontron/ktqm77/mainboard.c b/src/mainboard/kontron/ktqm77/mainboard.c index b3dec20..fd9cbf1 100644 --- a/src/mainboard/kontron/ktqm77/mainboard.c +++ b/src/mainboard/kontron/ktqm77/mainboard.c @@ -97,40 +97,68 @@ static int int15_handler(void) X86_ECX |= 0x0000; /* TODO: Make this configurable in NVRAM? */ res = 1; break; - case 0x5f70: - switch ((X86_ECX >> 8) & 0xff) { - case 0: - /* Get Mux */ + case 0x5f40: + /* + * Boot Panel Type Hook: + * BL(in): 00h = LFP, 01h = LFP2 + * CL(out): panel type id in table: 1..16 + */ + if (0 == (X86_EBX & 0xff)) { X86_EAX &= 0xffff0000; - X86_EAX |= 0x005f; - X86_ECX &= 0xffff0000; - X86_ECX |= 0x0000; + X86_EAX |= 0x015f; res = 1; - break; - case 1: - /* Set Mux */ + } else if (1 == (X86_EBX & 0xff)) { X86_EAX &= 0xffff0000; - X86_EAX |= 0x005f; - X86_ECX &= 0xffff0000; - X86_ECX |= 0x0000; + X86_EAX |= 0x015f; res = 1; - break; - case 2: - /* Get SG/Non-SG mode */ + } else { + printk(BIOS_DEBUG, + "Unknown panel index %u " + "in INT15 function %04x!\n", + X86_EBX & 0xff, X86_EAX & 0xffff); + } + break; + case 0x5f52: + /* + * Panel Color Depth: + * 00h = 18 bit + * 01h = 24 bit + */ + X86_EAX &= 0xffff0000; + X86_EAX |= 0x005f; + X86_ECX &= 0xffff0000; + X86_ECX |= 0x0001; + res = 1; + break; + case 0x5f14: + if ((X86_EBX & 0xffff) == 0x78f) { + /* + * Get Miscellaneous Status Hook: + * bit 2: AC power active? + * bit 1: lid closed? + * bit 0: docked? + */ X86_EAX &= 0xffff0000; - X86_EAX |= 0x005f; - X86_ECX &= 0xffff0000; - X86_ECX |= 0x0000; + X86_EAX |= 0x015f; res = 1; - break; - default: - /* Interrupt was not handled */ - printk(BIOS_DEBUG, "Unknown INT15 5f70 function: 0x%02x\n", - ((X86_ECX >> 8) & 0xff)); - return 1; + } else { + printk(BIOS_DEBUG, + "Unknown BX 0x%04x in INT15 function %04x!\n", + X86_EBX & 0xffff, X86_EAX & 0xffff); } break; - + case 0x5f49: + /* + * Get Inverter Type and Polarity: + * EBX: backlight control brightness: 0..255 + * ECX: + * 0 = Enable PWM inverted, 2 = Enable PWM + * 1 = Enable I2C inverted, 3 = Enable I2C + */ + X86_EAX &= 0xffff0000; + X86_EAX |= 0x015f; + res = 1; + break; default: printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n", X86_EAX & 0xffff); |