blob: 30ca1981d20cc38355b283ed9052253de7f09728 [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,
Uwe Hermann4bdd6432010-05-14 16:40:55 +000077 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
78 0x23,0x24,0x25,0x26,0x2e,0x2f,EOT},
79 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x81,0x00,
80 0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
81 {0x0, "Floppy",
82 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
83 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +000084 {0x1, "COM1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +000085 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
86 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +000087 {0x2, "COM2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +000088 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
89 0x74,0x75,0xf0,0xf1,EOT},
90 {0x00,0x00,0x02,0xf8,0x03,0x00,0x03,0x02,0x0a,0x02,
91 0x00,0x01,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +000092 {0x3, "Parallel port",
Uwe Hermann4bdd6432010-05-14 16:40:55 +000093 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
94 0xf0,EOT},
95 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
96 0x03,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +000097 {0x4, "APC",
Uwe Hermann4bdd6432010-05-14 16:40:55 +000098 {0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
99 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000100 {0x5, "Keyboard",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000101 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
102 {MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000103 {0x6, "Mouse",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000104 {0x30,0x70,0x71,0xf0,EOT},
105 {0x00,0x0c,0x02,0x00,EOT}},
106 {0x7, "GPIO",
107 {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
108 0x70,0x71,0x72,0x73,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,
109 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
110 0xe0,0xe1,0xe2,0xe3,0xe4,EOT},
111 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
112 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
113 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
114 0x00,0x00,0x00,0x00,0x00,EOT}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000115 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000116 {0x8701, "IT8703F", {
117 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000118 {0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
119 {0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
120 {0x0, "Floppy",
121 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
122 0xf5,EOT},
123 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000124 0x00,EOT}},
125 {0x1, "Parallel port",
126 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
127 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000128 {0x2, "COM1",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000129 {0x30,0x60,0x61,0x70,0xf0,EOT},
130 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000131 {0x3, "COM2",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000132 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
133 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000134 {0x5, "Keyboard",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000135 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000136 {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x80,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000137 {0x6, "Consumer IR",
138 {0x30,0x60,0x61,0x70,EOT},
139 {0x00,0x00,0x00,0x00,EOT}},
140 {0x7, "Game port, MIDI, GPIO set 1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000141 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
142 {0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000143 {0x8, "GPIO set 2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000144 {0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
145 {0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000146 {0x9, "GPIO set 3 and 4",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000147 {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
148 {0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
149 {0xa, "ACPI",
150 {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
151 0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000152 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
153 NANA,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000154 {0xc, "GPIO set 5, 6 and 7",
155 {0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
156 {0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000157 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000158 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000159 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000160 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000161 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000162 {0x20,0x21,0x22,0x23,0x24,EOT},
163 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000164 {0x0, "Floppy",
165 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
166 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
167 {0x1, "COM1",
168 {0x30,0x60,0x61,0x70,0xf0,EOT},
169 {0x00,0x03,0xf8,0x04,0x00,EOT}},
170 {0x2, "COM2",
171 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
172 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
173 {0x3, "Parallel port",
174 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
175 0xf0,EOT},
176 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
177 0x03,EOT}},
178 {0x4, "Environment controller",
179 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
180 0xf3,0xf4,0xf5,0xf6,EOT},
181 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
182 0x00,0x00,NANA,NANA,EOT}},
183 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000184 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
185 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
186 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
187 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
188 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
189 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
190 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000191 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
192 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
193 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
194 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
195 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
196 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000197 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000198 {0x6, "Game port",
199 {0x30,0x60,0x61,EOT},
200 {0x00,0x02,0x01,EOT}},
201 {0x7, "Consumer IR",
202 {0x30,0x60,0x61,0x70,0xf0,EOT},
203 {0x00,0x03,0x10,0x0b,0x00,EOT}},
204 {0x8, "MIDI port",
205 {0x30,0x60,0x61,0x70,0xf0,EOT},
206 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000207 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000208 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
209 /* This is a "Special General Purpose I/O chip". */
210 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000211 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000212 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000213 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
214 0x2a,0x2e,0x2f,EOT},
215 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
216 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000217 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000218 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
219 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000220 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000221 {0x30,0x60,0x61,0x70,0xf0,EOT},
222 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000223 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000224 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
225 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000226 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000227 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
228 0xf0,EOT},
229 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
230 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000231 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000232 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
233 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
234 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
235 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000236 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000237 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000238 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
239 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000240 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000241 {0x30,0x70,0x71,0xf0,EOT},
242 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000243 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000244 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
245 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
246 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
247 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
248 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
249 0xfc,EOT},
250 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
251 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
252 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
253 0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
254 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
255 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000256 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000257 {0x30,0x60,0x61,EOT},
258 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000259 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000260 {0x30,0x60,0x61,0x70,0xf0,EOT},
261 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000262 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000263 {0x30,0x60,0x61,0x70,0xf0,EOT},
264 {0x00,0x03,0x00,0x0a,0x00,EOT}},
265 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000266 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000267 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000268 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
269 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000270 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000271 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000272 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
273 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000274 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000275 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
276 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000277 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000278 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
279 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000280 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000281 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
282 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000283 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000284 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
285 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000286 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000287 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
288 0xf4,0xf5,0xf6,EOT},
289 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
290 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000291 {0x5, "Keyboard",
292 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000293 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
294 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000295 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000296 {0x30,0x70,0x71,0xf0,EOT},
297 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000298 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000299 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
300 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
301 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
302 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
303 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
304 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
305 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
Uwe Hermann07024692007-09-20 22:13:48 +0000306 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000307 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
308 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
309 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
310 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000311 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000312 {0x30,0x60,0x61,0x70,0xf0,EOT},
313 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000314 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000315 {0x30,0x60,0x61,EOT},
316 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000317 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000318 {0x30,0x60,0x61,0x70,0xf0,EOT},
319 {0x00,0x03,0x10,0x0b,0x00,EOT}},
320 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000321 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000322 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000323 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
324 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000325 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000326 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
327 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000328 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000329 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
330 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000331 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000332 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
333 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000334 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000335 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
336 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000337 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000338 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
339 0xf4,0xf5,0xf6,EOT},
340 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
341 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000342 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000343 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
344 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000345 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000346 {0x30,0x70,0x71,0xf0,EOT},
347 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000348 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000349 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
350 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
351 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
352 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
353 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
354 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
355 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
356 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
357 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
358 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
359 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
360 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000361 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000362 {0x30,0x60,0x61,0x70,0xf0,EOT},
363 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000364 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000365 {0x30,0x60,0x61,EOT},
366 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000367 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000368 {0x30,0x60,0x61,0x70,0xf0,EOT},
369 {0x00,0x03,0x10,0x0b,0x00,EOT}},
370 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000371 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000372 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000373 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
374 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000375 {0x0, "Floppy",
376 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
377 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
378 {0x1, "COM1",
379 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
380 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
381 {0x2, "COM2",
382 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
383 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
384 {0x3, "Parallel port",
385 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
386 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
387 {0x4, "Environment controller",
388 {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}},
392 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000393 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000394 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
395 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
396 {0x6, "Mouse",
397 {0x30,0x70,0x71,0xf0,EOT},
398 {0x00,0x0c,0x02,0x00,EOT}},
399 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000400 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000401 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
402 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
403 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000404 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
405 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
406 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
407 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000408 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
409 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
410 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000411 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000412 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
413 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000414 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000415 {0xa, "Consumer IR",
416 {0x30,0x60,0x61,0x70,0xf0,EOT},
417 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000418 {EOT}}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000419 {0x8720, "IT8720F", { /* From sensors-detect */
420 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000421 {0x8722, "IT8722F", {
422 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000423 {0x8726, "IT8726F", {
424 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000425 {NOLDN, NULL,
426 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
427 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
428 {0x0, "Floppy",
429 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
430 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
431 {0x1, "COM1",
432 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
433 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
434 {0x2, "COM2",
435 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
436 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
437 {0x3, "Parallel port",
438 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
439 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
440 {0x4, "Environment controller",
441 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
442 0xf4,0xf5,0xf6,EOT},
443 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
444 0x00,MISC,MISC,EOT}},
445 {0x5, "Keyboard",
446 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
447 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
448 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
449 {0x6, "Mouse",
450 {0x30,0x70,0x71,0xf0,EOT},
451 {0x00,0x0c,0x02,0x00,EOT}},
452 {0x7, "GPIO",
453 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
454 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
455 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
456 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
457 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
458 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
459 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
460 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
461 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
462 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
463 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
464 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
465 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
466 {0x8, "MIDI port",
467 {0x30,0x60,0x61,0x70,0xf0,EOT},
468 {0x00,0x03,0x00,0x0a,0x00,EOT}},
469 {0x9, "Game port",
470 {0x30,0x60,0x61,EOT},
471 {0x00,0x02,0x01,EOT}},
472 {0xa, "Consumer IR",
473 {0x30,0x60,0x61,0x70,0xf0,EOT},
474 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000475 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000476 {0x8761, "IT8761E", {
477 {EOT}}},
478 {0x8780, "IT8780F", {
479 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000480 {EOT}
481};
482
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000483static const struct superio_registers ec_table[] = {
484 {0x8716, "IT8716F", {
485 {NOLDN, NULL,
486 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
487 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
488 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
489 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
490 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000491 0x59,0x5c,
492 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
493 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
494 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
495 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
496 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000497 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
498 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
499 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
500 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
501 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000502 0x00,0x00,
503 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000504 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
505 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
506 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
507 0x00,0x00,0x7f,EOT}},
508 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000509 {0x8718, "IT8718F", {
510 {NOLDN, NULL,
511 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
512 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
513 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
514 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
515 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
516 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
517 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
518 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
519 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
520 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
521 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
522 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
523 0xa6,EOT},
524 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
525 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
526 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
527 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
528 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
529 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
530 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
531 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
532 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
533 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
534 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
535 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
536 0x00,EOT}},
537 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000538 {EOT}
539};
540
Urja Rannikko38204a22008-10-23 23:33:18 +0000541/* Works for: IT8661F/IT8770F */
542static const uint8_t initkey_it8661f[][4] = {
543 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
544 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
545 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
546};
547
548/* Works for: IT8671F/IT8687R, IT8673F */
549static const uint8_t initkey_it8671f[][4] = {
550 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
551 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
552 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
553};
554
555/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
556static const uint8_t initkey_mbpnp[] = {
557 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
558 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
559 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
560};
561
562/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
563static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
564{
565 int i, idx;
566
567 /* Determine Super I/O config port. */
568 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
569 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000570 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000571
572 /* Sequentially write the 32 MB PnP init values. */
573 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000574 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000575}
576
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000577static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000578{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000579 OUTB(0x87, port);
580 OUTB(0x01, port);
581 OUTB(0x55, port);
582 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000583}
584
Uwe Hermannebb73f22008-11-12 19:08:58 +0000585static void enter_conf_mode_ite_it8761e(uint16_t port)
586{
587 OUTB(0x87, port);
588 OUTB(0x61, port);
589 OUTB(0x55, port);
590 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
591}
592
593static void enter_conf_mode_ite_it8228e(uint16_t port)
594{
595 OUTB(0x82, port);
596 OUTB(0x28, port);
597 OUTB(0x55, port);
598 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
599}
600
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000601static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000602{
603 regwrite(port, 0x02, 0x02);
604}
605
Uwe Hermannafe83092007-09-28 15:45:43 +0000606static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000607{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000608 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000609
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000610 probing_for("ITE", init, port);
611
Uwe Hermann07024692007-09-20 22:13:48 +0000612 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
613 id |= regval(port, CHIP_ID_BYTE2_REG);
614 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
615
616 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000617 if (verbose)
618 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000619 return;
620 }
621
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000622 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000623 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000624 chip_found = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000625
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000626 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000627
628 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000629 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000630
631 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000632 ecport = regval(port, 0x60) << 8;
633 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000634
635 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000636 ecport += 5;
637
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000638 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000639 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000640 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000641}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000642
Uwe Hermannb4db2202007-09-20 23:37:56 +0000643void probe_idregs_ite(uint16_t port)
644{
Urja Rannikko38204a22008-10-23 23:33:18 +0000645 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
646 enter_conf_mode_ite_legacy(port, initkey_it8661f);
647 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
648 exit_conf_mode_ite(port);
Uwe Hermannb4db2202007-09-20 23:37:56 +0000649
Urja Rannikko38204a22008-10-23 23:33:18 +0000650 enter_conf_mode_ite_legacy(port, initkey_it8671f);
651 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
652 exit_conf_mode_ite(port);
653 } else {
654 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000655 probe_idregs_ite_helper("(init=standard) ", port);
656 exit_conf_mode_ite(port);
657
658 enter_conf_mode_ite_it8761e(port);
659 probe_idregs_ite_helper("(init=it8761e) ", port);
660 exit_conf_mode_ite(port);
661
662 enter_conf_mode_ite_it8228e(port);
663 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000664 exit_conf_mode_ite(port);
665
666 enter_conf_mode_winbond_fintek_ite_8787(port);
667 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
668 exit_conf_mode_winbond_fintek_ite_8787(port);
669 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000670}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000671
672void print_ite_chips(void)
673{
674 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000675 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000676}