blob: 0d21850df0690acddd0c20a93144eb3ce52df8ef [file] [log] [blame]
Uwe Hermann0120e1a2007-09-16 18:11:03 +00001/*
Uwe Hermannafe83092007-09-28 15:45:43 +00002 * This file is part of the superiotool project.
Uwe Hermann0120e1a2007-09-16 18:11:03 +00003 *
4 * Copyright (C) 2007 Carl-Daniel Hailfinger
Uwe Hermannebb73f22008-11-12 19:08:58 +00005 * Copyright (C) 2007-2008 Uwe Hermann <uwe@hermann-uwe.de>
Uwe Hermann0120e1a2007-09-16 18:11:03 +00006 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#include "superiotool.h"
23
Uwe Hermann07024692007-09-20 22:13:48 +000024#define CHIP_ID_BYTE1_REG 0x20
25#define CHIP_ID_BYTE2_REG 0x21
26#define CHIP_VERSION_REG 0x22
Urja Rannikko38204a22008-10-23 23:33:18 +000027#define ISA_PNP_ADDR 0x279
Uwe Hermann07024692007-09-20 22:13:48 +000028
Uwe Hermann246be7d2007-10-31 22:22:11 +000029static const struct superio_registers reg_table[] = {
Uwe Hermannebb73f22008-11-12 19:08:58 +000030 {0x8228, "IT8228E", {
31 {EOT}}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +000032 {0x8510, "IT8510E/TE/G", {
33 {EOT}}},
34 {0x8511, "IT8511E/TE/G", {
35 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +000036 {0x8661, "IT8661F/IT8770F", {
Robinson P. Tryondc817692007-10-05 13:47:04 +000037 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +000038 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
39 0x23,0x24,EOT},
40 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
41 0x00,0x00,EOT}},
Robinson P. Tryondc817692007-10-05 13:47:04 +000042 {0x0, "Floppy",
43 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
44 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
45 {0x1, "COM1",
46 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
47 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
48 {0x2, "COM2",
49 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
50 {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
51 {0x3, "Parallel port",
52 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
53 0xf0,EOT},
54 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
55 0x03,EOT}},
56 {0x4, "IR",
57 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
58 0x74,0x75,0xf0,EOT},
59 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
60 0x01,0x00,0x00,EOT}},
61 {0x5, "GPIO",
62 {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
63 0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
64 0xf9,0xfa,0xfb,0xfc,EOT},
65 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
66 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
67 0x00,0x00,0x00,0x00,EOT}},
68 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +000069 {0x8673, "IT8673F", {
70 {EOT}}},
71 {0x8681, "IT8671F/IT8687R", {
Anders Jenbo14db1c02010-05-08 23:28:33 +000072 {NOLDN, NULL,
73 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x2E,0x2F,EOT},
74 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,NANA,0x86,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
75 {0x0, "Floppy disk controller",
76 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xF0,EOT},
77 {0x00,0x00,0x03,0xF0,0x06,0x02,0x02,0x00,EOT}},
78 {0x1, "COM1",
79 {0x30,0x31,0x60,0x61,0x70,0x71,0xF0,EOT},
80 {0x00,0x00,0x03,0xF8,0x04,0x02,0x00,EOT}},
81 {0x2, "COM2",
82 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,0x74,0x75,0xF0,0xF1,EOT},
83 {0x00,0x00,0x02,0xF8,0x03,0x00,0x03,0x02,0x0A,0x02,0x00,0x01,0x00,0x00,EOT}},
84 {0x3, "Parallel port",
85 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0xF0,EOT},
86 {0x00,0x00,0x01,0x78,0x07,0x78,0x07,0x02,0x03,0x03,EOT}},
87 {0x4, "APC",
88 {0x30,0xF0,0xF1,0xF2,0xF4,0xF5,0xF6,EOT},
89 {0x00,0x00,0x00,0x00,0x00,0x00,NANA,EOT}},
90 {0x5, "Keyboard",
91 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xF0,EOT},
92 {0x01,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
93 {0x6, "Mouse",
94 {0x30,0x70,0x71,0xF0,EOT},
95 {0x00,0x0C,0x02,0x00,EOT}},
96 {0x7, "GPIO and Alternative function",
97 {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x70,0x71,0x72,0x73,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0xE0,0xE1,0xE2,0xE3,0xE4,EOT},
98 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
Urja Rannikko38204a22008-10-23 23:33:18 +000099 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000100 {0x8701, "IT8703F", {
101 {NOLDN, NULL,
102 {0x20,0x21,0x23,0x24,0x26,0x29,0x2A,0x2B,EOT},
103 {0x87,0x00,0x00,0x80,0x00,0x00,0x7C,0xC0,EOT}},
104 {0x0, "Floppy disk controller",
105 {0x30,0x60,0x61,0x70,0x74,0xF0,0xF1,0xF2,0xF3,0xF4,
106 0xF5,EOT},
107 {0x00,0x03,0xf0,0x06,0x02,0x0E,0x00,0xFF,0x00,0x00,
108 0x00,EOT}},
109 {0x1, "Parallel port",
110 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
111 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
112 {0x2, "Serial port 1",
113 {0x30,0x60,0x61,0x70,0xf0,EOT},
114 {0x00,0x03,0xf8,0x04,0x00,EOT}},
115 {0x3, "Serial port 2",
116 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
117 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
118 {0x5, "Keyboard controller",
119 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
120 {0x01,0x00,0x60,0x00,0x64,0x01,0x0C,0x80,EOT}},
121 {0x6, "Consumer IR",
122 {0x30,0x60,0x61,0x70,EOT},
123 {0x00,0x00,0x00,0x00,EOT}},
124 {0x7, "Game port, MIDI, GPIO set 1",
125 {0x30,0x60,0x61,0x62,0x63,0x70,0xF0,0xF1,0xF2,EOT},
126 {0x00,0x02,0x01,0x03,0x30,0x00,0xFF,0x00,0x00,EOT}},
127 {0x8, "GPIO set 2",
128 {0x30,0xF0,0xF1,0xF2,0xF3,0xF5,EOT},
129 {0x00,0xFF,0x00,0x00,0x00,0x00,EOT}},
130 {0x9, "GPIO set 3 and 4",
131 {0x30,0x60,0x61,0xF0,0xF1,0xF2,0xF3,0xF4,EOT},
132 {0x00,0x02,0x90,0xFF,0x00,0x00,0x00,0x00,EOT}},
133 {0xA, "ACPI",
134 {0x30,0x70,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
135 0xF3,0xF4,0xF6,0xF7,0xF9,EOT},
136 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
137 NANA,NANA,0x00,0x00,0x00,EOT}},
138 {0xC, "GPIO set 5, 6 and 7",
139 {0x30,0x60,0x61,0xF0,0xF3,0xF6,EOT},
140 {0x00,0x03,0x70,0x00,0xFF,0xFF,EOT}},
141 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000142 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000143 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000144 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000145 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000146 {0x20,0x21,0x22,0x23,0x24,EOT},
147 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000148 {0x0, "Floppy",
149 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
150 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
151 {0x1, "COM1",
152 {0x30,0x60,0x61,0x70,0xf0,EOT},
153 {0x00,0x03,0xf8,0x04,0x00,EOT}},
154 {0x2, "COM2",
155 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
156 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
157 {0x3, "Parallel port",
158 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
159 0xf0,EOT},
160 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
161 0x03,EOT}},
162 {0x4, "Environment controller",
163 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
164 0xf3,0xf4,0xf5,0xf6,EOT},
165 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
166 0x00,0x00,NANA,NANA,EOT}},
167 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000168 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
169 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
170 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
171 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
172 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
173 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
174 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000175 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
176 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
177 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
178 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
179 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
180 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000181 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000182 {0x6, "Game port",
183 {0x30,0x60,0x61,EOT},
184 {0x00,0x02,0x01,EOT}},
185 {0x7, "Consumer IR",
186 {0x30,0x60,0x61,0x70,0xf0,EOT},
187 {0x00,0x03,0x10,0x0b,0x00,EOT}},
188 {0x8, "MIDI port",
189 {0x30,0x60,0x61,0x70,0xf0,EOT},
190 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000191 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000192 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
193 /* This is a "Special General Purpose I/O chip". */
194 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000195 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000196 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000197 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
198 0x2a,0x2e,0x2f,EOT},
199 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
200 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000201 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000202 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
203 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000204 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000205 {0x30,0x60,0x61,0x70,0xf0,EOT},
206 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000207 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000208 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
209 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000210 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000211 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
212 0xf0,EOT},
213 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
214 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000215 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000216 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
217 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
218 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
219 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000220 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000221 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000222 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
223 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000224 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000225 {0x30,0x70,0x71,0xf0,EOT},
226 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000227 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000228 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
229 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
230 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
231 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
232 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
233 0xfc,EOT},
234 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
235 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
236 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
237 0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
238 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
239 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000240 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000241 {0x30,0x60,0x61,EOT},
242 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000243 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000244 {0x30,0x60,0x61,0x70,0xf0,EOT},
245 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000246 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000247 {0x30,0x60,0x61,0x70,0xf0,EOT},
248 {0x00,0x03,0x00,0x0a,0x00,EOT}},
249 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000250 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000251 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000252 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
253 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000254 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000255 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000256 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
257 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000258 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000259 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
260 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000261 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000262 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
263 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000264 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000265 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
266 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000267 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000268 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
269 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000270 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000271 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
272 0xf4,0xf5,0xf6,EOT},
273 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
274 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000275 {0x5, "Keyboard",
276 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000277 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
278 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000279 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000280 {0x30,0x70,0x71,0xf0,EOT},
281 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000282 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000283 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
284 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
285 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
286 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
287 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
288 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
289 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
Uwe Hermann07024692007-09-20 22:13:48 +0000290 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000291 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
292 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
294 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000295 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000296 {0x30,0x60,0x61,0x70,0xf0,EOT},
297 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000298 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000299 {0x30,0x60,0x61,EOT},
300 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000301 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000302 {0x30,0x60,0x61,0x70,0xf0,EOT},
303 {0x00,0x03,0x10,0x0b,0x00,EOT}},
304 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000305 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000306 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000307 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
308 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000309 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000310 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
311 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000312 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000313 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
314 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000315 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000316 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
317 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000318 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000319 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
320 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000321 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000322 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
323 0xf4,0xf5,0xf6,EOT},
324 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
325 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000326 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000327 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
328 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000329 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000330 {0x30,0x70,0x71,0xf0,EOT},
331 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000332 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000333 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
334 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
335 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
336 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
337 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
338 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
339 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
340 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
341 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
342 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
343 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
344 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000345 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000346 {0x30,0x60,0x61,0x70,0xf0,EOT},
347 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000348 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000349 {0x30,0x60,0x61,EOT},
350 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000351 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000352 {0x30,0x60,0x61,0x70,0xf0,EOT},
353 {0x00,0x03,0x10,0x0b,0x00,EOT}},
354 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000355 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000356 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000357 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
358 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000359 {0x0, "Floppy",
360 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
361 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
362 {0x1, "COM1",
363 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
364 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
365 {0x2, "COM2",
366 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
367 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
368 {0x3, "Parallel port",
369 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
370 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
371 {0x4, "Environment controller",
372 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
373 0xf4,0xf5,0xf6,EOT},
374 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
375 0x00,NANA,NANA,EOT}},
376 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000377 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000378 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
379 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
380 {0x6, "Mouse",
381 {0x30,0x70,0x71,0xf0,EOT},
382 {0x00,0x0c,0x02,0x00,EOT}},
383 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000384 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000385 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
386 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
387 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000388 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
389 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
390 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
391 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000392 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
393 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
394 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000395 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000396 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
397 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000398 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000399 {0xa, "Consumer IR",
400 {0x30,0x60,0x61,0x70,0xf0,EOT},
401 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000402 {EOT}}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000403 {0x8720, "IT8720F", { /* From sensors-detect */
404 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000405 {0x8722, "IT8722F", {
406 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000407 {0x8726, "IT8726F", {
408 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000409 {NOLDN, NULL,
410 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
411 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
412 {0x0, "Floppy",
413 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
414 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
415 {0x1, "COM1",
416 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
417 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
418 {0x2, "COM2",
419 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
420 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
421 {0x3, "Parallel port",
422 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
423 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
424 {0x4, "Environment controller",
425 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
426 0xf4,0xf5,0xf6,EOT},
427 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
428 0x00,MISC,MISC,EOT}},
429 {0x5, "Keyboard",
430 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
431 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
432 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
433 {0x6, "Mouse",
434 {0x30,0x70,0x71,0xf0,EOT},
435 {0x00,0x0c,0x02,0x00,EOT}},
436 {0x7, "GPIO",
437 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
438 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
439 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
440 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
441 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
442 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
443 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
444 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
445 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
446 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
447 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
448 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
449 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
450 {0x8, "MIDI port",
451 {0x30,0x60,0x61,0x70,0xf0,EOT},
452 {0x00,0x03,0x00,0x0a,0x00,EOT}},
453 {0x9, "Game port",
454 {0x30,0x60,0x61,EOT},
455 {0x00,0x02,0x01,EOT}},
456 {0xa, "Consumer IR",
457 {0x30,0x60,0x61,0x70,0xf0,EOT},
458 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000459 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000460 {0x8761, "IT8761E", {
461 {EOT}}},
462 {0x8780, "IT8780F", {
463 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000464 {EOT}
465};
466
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000467static const struct superio_registers ec_table[] = {
468 {0x8716, "IT8716F", {
469 {NOLDN, NULL,
470 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
471 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
472 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
473 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
474 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000475 0x59,0x5c,
476 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
477 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
478 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
479 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
480 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000481 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
482 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
483 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
484 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
485 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000486 0x00,0x00,
487 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000488 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
489 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
490 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
491 0x00,0x00,0x7f,EOT}},
492 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000493 {0x8718, "IT8718F", {
494 {NOLDN, NULL,
495 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
496 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
497 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
498 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
499 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
500 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
501 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
502 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
503 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
504 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
505 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
506 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
507 0xa6,EOT},
508 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
509 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
510 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
511 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
512 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
513 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
514 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
515 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
516 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
517 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
518 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
519 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
520 0x00,EOT}},
521 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000522 {EOT}
523};
524
Urja Rannikko38204a22008-10-23 23:33:18 +0000525/* Works for: IT8661F/IT8770F */
526static const uint8_t initkey_it8661f[][4] = {
527 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
528 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
529 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
530};
531
532/* Works for: IT8671F/IT8687R, IT8673F */
533static const uint8_t initkey_it8671f[][4] = {
534 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
535 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
536 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
537};
538
539/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
540static const uint8_t initkey_mbpnp[] = {
541 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
542 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
543 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
544};
545
546/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
547static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
548{
549 int i, idx;
550
551 /* Determine Super I/O config port. */
552 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
553 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000554 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000555
556 /* Sequentially write the 32 MB PnP init values. */
557 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000558 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000559}
560
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000561static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000562{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000563 OUTB(0x87, port);
564 OUTB(0x01, port);
565 OUTB(0x55, port);
566 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000567}
568
Uwe Hermannebb73f22008-11-12 19:08:58 +0000569static void enter_conf_mode_ite_it8761e(uint16_t port)
570{
571 OUTB(0x87, port);
572 OUTB(0x61, port);
573 OUTB(0x55, port);
574 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
575}
576
577static void enter_conf_mode_ite_it8228e(uint16_t port)
578{
579 OUTB(0x82, port);
580 OUTB(0x28, port);
581 OUTB(0x55, port);
582 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
583}
584
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000585static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000586{
587 regwrite(port, 0x02, 0x02);
588}
589
Uwe Hermannafe83092007-09-28 15:45:43 +0000590static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000591{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000592 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000593
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000594 probing_for("ITE", init, port);
595
Uwe Hermann07024692007-09-20 22:13:48 +0000596 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
597 id |= regval(port, CHIP_ID_BYTE2_REG);
598 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
599
600 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000601 if (verbose)
602 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000603 return;
604 }
605
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000606 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000607 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000608 chip_found = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000609
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000610 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000611
612 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000613 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000614
615 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000616 ecport = regval(port, 0x60) << 8;
617 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000618
619 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000620 ecport += 5;
621
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000622 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000623 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000624 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000625}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000626
Uwe Hermannb4db2202007-09-20 23:37:56 +0000627void probe_idregs_ite(uint16_t port)
628{
Urja Rannikko38204a22008-10-23 23:33:18 +0000629 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
630 enter_conf_mode_ite_legacy(port, initkey_it8661f);
631 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
632 exit_conf_mode_ite(port);
Uwe Hermannb4db2202007-09-20 23:37:56 +0000633
Urja Rannikko38204a22008-10-23 23:33:18 +0000634 enter_conf_mode_ite_legacy(port, initkey_it8671f);
635 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
636 exit_conf_mode_ite(port);
637 } else {
638 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000639 probe_idregs_ite_helper("(init=standard) ", port);
640 exit_conf_mode_ite(port);
641
642 enter_conf_mode_ite_it8761e(port);
643 probe_idregs_ite_helper("(init=it8761e) ", port);
644 exit_conf_mode_ite(port);
645
646 enter_conf_mode_ite_it8228e(port);
647 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000648 exit_conf_mode_ite(port);
649
650 enter_conf_mode_winbond_fintek_ite_8787(port);
651 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
652 exit_conf_mode_winbond_fintek_ite_8787(port);
653 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000654}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000655
656void print_ite_chips(void)
657{
658 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000659 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000660}