blob: f7b6d7efefbaeb226b393d61cf44f0ccf4cb8c7d [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}}},
Anton Kochkov106f7ff2010-06-29 21:26:17 +000032 {0x8502, "IT8502E/TE/G", {
33 {NOLDN, NULL,
34 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
35 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
36 {0x85,0x02,0x71,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
37 NANA,NANA,NANA,0x00,NANA,EOT}},
38 {0x1, "UART1",
39 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
40 {0x00,0x03,0xf8,0x00,0x00,0x04,0x02,0x00,EOT}},
41 {0x4, "System Wake-Up",
42 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
43 {0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,EOT}},
44 {0x5, "Mouse",
45 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
46 {0x01,0x00,0x00,0x00,0x00,0x0C,0x01,NANA,EOT}},
47 {0x6, "Keyboard",
48 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
49 {0x01,0x00,0x60,0x00,0x64,0x01,0x01,NANA,EOT}},
50 {0xf, "Shared Memory/Flash",
51 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
52 0xf6,EOT},
53 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54 0x00,EOT}},
55 {0x10, "BRAM",
56 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
57 0xf5,EOT},
58 {0x00,0x00,0x70,0x00,0x72,0x08,0x01,NANA,NANA,
59 NANA,EOT}},
60 {0x11, "Power Channel 1",
61 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
62
63 {0x00,0x00,0x62,0x00,0x66,0x01,0x01,EOT}},
64 {0x12, "Power Channel 2",
65 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
66 {0x00,0x00,0x68,0x00,0x6c,0x01,0x01,EOT}},
67 {0x17, "Power Channel 3",
68 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
69 {0x00,0x00,0x6a,0x00,0x6e,0x01,0x01,EOT}},
70 {EOT}}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +000071 {0x8510, "IT8510E/TE/G", {
72 {EOT}}},
73 {0x8511, "IT8511E/TE/G", {
Anton Kochkov106f7ff2010-06-29 21:26:17 +000074 {NOLDN, NULL,
75 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
76 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
77 {0x85,0x11,0x10,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
78 NANA,NANA,NANA,0x00,NANA,EOT}},
79 {0x4, "System Wake-Up",
80 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
81 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,EOT}},
82 {0x5, "Mouse",
83 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
84 {0x01,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
85 {0x6, "Keyboard",
86 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
87 {0x01,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
88 {0xf, "Shared Memory/Flash",
89 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
90 0xf6,EOT},
91 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
92 0x00,EOT}},
93 {0x10, "Real-Time Clock",
94 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,
95 0xf2,0xf3,0xf4,0xf5,EOT},
96 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,
97 0x4A,NANA,NANA,NANA,EOT}},
98 {0x11, "Power Channel 1",
99 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
100 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
101 {0x12, "Power Channel 2",
102 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
103 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +0000104 {EOT}}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +0000105 {0x8512, "IT8512E/F/G", {
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000106 {NOLDN, NULL,
107 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
108 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
109 {0x85,0x12,0x22,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
110 NANA,NANA,NANA,0x00,NANA,EOT}},
111 {0x4, "System Wake-Up",
112 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
113 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
114 {0x5, "Mouse",
115 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
116 {0x00,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
117 {0x6, "Keyboard",
118 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
119 {0x00,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
120 {0xf, "Shared Memory/Flash",
121 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
122 0xf6,EOT},
123 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
124 0x00,EOT}},
125 {0x10, "BRAM",
126 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
127 0xf5,EOT},
128 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,NANA,NANA,
129 NANA,EOT}},
130 {0x11, "Power Channel 1",
131 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
132 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
133 {0x12, "Power Channel 2",
134 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
135 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +0000136 {EOT}}},
137 {0x8513, "IT8513E/F/G", {
138 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000139 {0x8661, "IT8661F/IT8770F", {
Robinson P. Tryondc817692007-10-05 13:47:04 +0000140 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000141 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
142 0x23,0x24,EOT},
143 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
144 0x00,0x00,EOT}},
Robinson P. Tryondc817692007-10-05 13:47:04 +0000145 {0x0, "Floppy",
146 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
147 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
148 {0x1, "COM1",
149 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
150 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
151 {0x2, "COM2",
152 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
153 {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
154 {0x3, "Parallel port",
155 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
156 0xf0,EOT},
157 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
158 0x03,EOT}},
159 {0x4, "IR",
160 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
161 0x74,0x75,0xf0,EOT},
162 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
163 0x01,0x00,0x00,EOT}},
164 {0x5, "GPIO",
165 {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
166 0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
167 0xf9,0xfa,0xfb,0xfc,EOT},
168 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
169 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
170 0x00,0x00,0x00,0x00,EOT}},
171 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000172 {0x8673, "IT8673F", {
173 {EOT}}},
174 {0x8681, "IT8671F/IT8687R", {
Anders Jenbo14db1c02010-05-08 23:28:33 +0000175 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000176 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
177 0x23,0x24,0x25,0x26,0x2e,0x2f,EOT},
178 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x81,0x00,
179 0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
180 {0x0, "Floppy",
181 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
182 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000183 {0x1, "COM1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000184 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
185 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000186 {0x2, "COM2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000187 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
188 0x74,0x75,0xf0,0xf1,EOT},
189 {0x00,0x00,0x02,0xf8,0x03,0x00,0x03,0x02,0x0a,0x02,
190 0x00,0x01,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000191 {0x3, "Parallel port",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000192 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
193 0xf0,EOT},
194 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
195 0x03,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000196 {0x4, "APC",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000197 {0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
198 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000199 {0x5, "Keyboard",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000200 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
201 {MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000202 {0x6, "Mouse",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000203 {0x30,0x70,0x71,0xf0,EOT},
204 {0x00,0x0c,0x02,0x00,EOT}},
205 {0x7, "GPIO",
206 {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
207 0x70,0x71,0x72,0x73,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,
208 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
209 0xe0,0xe1,0xe2,0xe3,0xe4,EOT},
210 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
211 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
212 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
213 0x00,0x00,0x00,0x00,0x00,EOT}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000214 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000215 {0x8701, "IT8703F", {
216 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000217 {0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
218 {0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
219 {0x0, "Floppy",
220 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
221 0xf5,EOT},
222 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000223 0x00,EOT}},
224 {0x1, "Parallel port",
225 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
226 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000227 {0x2, "COM1",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000228 {0x30,0x60,0x61,0x70,0xf0,EOT},
229 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000230 {0x3, "COM2",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000231 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
232 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000233 {0x5, "Keyboard",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000234 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000235 {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x80,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000236 {0x6, "Consumer IR",
237 {0x30,0x60,0x61,0x70,EOT},
238 {0x00,0x00,0x00,0x00,EOT}},
239 {0x7, "Game port, MIDI, GPIO set 1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000240 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
241 {0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000242 {0x8, "GPIO set 2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000243 {0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
244 {0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000245 {0x9, "GPIO set 3 and 4",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000246 {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
247 {0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
248 {0xa, "ACPI",
249 {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
250 0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000251 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
252 NANA,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000253 {0xc, "GPIO set 5, 6 and 7",
254 {0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
255 {0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000256 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000257 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000258 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000259 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000260 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000261 {0x20,0x21,0x22,0x23,0x24,EOT},
262 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000263 {0x0, "Floppy",
264 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
265 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
266 {0x1, "COM1",
267 {0x30,0x60,0x61,0x70,0xf0,EOT},
268 {0x00,0x03,0xf8,0x04,0x00,EOT}},
269 {0x2, "COM2",
270 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
271 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
272 {0x3, "Parallel port",
273 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
274 0xf0,EOT},
275 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
276 0x03,EOT}},
277 {0x4, "Environment controller",
278 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
279 0xf3,0xf4,0xf5,0xf6,EOT},
280 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
281 0x00,0x00,NANA,NANA,EOT}},
282 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000283 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
284 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
285 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
286 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
287 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
288 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
289 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000290 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
291 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
292 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
294 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
295 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000296 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000297 {0x6, "Game port",
298 {0x30,0x60,0x61,EOT},
299 {0x00,0x02,0x01,EOT}},
300 {0x7, "Consumer IR",
301 {0x30,0x60,0x61,0x70,0xf0,EOT},
302 {0x00,0x03,0x10,0x0b,0x00,EOT}},
303 {0x8, "MIDI port",
304 {0x30,0x60,0x61,0x70,0xf0,EOT},
305 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000306 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000307 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
308 /* This is a "Special General Purpose I/O chip". */
309 {EOT}}},
Mattias Mattsson25bf69a2010-08-02 02:34:20 +0000310 {0x8707, "IT8707F", {
311 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000312 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000313 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000314 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
315 0x2a,0x2e,0x2f,EOT},
316 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
317 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000318 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000319 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
320 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000321 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000322 {0x30,0x60,0x61,0x70,0xf0,EOT},
323 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000324 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000325 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
326 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000327 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000328 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
329 0xf0,EOT},
330 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
331 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000332 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000333 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
334 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
335 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
336 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000337 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000338 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000339 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
340 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000341 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000342 {0x30,0x70,0x71,0xf0,EOT},
343 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000344 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000345 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
346 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
347 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
348 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
349 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
350 0xfc,EOT},
351 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
352 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
353 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
354 0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
355 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
356 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000357 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000358 {0x30,0x60,0x61,EOT},
359 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000360 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000361 {0x30,0x60,0x61,0x70,0xf0,EOT},
362 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000363 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000364 {0x30,0x60,0x61,0x70,0xf0,EOT},
365 {0x00,0x03,0x00,0x0a,0x00,EOT}},
366 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000367 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000368 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000369 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
370 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000371 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000372 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000373 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
374 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000375 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000376 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
377 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000378 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000379 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
380 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000381 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000382 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
383 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000384 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000385 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
386 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000387 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000388 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
389 0xf4,0xf5,0xf6,EOT},
390 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
391 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000392 {0x5, "Keyboard",
393 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000394 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
395 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000396 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000397 {0x30,0x70,0x71,0xf0,EOT},
398 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000399 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000400 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
401 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
402 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
403 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
404 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
405 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
406 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
Uwe Hermann07024692007-09-20 22:13:48 +0000407 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000408 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
409 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
410 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
411 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000412 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000413 {0x30,0x60,0x61,0x70,0xf0,EOT},
414 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000415 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000416 {0x30,0x60,0x61,EOT},
417 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000418 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000419 {0x30,0x60,0x61,0x70,0xf0,EOT},
420 {0x00,0x03,0x10,0x0b,0x00,EOT}},
421 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000422 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000423 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000424 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
425 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000426 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000427 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
428 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000429 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000430 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
431 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000432 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000433 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
434 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000435 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000436 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
437 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000438 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000439 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
440 0xf4,0xf5,0xf6,EOT},
441 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
442 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000443 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000444 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
445 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000446 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000447 {0x30,0x70,0x71,0xf0,EOT},
448 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000449 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000450 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
451 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
452 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
453 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
454 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
455 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
456 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
457 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
458 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
459 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
460 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
461 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000462 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000463 {0x30,0x60,0x61,0x70,0xf0,EOT},
464 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000465 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000466 {0x30,0x60,0x61,EOT},
467 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000468 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000469 {0x30,0x60,0x61,0x70,0xf0,EOT},
470 {0x00,0x03,0x10,0x0b,0x00,EOT}},
471 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000472 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000473 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000474 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
475 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000476 {0x0, "Floppy",
477 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
478 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
479 {0x1, "COM1",
480 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
481 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
482 {0x2, "COM2",
483 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
484 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
485 {0x3, "Parallel port",
486 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
487 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
488 {0x4, "Environment controller",
489 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
490 0xf4,0xf5,0xf6,EOT},
491 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
492 0x00,NANA,NANA,EOT}},
493 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000494 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000495 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
496 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
497 {0x6, "Mouse",
498 {0x30,0x70,0x71,0xf0,EOT},
499 {0x00,0x0c,0x02,0x00,EOT}},
500 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000501 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000502 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
503 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
504 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000505 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
506 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
507 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
508 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000509 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
510 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
511 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000512 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000513 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
514 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000515 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000516 {0xa, "Consumer IR",
517 {0x30,0x60,0x61,0x70,0xf0,EOT},
518 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000519 {EOT}}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000520 {0x8720, "IT8720F", { /* From sensors-detect */
521 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000522 {0x8722, "IT8722F", {
523 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000524 {0x8726, "IT8726F", {
525 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000526 {NOLDN, NULL,
527 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
528 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
529 {0x0, "Floppy",
530 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
531 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
532 {0x1, "COM1",
533 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
534 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
535 {0x2, "COM2",
536 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
537 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
538 {0x3, "Parallel port",
539 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
540 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
541 {0x4, "Environment controller",
542 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
543 0xf4,0xf5,0xf6,EOT},
544 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
545 0x00,MISC,MISC,EOT}},
546 {0x5, "Keyboard",
547 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
548 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
549 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
550 {0x6, "Mouse",
551 {0x30,0x70,0x71,0xf0,EOT},
552 {0x00,0x0c,0x02,0x00,EOT}},
553 {0x7, "GPIO",
554 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
555 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
556 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
557 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
558 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
559 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
560 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
561 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
562 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
563 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
564 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
565 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
566 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
567 {0x8, "MIDI port",
568 {0x30,0x60,0x61,0x70,0xf0,EOT},
569 {0x00,0x03,0x00,0x0a,0x00,EOT}},
570 {0x9, "Game port",
571 {0x30,0x60,0x61,EOT},
572 {0x00,0x02,0x01,EOT}},
573 {0xa, "Consumer IR",
574 {0x30,0x60,0x61,0x70,0xf0,EOT},
575 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000576 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000577 {0x8761, "IT8761E", {
578 {EOT}}},
579 {0x8780, "IT8780F", {
580 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000581 {EOT}
582};
583
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000584static const struct superio_registers ec_table[] = {
585 {0x8716, "IT8716F", {
586 {NOLDN, NULL,
587 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
588 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
589 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
590 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
591 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000592 0x59,0x5c,
593 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
594 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
595 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
596 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
597 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000598 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
599 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
600 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
601 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
602 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000603 0x00,0x00,
604 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000605 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
606 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
607 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
608 0x00,0x00,0x7f,EOT}},
609 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000610 {0x8718, "IT8718F", {
611 {NOLDN, NULL,
612 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
613 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
614 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
615 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
616 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
617 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
618 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
619 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
620 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
621 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
622 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
623 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
624 0xa6,EOT},
625 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
626 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
627 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
628 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
629 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
630 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
631 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
632 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
633 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
634 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
635 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
636 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
637 0x00,EOT}},
638 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000639 {EOT}
640};
641
Urja Rannikko38204a22008-10-23 23:33:18 +0000642/* Works for: IT8661F/IT8770F */
643static const uint8_t initkey_it8661f[][4] = {
644 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
645 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
646 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
647};
648
649/* Works for: IT8671F/IT8687R, IT8673F */
650static const uint8_t initkey_it8671f[][4] = {
651 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
652 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
653 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
654};
655
656/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
657static const uint8_t initkey_mbpnp[] = {
658 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
659 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
660 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
661};
662
663/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
664static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
665{
666 int i, idx;
667
668 /* Determine Super I/O config port. */
669 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
670 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000671 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000672
673 /* Sequentially write the 32 MB PnP init values. */
674 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000675 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000676}
677
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000678static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000679{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000680 OUTB(0x87, port);
681 OUTB(0x01, port);
682 OUTB(0x55, port);
683 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000684}
685
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000686static void enter_conf_mode_ite_it8502e(uint16_t port)
687{
688 OUTB(0x85, port);
689 OUTB(0x02, port);
690 OUTB(0x55, port);
691 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
692}
693
Uwe Hermannebb73f22008-11-12 19:08:58 +0000694static void enter_conf_mode_ite_it8761e(uint16_t port)
695{
696 OUTB(0x87, port);
697 OUTB(0x61, port);
698 OUTB(0x55, port);
699 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
700}
701
702static void enter_conf_mode_ite_it8228e(uint16_t port)
703{
704 OUTB(0x82, port);
705 OUTB(0x28, port);
706 OUTB(0x55, port);
707 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
708}
709
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000710static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000711{
712 regwrite(port, 0x02, 0x02);
713}
714
Uwe Hermannafe83092007-09-28 15:45:43 +0000715static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000716{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000717 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000718
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000719 probing_for("ITE", init, port);
720
Uwe Hermann07024692007-09-20 22:13:48 +0000721 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
722 id |= regval(port, CHIP_ID_BYTE2_REG);
723 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
724
725 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000726 if (verbose)
727 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000728 return;
729 }
730
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000731 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000732 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000733 chip_found = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000734
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000735 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000736
737 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000738 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000739
740 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000741 ecport = regval(port, 0x60) << 8;
742 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000743
744 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000745 ecport += 5;
746
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000747 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000748 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000749 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000750}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000751
Uwe Hermannb4db2202007-09-20 23:37:56 +0000752void probe_idregs_ite(uint16_t port)
753{
Urja Rannikko38204a22008-10-23 23:33:18 +0000754 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
755 enter_conf_mode_ite_legacy(port, initkey_it8661f);
756 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
757 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000758 if (chip_found) return;
Uwe Hermannb4db2202007-09-20 23:37:56 +0000759
Urja Rannikko38204a22008-10-23 23:33:18 +0000760 enter_conf_mode_ite_legacy(port, initkey_it8671f);
761 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
762 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000763 if (chip_found) return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000764 } else {
765 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000766 probe_idregs_ite_helper("(init=standard) ", port);
767 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000768 if (chip_found) return;
Uwe Hermannebb73f22008-11-12 19:08:58 +0000769
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000770 enter_conf_mode_ite_it8502e(port);
771 probe_idregs_ite_helper("(init=it8502e) ", port);
772 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000773 if (chip_found) return;
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000774
Uwe Hermannebb73f22008-11-12 19:08:58 +0000775 enter_conf_mode_ite_it8761e(port);
776 probe_idregs_ite_helper("(init=it8761e) ", port);
777 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000778 if (chip_found) return;
Uwe Hermannebb73f22008-11-12 19:08:58 +0000779
780 enter_conf_mode_ite_it8228e(port);
781 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000782 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000783 if (chip_found) return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000784
785 enter_conf_mode_winbond_fintek_ite_8787(port);
786 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
787 exit_conf_mode_winbond_fintek_ite_8787(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000788 if (chip_found) return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000789 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000790}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000791
792void print_ite_chips(void)
793{
794 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000795 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000796}