diff options
Diffstat (limited to 'src/superio/winbond')
-rw-r--r-- | src/superio/winbond/w83627hf/superio.c | 60 | ||||
-rw-r--r-- | src/superio/winbond/w83627hf/w83627hf.h | 80 | ||||
-rw-r--r-- | src/superio/winbond/w83627hf/w83627hf_early_init.c | 15 |
3 files changed, 113 insertions, 42 deletions
diff --git a/src/superio/winbond/w83627hf/superio.c b/src/superio/winbond/w83627hf/superio.c index 57d475b00f..559bdf1189 100644 --- a/src/superio/winbond/w83627hf/superio.c +++ b/src/superio/winbond/w83627hf/superio.c @@ -12,6 +12,7 @@ #include <bitops.h> #include <uart8250.h> #include <pc80/keyboard.h> +#include <pc80/mc146818rtc.h> #include "chip.h" #include "w83627hf.h" @@ -47,33 +48,22 @@ static void enable_hwm_smbus(device_t dev) { pnp_write_config(dev, reg, value); } -#if 0 -static void dump_pnp_device(device_t dev) +static void init_acpi(device_t dev) { - int i; - print_debug("\r\n"); - - for(i = 0; i <= 255; i++) { - uint8_t reg, val; - if ((i & 0x0f) == 0) { - print_debug_hex8(i); - print_debug_char(':'); - } - reg = i; - if(i!=0xaa) { - val = pnp_read_config(dev, reg); - } - else { - val = 0xaa; - } - print_debug_char(' '); - print_debug_hex8(val); - if ((i & 0x0f) == 0x0f) { - print_debug("\r\n"); - } - } + uint8_t value = 0x20; + int power_on = 1; + + get_option(&power_on, "power_on_after_fail"); + pnp_enter_ext_func_mode(dev); + pnp_write_index(dev->path.u.pnp.port,7,0x0a); + value = pnp_read_config(dev, 0xE4); + value &= ~(3<<5); + if(power_on) { + value |= (1<<5); + } + pnp_write_config(dev, 0xE4, value); + pnp_exit_ext_func_mode(dev); } -#endif static void init_hwm(unsigned long base) { @@ -105,7 +95,6 @@ static void init_hwm(unsigned long base) } } - static void w83627hf_init(device_t dev) { struct superio_winbond_w83627hf_config *conf; @@ -133,21 +122,16 @@ static void w83627hf_init(device_t dev) #define HWM_INDEX_PORT 5 init_hwm(res0->base + HWM_INDEX_PORT); break; + case W83627HF_ACPI: + init_acpi(dev); + break; } - } void w83627hf_pnp_set_resources(device_t dev) { - pnp_enter_ext_func_mode(dev); - pnp_set_resources(dev); - -#if 0 - dump_pnp_device(dev); -#endif - pnp_exit_ext_func_mode(dev); } @@ -155,20 +139,13 @@ void w83627hf_pnp_set_resources(device_t dev) void w83627hf_pnp_enable_resources(device_t dev) { pnp_enter_ext_func_mode(dev); - pnp_enable_resources(dev); - switch(dev->path.u.pnp.device) { case W83627HF_HWM: printk_debug("w83627hf hwm smbus enabled\n"); enable_hwm_smbus(dev); break; } - -#if 0 - dump_pnp_device(dev); -#endif - pnp_exit_ext_func_mode(dev); } @@ -219,4 +196,3 @@ struct chip_operations superio_winbond_w83627hf_ops = { CHIP_NAME("Winbond w83627hf") .enable_dev = enable_dev, }; - diff --git a/src/superio/winbond/w83627hf/w83627hf.h b/src/superio/winbond/w83627hf/w83627hf.h index 0cf16310c3..7cd664cd16 100644 --- a/src/superio/winbond/w83627hf/w83627hf.h +++ b/src/superio/winbond/w83627hf/w83627hf.h @@ -9,3 +9,83 @@ #define W83627HF_GPIO3 9 #define W83627HF_ACPI 10 #define W83627HF_HWM 11 /* Hardware Monitor */ + +//#define W83627HF_GPIO_DEV PNP_DEV(0x2e, W83627HF_GPIO) +//#define W83627HF_XBUS_DEV PNP_DEV(0x2e, W83627HF_XBUS) + +#define W83627HF_GPSEL 0xf0 +#define W83627HF_GPCFG1 0xf1 +#define W83627HF_GPEVR 0xf2 +#define W83627HF_GPCFG2 0xf3 +#define W83627HF_EXTCFG 0xf4 +#define W83627HF_IOEXT1A 0xf5 +#define W83627HF_IOEXT1B 0xf6 +#define W83627HF_IOEXT2A 0xf7 +#define W83627HF_IOEXT2B 0xf8 + +#define W83627HF_GPDO_0 0x00 +#define W83627HF_GPDI_0 0x01 +#define W83627HF_GPDO_1 0x02 +#define W83627HF_GPDI_1 0x03 +#define W83627HF_GPEVEN_1 0x04 +#define W83627HF_GPEVST_1 0x05 +#define W83627HF_GPDO_2 0x06 +#define W83627HF_GPDI_2 0x07 +#define W83627HF_GPDO_3 0x08 +#define W83627HF_GPDI_3 0x09 +#define W83627HF_GPDO_4 0x0a +#define W83627HF_GPDI_4 0x0b +#define W83627HF_GPEVEN_4 0x0c +#define W83627HF_GPEVST_4 0x0d +#define W83627HF_GPDO_5 0x0e +#define W83627HF_GPDI_5 0x0f +#define W83627HF_GPDO_6 0x10 +#define W83627HF_GPDO_7A 0x11 +#define W83627HF_GPDO_7B 0x12 +#define W83627HF_GPDO_7C 0x13 +#define W83627HF_GPDO_7D 0x14 +#define W83627HF_GPDI_7A 0x15 +#define W83627HF_GPDI_7B 0x16 +#define W83627HF_GPDI_7C 0x17 +#define W83627HF_GPDI_7D 0x18 + +#define W83627HF_XIOCNF 0xf0 +#define W83627HF_XIOBA1H 0xf1 +#define W83627HF_XIOBA1L 0xf2 +#define W83627HF_XIOSIZE1 0xf3 +#define W83627HF_XIOBA2H 0xf4 +#define W83627HF_XIOBA2L 0xf5 +#define W83627HF_XIOSIZE2 0xf6 +#define W83627HF_XMEMCNF1 0xf7 +#define W83627HF_XMEMCNF2 0xf8 +#define W83627HF_XMEMBAH 0xf9 +#define W83627HF_XMEMBAL 0xfa +#define W83627HF_XMEMSIZE 0xfb +#define W83627HF_XIRQMAP1 0xfc +#define W83627HF_XIRQMAP2 0xfd +#define W83627HF_XBIMM 0xfe +#define W83627HF_XBBSL 0xff + +#define W83627HF_XBCNF 0x00 +#define W83627HF_XZCNF0 0x01 +#define W83627HF_XZCNF1 0x02 +#define W83627HF_XIRQC0 0x04 +#define W83627HF_XIRQC1 0x05 +#define W83627HF_XIRQC2 0x06 +#define W83627HF_XIMA0 0x08 +#define W83627HF_XIMA1 0x09 +#define W83627HF_XIMA2 0x0a +#define W83627HF_XIMA3 0x0b +#define W83627HF_XIMD 0x0c +#define W83627HF_XZCNF2 0x0d +#define W83627HF_XZCNF3 0x0e +#define W83627HF_XZM0 0x0f +#define W83627HF_XZM1 0x10 +#define W83627HF_XZM2 0x11 +#define W83627HF_XZM3 0x12 +#define W83627HF_HAP0 0x13 +#define W83627HF_HAP1 0x14 +#define W83627HF_XSCNF 0x15 +#define W83627HF_XWBCNF 0x16 + + diff --git a/src/superio/winbond/w83627hf/w83627hf_early_init.c b/src/superio/winbond/w83627hf/w83627hf_early_init.c new file mode 100644 index 0000000000..e449c4ae9c --- /dev/null +++ b/src/superio/winbond/w83627hf/w83627hf_early_init.c @@ -0,0 +1,15 @@ +#include <arch/romcc_io.h> +#include "w83627hf.h" + +static void w83627hf_disable_dev(device_t dev) +{ + pnp_set_logical_device(dev); + pnp_set_enable(dev, 0); +} +static void w83627hf_enable_dev(device_t dev, unsigned iobase) +{ + pnp_set_logical_device(dev); + pnp_set_enable(dev, 0); + pnp_set_iobase(dev, PNP_IDX_IO0, iobase); + pnp_set_enable(dev, 1); +} |