diff options
-rw-r--r-- | src/superio/winbond/w83977tf/w83977tf_early_serial.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/superio/winbond/w83977tf/w83977tf_early_serial.c b/src/superio/winbond/w83977tf/w83977tf_early_serial.c index fffc16d430..a956e11fc5 100644 --- a/src/superio/winbond/w83977tf/w83977tf_early_serial.c +++ b/src/superio/winbond/w83977tf/w83977tf_early_serial.c @@ -1,11 +1,25 @@ #include <arch/romcc_io.h> #include "w83977tf.h" +static inline void pnp_enter_ext_func_mode(device_t dev) +{ + unsigned int port = dev >> 8; + outb(0x87, port); + outb(0x87, port); +} + +static void pnp_exit_ext_func_mode(device_t dev) +{ + unsigned int port = dev >> 8; + outb(0xaa, port); +} -static void w83977tf_enable_serial(device_t dev, unsigned iobase) +static void w83977tf_enable_serial(device_t dev, unsigned int iobase) { + pnp_enter_ext_func_mode(dev); pnp_set_logical_device(dev); pnp_set_enable(dev, 0); pnp_set_iobase(dev, PNP_IDX_IO0, iobase); pnp_set_enable(dev, 1); + pnp_exit_ext_func_mode(dev); } |