summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/superio/fintek/f81216h/early_serial.c30
-rw-r--r--src/superio/fintek/f81216h/f81216h.h4
-rw-r--r--src/superio/fintek/f81216h/superio.c21
3 files changed, 26 insertions, 29 deletions
diff --git a/src/superio/fintek/f81216h/early_serial.c b/src/superio/fintek/f81216h/early_serial.c
index 6b667dfd74..bf999a3e27 100644
--- a/src/superio/fintek/f81216h/early_serial.c
+++ b/src/superio/fintek/f81216h/early_serial.c
@@ -21,12 +21,11 @@
#include <arch/io.h>
#include <device/pnp.h>
#include <stdint.h>
-#include "fintek.h"
+#include "f81216h.h"
-static u8 f81216h_entry_key;
#define FINTEK_EXIT_KEY 0xAA
-static void pnp_enter_conf_state(pnp_devfn_t dev)
+static void pnp_enter_conf_state(pnp_devfn_t dev, u8 f81216h_entry_key)
{
u16 port = dev >> 8;
outb(f81216h_entry_key, port);
@@ -40,26 +39,27 @@ static void pnp_exit_conf_state(pnp_devfn_t dev)
}
/* Bring up early serial debugging output before the RAM is initialized. */
-void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, enum mode_key k)
+void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, mode_key k)
{
+ u8 key;
switch(k) {
- MODE_6767:
- f81216h_entry_key = 0x67;
+ case MODE_6767:
+ key = 0x67;
break;
- MODE_7777:
- f81216h_entry_key = 0x77;
+ case MODE_7777:
+ key = 0x77;
break;
- MODE_8787:
- f81216h_entry_key = 0x87;
+ case MODE_8787:
+ key = 0x87;
break;
- MODE_A0A0:
- f81216h_entry_key = 0xa0;
+ case MODE_A0A0:
+ key = 0xA0;
break;
default:
- f81216h_entry_key = 0x77; /* (safe to be hw default) */
+ key = 0x77; /* try the hw default */
+ break;
}
-
- pnp_enter_conf_state(dev);
+ pnp_enter_conf_state(dev, key);
pnp_set_logical_device(dev);
pnp_set_enable(dev, 0);
pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
diff --git a/src/superio/fintek/f81216h/f81216h.h b/src/superio/fintek/f81216h/f81216h.h
index 37e7753e6c..3b88d87a1f 100644
--- a/src/superio/fintek/f81216h/f81216h.h
+++ b/src/superio/fintek/f81216h/f81216h.h
@@ -34,13 +34,13 @@
* the default key.
* See page 17 of data sheet for details.
*/
-enum {
+typedef enum {
MODE_6767,
MODE_7777,
MODE_8787,
MODE_A0A0,
} mode_key;
-void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, enum mode_key k);
+void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, mode_key k);
#endif /* SUPERIO_FINTEK_F81216H_H */
diff --git a/src/superio/fintek/f81216h/superio.c b/src/superio/fintek/f81216h/superio.c
index eed165a655..89204c48f8 100644
--- a/src/superio/fintek/f81216h/superio.c
+++ b/src/superio/fintek/f81216h/superio.c
@@ -45,20 +45,17 @@ static void pnp_enter_ext_func_mode(struct device *dev)
* See page 17 of data sheet.
*/
switch(conf->conf_key_mode) {
- case 0:
- key = 0x77; /* (default) */
- break;
- case 1:
- key = 0xa0;
- break;
- case 2:
- key = 0x87;
- break;
- case 3:
- key = 0x67;
+ case MODE_6767:
+ case MODE_7777:
+ case MODE_8787:
+ case MODE_A0A0:
+ key = conf->conf_key_mode;
break;
default:
- key = 0x77; /* safe to be hw default */
+ printk(BIOS_WARNING, "Warning: Undefined F81216 unlock key assignment!\n");
+ printk(BIOS_WARNING, "Setting conf_key_mode to default\n");
+ key = MODE_7777; /* try the hw default */
+ break;
}
outb(key, dev->path.pnp.port);