blob: 155809facbf41b524859a8cd6b2e0ae67062fbfa [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}}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +000036 {0x8512, "IT8512E/F/G", {
37 {EOT}}},
38 {0x8513, "IT8513E/F/G", {
39 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +000040 {0x8661, "IT8661F/IT8770F", {
Robinson P. Tryondc817692007-10-05 13:47:04 +000041 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +000042 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
43 0x23,0x24,EOT},
44 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
45 0x00,0x00,EOT}},
Robinson P. Tryondc817692007-10-05 13:47:04 +000046 {0x0, "Floppy",
47 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
48 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
49 {0x1, "COM1",
50 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
51 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
52 {0x2, "COM2",
53 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
54 {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
55 {0x3, "Parallel port",
56 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
57 0xf0,EOT},
58 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
59 0x03,EOT}},
60 {0x4, "IR",
61 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
62 0x74,0x75,0xf0,EOT},
63 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
64 0x01,0x00,0x00,EOT}},
65 {0x5, "GPIO",
66 {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
67 0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
68 0xf9,0xfa,0xfb,0xfc,EOT},
69 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
70 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
71 0x00,0x00,0x00,0x00,EOT}},
72 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +000073 {0x8673, "IT8673F", {
74 {EOT}}},
75 {0x8681, "IT8671F/IT8687R", {
Anders Jenbo14db1c02010-05-08 23:28:33 +000076 {NOLDN, NULL,
77 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x2E,0x2F,EOT},
78 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,NANA,0x86,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
79 {0x0, "Floppy disk controller",
80 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xF0,EOT},
81 {0x00,0x00,0x03,0xF0,0x06,0x02,0x02,0x00,EOT}},
82 {0x1, "COM1",
83 {0x30,0x31,0x60,0x61,0x70,0x71,0xF0,EOT},
84 {0x00,0x00,0x03,0xF8,0x04,0x02,0x00,EOT}},
85 {0x2, "COM2",
86 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,0x74,0x75,0xF0,0xF1,EOT},
87 {0x00,0x00,0x02,0xF8,0x03,0x00,0x03,0x02,0x0A,0x02,0x00,0x01,0x00,0x00,EOT}},
88 {0x3, "Parallel port",
89 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,0xF0,EOT},
90 {0x00,0x00,0x01,0x78,0x07,0x78,0x07,0x02,0x03,0x03,EOT}},
91 {0x4, "APC",
92 {0x30,0xF0,0xF1,0xF2,0xF4,0xF5,0xF6,EOT},
93 {0x00,0x00,0x00,0x00,0x00,0x00,NANA,EOT}},
94 {0x5, "Keyboard",
95 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xF0,EOT},
96 {0x01,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
97 {0x6, "Mouse",
98 {0x30,0x70,0x71,0xF0,EOT},
99 {0x00,0x0C,0x02,0x00,EOT}},
100 {0x7, "GPIO and Alternative function",
101 {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},
102 {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 +0000103 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000104 {0x8701, "IT8703F", {
105 {NOLDN, NULL,
106 {0x20,0x21,0x23,0x24,0x26,0x29,0x2A,0x2B,EOT},
107 {0x87,0x00,0x00,0x80,0x00,0x00,0x7C,0xC0,EOT}},
108 {0x0, "Floppy disk controller",
109 {0x30,0x60,0x61,0x70,0x74,0xF0,0xF1,0xF2,0xF3,0xF4,
110 0xF5,EOT},
111 {0x00,0x03,0xf0,0x06,0x02,0x0E,0x00,0xFF,0x00,0x00,
112 0x00,EOT}},
113 {0x1, "Parallel port",
114 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
115 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
116 {0x2, "Serial port 1",
117 {0x30,0x60,0x61,0x70,0xf0,EOT},
118 {0x00,0x03,0xf8,0x04,0x00,EOT}},
119 {0x3, "Serial port 2",
120 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
121 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
122 {0x5, "Keyboard controller",
123 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
124 {0x01,0x00,0x60,0x00,0x64,0x01,0x0C,0x80,EOT}},
125 {0x6, "Consumer IR",
126 {0x30,0x60,0x61,0x70,EOT},
127 {0x00,0x00,0x00,0x00,EOT}},
128 {0x7, "Game port, MIDI, GPIO set 1",
129 {0x30,0x60,0x61,0x62,0x63,0x70,0xF0,0xF1,0xF2,EOT},
130 {0x00,0x02,0x01,0x03,0x30,0x00,0xFF,0x00,0x00,EOT}},
131 {0x8, "GPIO set 2",
132 {0x30,0xF0,0xF1,0xF2,0xF3,0xF5,EOT},
133 {0x00,0xFF,0x00,0x00,0x00,0x00,EOT}},
134 {0x9, "GPIO set 3 and 4",
135 {0x30,0x60,0x61,0xF0,0xF1,0xF2,0xF3,0xF4,EOT},
136 {0x00,0x02,0x90,0xFF,0x00,0x00,0x00,0x00,EOT}},
137 {0xA, "ACPI",
138 {0x30,0x70,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
139 0xF3,0xF4,0xF6,0xF7,0xF9,EOT},
140 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
141 NANA,NANA,0x00,0x00,0x00,EOT}},
142 {0xC, "GPIO set 5, 6 and 7",
143 {0x30,0x60,0x61,0xF0,0xF3,0xF6,EOT},
144 {0x00,0x03,0x70,0x00,0xFF,0xFF,EOT}},
145 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000146 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000147 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000148 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000149 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000150 {0x20,0x21,0x22,0x23,0x24,EOT},
151 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000152 {0x0, "Floppy",
153 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
154 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
155 {0x1, "COM1",
156 {0x30,0x60,0x61,0x70,0xf0,EOT},
157 {0x00,0x03,0xf8,0x04,0x00,EOT}},
158 {0x2, "COM2",
159 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
160 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
161 {0x3, "Parallel port",
162 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
163 0xf0,EOT},
164 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
165 0x03,EOT}},
166 {0x4, "Environment controller",
167 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
168 0xf3,0xf4,0xf5,0xf6,EOT},
169 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
170 0x00,0x00,NANA,NANA,EOT}},
171 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000172 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
173 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
174 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
175 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
176 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
177 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
178 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000179 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
180 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
181 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
182 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
183 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
184 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000185 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000186 {0x6, "Game port",
187 {0x30,0x60,0x61,EOT},
188 {0x00,0x02,0x01,EOT}},
189 {0x7, "Consumer IR",
190 {0x30,0x60,0x61,0x70,0xf0,EOT},
191 {0x00,0x03,0x10,0x0b,0x00,EOT}},
192 {0x8, "MIDI port",
193 {0x30,0x60,0x61,0x70,0xf0,EOT},
194 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000195 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000196 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
197 /* This is a "Special General Purpose I/O chip". */
198 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000199 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000200 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000201 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
202 0x2a,0x2e,0x2f,EOT},
203 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
204 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000205 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000206 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
207 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000208 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000209 {0x30,0x60,0x61,0x70,0xf0,EOT},
210 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000211 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000212 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
213 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000214 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000215 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
216 0xf0,EOT},
217 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
218 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000219 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000220 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
221 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
222 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
223 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000224 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000225 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000226 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
227 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000228 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000229 {0x30,0x70,0x71,0xf0,EOT},
230 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000231 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000232 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
233 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
234 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
235 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
236 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
237 0xfc,EOT},
238 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
239 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
240 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
241 0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
242 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
243 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000244 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000245 {0x30,0x60,0x61,EOT},
246 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000247 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000248 {0x30,0x60,0x61,0x70,0xf0,EOT},
249 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000250 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000251 {0x30,0x60,0x61,0x70,0xf0,EOT},
252 {0x00,0x03,0x00,0x0a,0x00,EOT}},
253 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000254 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000255 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000256 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
257 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000258 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000259 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000260 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
261 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000262 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000263 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
264 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000265 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000266 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
267 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000268 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000269 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
270 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000271 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000272 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
273 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000274 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000275 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
276 0xf4,0xf5,0xf6,EOT},
277 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
278 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000279 {0x5, "Keyboard",
280 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000281 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
282 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000283 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000284 {0x30,0x70,0x71,0xf0,EOT},
285 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000286 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000287 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
288 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
289 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
290 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
291 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
292 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
293 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
Uwe Hermann07024692007-09-20 22:13:48 +0000294 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000295 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
296 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
297 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
298 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000299 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000300 {0x30,0x60,0x61,0x70,0xf0,EOT},
301 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000302 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000303 {0x30,0x60,0x61,EOT},
304 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000305 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000306 {0x30,0x60,0x61,0x70,0xf0,EOT},
307 {0x00,0x03,0x10,0x0b,0x00,EOT}},
308 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000309 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000310 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000311 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
312 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000313 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000314 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
315 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000316 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000317 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
318 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000319 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000320 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
321 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000322 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000323 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
324 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000325 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000326 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
327 0xf4,0xf5,0xf6,EOT},
328 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
329 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000330 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000331 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
332 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000333 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000334 {0x30,0x70,0x71,0xf0,EOT},
335 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000336 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000337 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
338 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
339 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
340 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
341 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
342 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
343 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
344 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
345 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
346 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
347 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
348 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000349 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000350 {0x30,0x60,0x61,0x70,0xf0,EOT},
351 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000352 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000353 {0x30,0x60,0x61,EOT},
354 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000355 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000356 {0x30,0x60,0x61,0x70,0xf0,EOT},
357 {0x00,0x03,0x10,0x0b,0x00,EOT}},
358 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000359 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000360 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000361 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
362 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000363 {0x0, "Floppy",
364 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
365 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
366 {0x1, "COM1",
367 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
368 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
369 {0x2, "COM2",
370 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
371 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
372 {0x3, "Parallel port",
373 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
374 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
375 {0x4, "Environment controller",
376 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
377 0xf4,0xf5,0xf6,EOT},
378 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
379 0x00,NANA,NANA,EOT}},
380 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000381 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000382 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
383 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
384 {0x6, "Mouse",
385 {0x30,0x70,0x71,0xf0,EOT},
386 {0x00,0x0c,0x02,0x00,EOT}},
387 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000388 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000389 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
390 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
391 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000392 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
393 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
394 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
395 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000396 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
397 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
398 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000399 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000400 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
401 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000402 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000403 {0xa, "Consumer IR",
404 {0x30,0x60,0x61,0x70,0xf0,EOT},
405 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000406 {EOT}}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000407 {0x8720, "IT8720F", { /* From sensors-detect */
408 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000409 {0x8722, "IT8722F", {
410 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000411 {0x8726, "IT8726F", {
412 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000413 {NOLDN, NULL,
414 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
415 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
416 {0x0, "Floppy",
417 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
418 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
419 {0x1, "COM1",
420 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
421 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
422 {0x2, "COM2",
423 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
424 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
425 {0x3, "Parallel port",
426 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
427 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
428 {0x4, "Environment controller",
429 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
430 0xf4,0xf5,0xf6,EOT},
431 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
432 0x00,MISC,MISC,EOT}},
433 {0x5, "Keyboard",
434 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
435 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
436 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
437 {0x6, "Mouse",
438 {0x30,0x70,0x71,0xf0,EOT},
439 {0x00,0x0c,0x02,0x00,EOT}},
440 {0x7, "GPIO",
441 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
442 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
443 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
444 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
445 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
446 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
447 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
448 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
449 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
450 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
451 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
452 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
453 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
454 {0x8, "MIDI port",
455 {0x30,0x60,0x61,0x70,0xf0,EOT},
456 {0x00,0x03,0x00,0x0a,0x00,EOT}},
457 {0x9, "Game port",
458 {0x30,0x60,0x61,EOT},
459 {0x00,0x02,0x01,EOT}},
460 {0xa, "Consumer IR",
461 {0x30,0x60,0x61,0x70,0xf0,EOT},
462 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000463 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000464 {0x8761, "IT8761E", {
465 {EOT}}},
466 {0x8780, "IT8780F", {
467 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000468 {EOT}
469};
470
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000471static const struct superio_registers ec_table[] = {
472 {0x8716, "IT8716F", {
473 {NOLDN, NULL,
474 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
475 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
476 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
477 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
478 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000479 0x59,0x5c,
480 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
481 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
482 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
483 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
484 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000485 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
486 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
487 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
488 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
489 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000490 0x00,0x00,
491 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000492 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
493 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
494 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
495 0x00,0x00,0x7f,EOT}},
496 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000497 {0x8718, "IT8718F", {
498 {NOLDN, NULL,
499 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
500 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
501 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
502 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
503 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
504 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
505 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
506 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
507 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
508 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
509 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
510 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
511 0xa6,EOT},
512 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
513 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
514 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
515 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
516 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
517 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
518 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
519 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
520 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
521 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
522 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
523 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
524 0x00,EOT}},
525 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000526 {EOT}
527};
528
Urja Rannikko38204a22008-10-23 23:33:18 +0000529/* Works for: IT8661F/IT8770F */
530static const uint8_t initkey_it8661f[][4] = {
531 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
532 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
533 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
534};
535
536/* Works for: IT8671F/IT8687R, IT8673F */
537static const uint8_t initkey_it8671f[][4] = {
538 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
539 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
540 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
541};
542
543/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
544static const uint8_t initkey_mbpnp[] = {
545 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
546 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
547 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
548};
549
550/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
551static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
552{
553 int i, idx;
554
555 /* Determine Super I/O config port. */
556 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
557 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000558 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000559
560 /* Sequentially write the 32 MB PnP init values. */
561 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000562 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000563}
564
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000565static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000566{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000567 OUTB(0x87, port);
568 OUTB(0x01, port);
569 OUTB(0x55, port);
570 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000571}
572
Uwe Hermannebb73f22008-11-12 19:08:58 +0000573static void enter_conf_mode_ite_it8761e(uint16_t port)
574{
575 OUTB(0x87, port);
576 OUTB(0x61, port);
577 OUTB(0x55, port);
578 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
579}
580
581static void enter_conf_mode_ite_it8228e(uint16_t port)
582{
583 OUTB(0x82, port);
584 OUTB(0x28, port);
585 OUTB(0x55, port);
586 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
587}
588
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000589static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000590{
591 regwrite(port, 0x02, 0x02);
592}
593
Uwe Hermannafe83092007-09-28 15:45:43 +0000594static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000595{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000596 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000597
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000598 probing_for("ITE", init, port);
599
Uwe Hermann07024692007-09-20 22:13:48 +0000600 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
601 id |= regval(port, CHIP_ID_BYTE2_REG);
602 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
603
604 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000605 if (verbose)
606 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000607 return;
608 }
609
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000610 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000611 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000612 chip_found = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000613
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000614 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000615
616 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000617 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000618
619 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000620 ecport = regval(port, 0x60) << 8;
621 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000622
623 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000624 ecport += 5;
625
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000626 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000627 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000628 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000629}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000630
Uwe Hermannb4db2202007-09-20 23:37:56 +0000631void probe_idregs_ite(uint16_t port)
632{
Urja Rannikko38204a22008-10-23 23:33:18 +0000633 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
634 enter_conf_mode_ite_legacy(port, initkey_it8661f);
635 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
636 exit_conf_mode_ite(port);
Uwe Hermannb4db2202007-09-20 23:37:56 +0000637
Urja Rannikko38204a22008-10-23 23:33:18 +0000638 enter_conf_mode_ite_legacy(port, initkey_it8671f);
639 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
640 exit_conf_mode_ite(port);
641 } else {
642 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000643 probe_idregs_ite_helper("(init=standard) ", port);
644 exit_conf_mode_ite(port);
645
646 enter_conf_mode_ite_it8761e(port);
647 probe_idregs_ite_helper("(init=it8761e) ", port);
648 exit_conf_mode_ite(port);
649
650 enter_conf_mode_ite_it8228e(port);
651 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000652 exit_conf_mode_ite(port);
653
654 enter_conf_mode_winbond_fintek_ite_8787(port);
655 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
656 exit_conf_mode_winbond_fintek_ite_8787(port);
657 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000658}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000659
660void print_ite_chips(void)
661{
662 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000663 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000664}