From 4cc0126188a2de726c73ce846ca6434e0dc91ca3 Mon Sep 17 00:00:00 2001 From: Stefan Tauner Date: Wed, 8 Aug 2018 04:55:47 +0200 Subject: superio: fix and extend pnp_info of wpcd376i The implementation of wpcd376i in coreboot is based on the superiotool output which apparently was incorrect. This patch refines the implementation to match the datasheet. Change-Id: I0108e912dc4f603276074f0999c6d3146c3b13f9 Signed-off-by: Stefan Tauner Reviewed-on: https://review.coreboot.org/27857 Tested-by: build bot (Jenkins) Reviewed-by: Felix Held --- src/superio/winbond/wpcd376i/superio.c | 43 ++++++++++++++++++++------------- src/superio/winbond/wpcd376i/wpcd376i.h | 18 ++++++++------ 2 files changed, 36 insertions(+), 25 deletions(-) (limited to 'src/superio') diff --git a/src/superio/winbond/wpcd376i/superio.c b/src/superio/winbond/wpcd376i/superio.c index 7af5bcfb0a..dcfd6423b3 100644 --- a/src/superio/winbond/wpcd376i/superio.c +++ b/src/superio/winbond/wpcd376i/superio.c @@ -30,16 +30,6 @@ static void init(struct device *dev) return; switch (dev->path.pnp.device) { - - case WPCD376I_FDC: - case WPCD376I_LPT: - case WPCD376I_IR: - case WPCD376I_SP1: - case WPCD376I_SWC: - case WPCD376I_KBCM: - case WPCD376I_GPIO: - break; - case WPCD376I_KBCK: pc_keyboard_init(NO_AUX_DEVICE); break; @@ -55,14 +45,33 @@ static struct device_operations ops = { }; static struct pnp_info pnp_dev_info[] = { - { NULL, WPCD376I_FDC, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x07fa, }, - { NULL, WPCD376I_LPT, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0, 0x04f8, }, - { NULL, WPCD376I_IR, PNP_IO0 | PNP_IRQ0 | PNP_DRQ0 | PNP_DRQ1, + { NULL, WPCD376I_FDC, + PNP_IO0 | PNP_IRQ0 | PNP_DRQ0 | PNP_MSC0 | PNP_MSC1 | PNP_MSC8, + 0x07f8, }, + { NULL, WPCD376I_LPT, + PNP_IO0 | PNP_IRQ0 | PNP_DRQ0 | PNP_MSC0 | PNP_MSC8, + 0x03f8, }, + { NULL, WPCD376I_SP1, + PNP_IO0 | PNP_IRQ0 | PNP_MSC0, 0x07f8, }, - { NULL, WPCD376I_SP1, PNP_IO0 | PNP_IRQ0, 0x07f8, }, - { NULL, WPCD376I_KBCM, PNP_IRQ0, }, - { NULL, WPCD376I_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, 0x07f8, 0x07f8, }, - { NULL, WPCD376I_GPIO, PNP_IO0 | PNP_IRQ0, 0xfff8, }, + { NULL, WPCD376I_SWC, + PNP_IO0 | PNP_IO1 | PNP_IRQ0, + 0xfff0, 0xfff0, }, + { NULL, WPCD376I_KBCM, + PNP_IRQ0, }, + { NULL, WPCD376I_KBCK, + PNP_IO0 | PNP_IO1 | PNP_IRQ0 | PNP_MSC0, + 0x07f8, 0x07f8, }, + { NULL, WPCD376I_GPIO, + PNP_IO0 | PNP_IRQ0 | PNP_MSC0 | PNP_MSC1 | PNP_MSC2 | PNP_MSC3 | + PNP_MSC8, + 0xffe0, }, + { NULL, WPCD376I_ECIR, + PNP_IO0 | PNP_IO1 | PNP_IRQ0, + 0xfff0, 0xfff0, }, + { NULL, WPCD376I_IR, + PNP_IO0 | PNP_IRQ0 | PNP_DRQ0 | PNP_DRQ1 | PNP_MSC0, + 0xfff8, }, }; static void enable_dev(struct device *dev) diff --git a/src/superio/winbond/wpcd376i/wpcd376i.h b/src/superio/winbond/wpcd376i/wpcd376i.h index 8d770b4384..4bb9289581 100644 --- a/src/superio/winbond/wpcd376i/wpcd376i.h +++ b/src/superio/winbond/wpcd376i/wpcd376i.h @@ -21,14 +21,16 @@ #include /* Logical Device Numbers (LDN). */ -#define WPCD376I_FDC 0 /* Floppy */ -#define WPCD376I_LPT 1 /* Parallel port */ -#define WPCD376I_IR 2 /* Infrared port */ -#define WPCD376I_SP1 3 /* UART1 */ -#define WPCD376I_SWC 4 /* System wake-up control */ -#define WPCD376I_KBCM 5 /* PS/2 mouse */ -#define WPCD376I_KBCK 6 /* PS/2 keyboard */ -#define WPCD376I_GPIO 7 /* General Purpose I/O */ +#define WPCD376I_FDC 0x00 /* Floppy */ +#define WPCD376I_LPT 0x01 /* Parallel port */ +/* 0x02 Undefined */ +#define WPCD376I_SP1 0x03 /* UART1 */ +#define WPCD376I_SWC 0x04 /* System wake-up control */ +#define WPCD376I_KBCM 0x05 /* PS/2 mouse */ +#define WPCD376I_KBCK 0x06 /* PS/2 keyboard */ +#define WPCD376I_GPIO 0x07 /* General Purpose I/O */ +#define WPCD376I_ECIR 0x15 /* Enhanced Consumer Infrared Functions (ECIR) */ +#define WPCD376I_IR 0x16 /* UART3 & Infrared port */ void wpcd376i_enable_serial(pnp_devfn_t dev, u16 iobase); -- cgit v1.2.3