diff --git a/src/superio/winbond/w83627thf/w83627thf_early_serial.c b/src/superio/winbond/w83627thf/w83627thf_early_serial.c index fb3598c102..325d14dd1f 100644 --- a/src/superio/winbond/w83627thf/w83627thf_early_serial.c +++ b/src/superio/winbond/w83627thf/w83627thf_early_serial.c @@ -1,11 +1,25 @@ #include #include "w83627thf.h" - -static void w83627thf_enable_serial(device_t dev, unsigned iobase) +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 w83627thf_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); }