2 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
3 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
5 Copyright (C) 2007, 2008 Jean Delvare <khali@linux-fr.org>
6 Copyright (C) 2010 Intel Corporation,
7 David Woodhouse <dwmw2@infradead.org>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 Supports the following Intel I/O Controller Hubs (ICH):
28 region SMBus Block proc. block
29 Chip name PCI ID size PEC buffer call read
30 ----------------------------------------------------------------------
31 82801AA (ICH) 0x2413 16 no no no no
32 82801AB (ICH0) 0x2423 16 no no no no
33 82801BA (ICH2) 0x2443 16 no no no no
34 82801CA (ICH3) 0x2483 32 soft no no no
35 82801DB (ICH4) 0x24c3 32 hard yes no no
36 82801E (ICH5) 0x24d3 32 hard yes yes yes
37 6300ESB 0x25a4 32 hard yes yes yes
38 82801F (ICH6) 0x266a 32 hard yes yes yes
39 6310ESB/6320ESB 0x269b 32 hard yes yes yes
40 82801G (ICH7) 0x27da 32 hard yes yes yes
41 82801H (ICH8) 0x283e 32 hard yes yes yes
42 82801I (ICH9) 0x2930 32 hard yes yes yes
43 EP80579 (Tolapai) 0x5032 32 hard yes yes yes
44 ICH10 0x3a30 32 hard yes yes yes
45 ICH10 0x3a60 32 hard yes yes yes
46 5/3400 Series (PCH) 0x3b30 32 hard yes yes yes
47 6 Series (PCH) 0x1c22 32 hard yes yes yes
48 Patsburg (PCH) 0x1d22 32 hard yes yes yes
49 Patsburg (PCH) IDF 0x1d70 32 hard yes yes yes
50 Patsburg (PCH) IDF 0x1d71 32 hard yes yes yes
51 Patsburg (PCH) IDF 0x1d72 32 hard yes yes yes
52 DH89xxCC (PCH) 0x2330 32 hard yes yes yes
53 Panther Point (PCH) 0x1e22 32 hard yes yes yes
54 Lynx Point (PCH) 0x8c22 32 hard yes yes yes
55 Lynx Point-LP (PCH) 0x9c22 32 hard yes yes yes
56 Avoton (SOC) 0x1f3c 32 hard yes yes yes
57 Wellsburg (PCH) 0x8d22 32 hard yes yes yes
58 Wellsburg (PCH) MS 0x8d7d 32 hard yes yes yes
59 Wellsburg (PCH) MS 0x8d7e 32 hard yes yes yes
60 Wellsburg (PCH) MS 0x8d7f 32 hard yes yes yes
61 Coleto Creek (PCH) 0x23b0 32 hard yes yes yes
62 Wildcat Point-LP (PCH) 0x9ca2 32 hard yes yes yes
64 Features supported by this driver:
68 Block process call transaction no
69 I2C block read transaction yes (doesn't use the block buffer)
72 See the file Documentation/i2c/busses/i2c-i801 for details.
75 #include <linux/module.h>
76 #include <linux/pci.h>
77 #include <linux/kernel.h>
78 #include <linux/stddef.h>
79 #include <linux/delay.h>
80 #include <linux/ioport.h>
81 #include <linux/init.h>
82 #include <linux/i2c.h>
83 #include <linux/acpi.h>
85 #include <linux/dmi.h>
86 #include <linux/slab.h>
88 /* I801 SMBus address offsets */
89 #define SMBHSTSTS(p) (0 + (p)->smba)
90 #define SMBHSTCNT(p) (2 + (p)->smba)
91 #define SMBHSTCMD(p) (3 + (p)->smba)
92 #define SMBHSTADD(p) (4 + (p)->smba)
93 #define SMBHSTDAT0(p) (5 + (p)->smba)
94 #define SMBHSTDAT1(p) (6 + (p)->smba)
95 #define SMBBLKDAT(p) (7 + (p)->smba)
96 #define SMBPEC(p) (8 + (p)->smba) /* ICH3 and later */
97 #define SMBAUXSTS(p) (12 + (p)->smba) /* ICH4 and later */
98 #define SMBAUXCTL(p) (13 + (p)->smba) /* ICH4 and later */
100 /* PCI Address Constants */
102 #define SMBHSTCFG 0x040
104 /* Host configuration bits for SMBHSTCFG */
105 #define SMBHSTCFG_HST_EN 1
106 #define SMBHSTCFG_SMB_SMI_EN 2
107 #define SMBHSTCFG_I2C_EN 4
109 /* Auxiliary control register bits, ICH4+ only */
110 #define SMBAUXCTL_CRC 1
111 #define SMBAUXCTL_E32B 2
113 /* kill bit for SMBHSTCNT */
114 #define SMBHSTCNT_KILL 2
117 #define MAX_TIMEOUT 100
118 #define ENABLE_INT9 0 /* set to 0x01 to enable - untested */
120 /* I801 command constants */
121 #define I801_QUICK 0x00
122 #define I801_BYTE 0x04
123 #define I801_BYTE_DATA 0x08
124 #define I801_WORD_DATA 0x0C
125 #define I801_PROC_CALL 0x10 /* unimplemented */
126 #define I801_BLOCK_DATA 0x14
127 #define I801_I2C_BLOCK_DATA 0x18 /* ICH5 and later */
128 #define I801_BLOCK_LAST 0x34
129 #define I801_I2C_BLOCK_LAST 0x38 /* ICH5 and later */
130 #define I801_START 0x40
131 #define I801_PEC_EN 0x80 /* ICH3 and later */
133 /* I801 Hosts Status register bits */
134 #define SMBHSTSTS_BYTE_DONE 0x80
135 #define SMBHSTSTS_INUSE_STS 0x40
136 #define SMBHSTSTS_SMBALERT_STS 0x20
137 #define SMBHSTSTS_FAILED 0x10
138 #define SMBHSTSTS_BUS_ERR 0x08
139 #define SMBHSTSTS_DEV_ERR 0x04
140 #define SMBHSTSTS_INTR 0x02
141 #define SMBHSTSTS_HOST_BUSY 0x01
143 #define STATUS_FLAGS (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_FAILED | \
144 SMBHSTSTS_BUS_ERR | SMBHSTSTS_DEV_ERR | \
147 /* Older devices have their ID defined in <linux/pci_ids.h> */
148 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
149 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
150 /* Patsburg also has three 'Integrated Device Function' SMBus controllers */
151 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0 0x1d70
152 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1 0x1d71
153 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2 0x1d72
154 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS 0x1e22
155 #define PCI_DEVICE_ID_INTEL_AVOTON_SMBUS 0x1f3c
156 #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330
157 #define PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS 0x23b0
158 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
159 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22
160 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS 0x8d22
161 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0 0x8d7d
162 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1 0x8d7e
163 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2 0x8d7f
164 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS 0x9c22
165 #define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS 0x9ca2
168 struct i2c_adapter adapter;
170 unsigned char original_hstcfg;
171 struct pci_dev *pci_dev;
172 unsigned int features;
175 static struct pci_driver i801_driver;
177 #define FEATURE_SMBUS_PEC (1 << 0)
178 #define FEATURE_BLOCK_BUFFER (1 << 1)
179 #define FEATURE_BLOCK_PROC (1 << 2)
180 #define FEATURE_I2C_BLOCK_READ (1 << 3)
181 /* Not really a feature, but it's convenient to handle it as such */
182 #define FEATURE_IDF (1 << 15)
184 static const char *i801_feature_names[] = {
187 "Block process call",
191 static unsigned int disable_features;
192 module_param(disable_features, uint, S_IRUGO | S_IWUSR);
193 MODULE_PARM_DESC(disable_features, "Disable selected driver features");
195 /* Make sure the SMBus host is ready to start transmitting.
196 Return 0 if it is, -EBUSY if it is not. */
197 static int i801_check_pre(struct i801_priv *priv)
201 status = inb_p(SMBHSTSTS(priv));
202 if (status & SMBHSTSTS_HOST_BUSY) {
203 dev_err(&priv->pci_dev->dev, "SMBus is busy, can't use it!\n");
207 status &= STATUS_FLAGS;
209 dev_dbg(&priv->pci_dev->dev, "Clearing status flags (%02x)\n",
211 outb_p(status, SMBHSTSTS(priv));
212 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
214 dev_err(&priv->pci_dev->dev,
215 "Failed clearing status flags (%02x)\n",
224 /* Convert the status register to an error code, and clear it. */
225 static int i801_check_post(struct i801_priv *priv, int status, int timeout)
229 /* If the SMBus is still busy, we give up */
231 dev_err(&priv->pci_dev->dev, "Transaction timeout\n");
232 /* try to stop the current command */
233 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");
234 outb_p(inb_p(SMBHSTCNT(priv)) | SMBHSTCNT_KILL,
237 outb_p(inb_p(SMBHSTCNT(priv)) & (~SMBHSTCNT_KILL),
240 /* Check if it worked */
241 status = inb_p(SMBHSTSTS(priv));
242 if ((status & SMBHSTSTS_HOST_BUSY) ||
243 !(status & SMBHSTSTS_FAILED))
244 dev_err(&priv->pci_dev->dev,
245 "Failed terminating the transaction\n");
246 outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
250 if (status & SMBHSTSTS_FAILED) {
252 dev_err(&priv->pci_dev->dev, "Transaction failed\n");
254 if (status & SMBHSTSTS_DEV_ERR) {
256 dev_dbg(&priv->pci_dev->dev, "No response\n");
258 if (status & SMBHSTSTS_BUS_ERR) {
260 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
264 /* Clear error flags */
265 outb_p(status & STATUS_FLAGS, SMBHSTSTS(priv));
266 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
268 dev_warn(&priv->pci_dev->dev, "Failed clearing status "
269 "flags at end of transaction (%02x)\n",
277 static int i801_transaction(struct i801_priv *priv, int xact)
283 result = i801_check_pre(priv);
287 /* the current contents of SMBHSTCNT can be overwritten, since PEC,
288 * INTREN, SMBSCMD are passed in xact */
289 outb_p(xact | I801_START, SMBHSTCNT(priv));
291 /* We will always wait for a fraction of a second! */
294 status = inb_p(SMBHSTSTS(priv));
295 } while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT));
297 result = i801_check_post(priv, status, timeout > MAX_TIMEOUT);
301 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
305 /* wait for INTR bit as advised by Intel */
306 static void i801_wait_hwpec(struct i801_priv *priv)
313 status = inb_p(SMBHSTSTS(priv));
314 } while ((!(status & SMBHSTSTS_INTR))
315 && (timeout++ < MAX_TIMEOUT));
317 if (timeout > MAX_TIMEOUT)
318 dev_dbg(&priv->pci_dev->dev, "PEC Timeout!\n");
320 outb_p(status, SMBHSTSTS(priv));
323 static int i801_block_transaction_by_block(struct i801_priv *priv,
324 union i2c_smbus_data *data,
325 char read_write, int hwpec)
330 inb_p(SMBHSTCNT(priv)); /* reset the data buffer index */
332 /* Use 32-byte buffer to process this transaction */
333 if (read_write == I2C_SMBUS_WRITE) {
334 len = data->block[0];
335 outb_p(len, SMBHSTDAT0(priv));
336 for (i = 0; i < len; i++)
337 outb_p(data->block[i+1], SMBBLKDAT(priv));
340 status = i801_transaction(priv, I801_BLOCK_DATA | ENABLE_INT9 |
341 I801_PEC_EN * hwpec);
345 if (read_write == I2C_SMBUS_READ) {
346 len = inb_p(SMBHSTDAT0(priv));
347 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
350 data->block[0] = len;
351 for (i = 0; i < len; i++)
352 data->block[i + 1] = inb_p(SMBBLKDAT(priv));
357 static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
358 union i2c_smbus_data *data,
359 char read_write, int command,
368 result = i801_check_pre(priv);
372 len = data->block[0];
374 if (read_write == I2C_SMBUS_WRITE) {
375 outb_p(len, SMBHSTDAT0(priv));
376 outb_p(data->block[1], SMBBLKDAT(priv));
379 for (i = 1; i <= len; i++) {
380 if (i == len && read_write == I2C_SMBUS_READ) {
381 if (command == I2C_SMBUS_I2C_BLOCK_DATA)
382 smbcmd = I801_I2C_BLOCK_LAST;
384 smbcmd = I801_BLOCK_LAST;
386 if (command == I2C_SMBUS_I2C_BLOCK_DATA
387 && read_write == I2C_SMBUS_READ)
388 smbcmd = I801_I2C_BLOCK_DATA;
390 smbcmd = I801_BLOCK_DATA;
392 outb_p(smbcmd | ENABLE_INT9, SMBHSTCNT(priv));
395 outb_p(inb(SMBHSTCNT(priv)) | I801_START,
398 /* We will always wait for a fraction of a second! */
402 status = inb_p(SMBHSTSTS(priv));
403 } while ((!(status & SMBHSTSTS_BYTE_DONE))
404 && (timeout++ < MAX_TIMEOUT));
406 result = i801_check_post(priv, status, timeout > MAX_TIMEOUT);
410 if (i == 1 && read_write == I2C_SMBUS_READ
411 && command != I2C_SMBUS_I2C_BLOCK_DATA) {
412 len = inb_p(SMBHSTDAT0(priv));
413 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
414 dev_err(&priv->pci_dev->dev,
415 "Illegal SMBus block read size %d\n",
418 while (inb_p(SMBHSTSTS(priv)) &
420 outb_p(SMBHSTSTS_BYTE_DONE,
422 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
425 data->block[0] = len;
428 /* Retrieve/store value in SMBBLKDAT */
429 if (read_write == I2C_SMBUS_READ)
430 data->block[i] = inb_p(SMBBLKDAT(priv));
431 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
432 outb_p(data->block[i+1], SMBBLKDAT(priv));
434 /* signals SMBBLKDAT ready */
435 outb_p(SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR, SMBHSTSTS(priv));
441 static int i801_set_block_buffer_mode(struct i801_priv *priv)
443 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_E32B, SMBAUXCTL(priv));
444 if ((inb_p(SMBAUXCTL(priv)) & SMBAUXCTL_E32B) == 0)
449 /* Block transaction function */
450 static int i801_block_transaction(struct i801_priv *priv,
451 union i2c_smbus_data *data, char read_write,
452 int command, int hwpec)
457 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
458 if (read_write == I2C_SMBUS_WRITE) {
459 /* set I2C_EN bit in configuration register */
460 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc);
461 pci_write_config_byte(priv->pci_dev, SMBHSTCFG,
462 hostc | SMBHSTCFG_I2C_EN);
463 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) {
464 dev_err(&priv->pci_dev->dev,
465 "I2C block read is unsupported!\n");
470 if (read_write == I2C_SMBUS_WRITE
471 || command == I2C_SMBUS_I2C_BLOCK_DATA) {
472 if (data->block[0] < 1)
474 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
475 data->block[0] = I2C_SMBUS_BLOCK_MAX;
477 data->block[0] = 32; /* max for SMBus block reads */
480 /* Experience has shown that the block buffer can only be used for
481 SMBus (not I2C) block transactions, even though the datasheet
482 doesn't mention this limitation. */
483 if ((priv->features & FEATURE_BLOCK_BUFFER)
484 && command != I2C_SMBUS_I2C_BLOCK_DATA
485 && i801_set_block_buffer_mode(priv) == 0)
486 result = i801_block_transaction_by_block(priv, data,
489 result = i801_block_transaction_byte_by_byte(priv, data,
493 if (result == 0 && hwpec)
494 i801_wait_hwpec(priv);
496 if (command == I2C_SMBUS_I2C_BLOCK_DATA
497 && read_write == I2C_SMBUS_WRITE) {
498 /* restore saved configuration register value */
499 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc);
504 /* Return negative errno on error. */
505 static s32 i801_access(struct i2c_adapter *adap, u16 addr,
506 unsigned short flags, char read_write, u8 command,
507 int size, union i2c_smbus_data *data)
512 struct i801_priv *priv = i2c_get_adapdata(adap);
514 hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
515 && size != I2C_SMBUS_QUICK
516 && size != I2C_SMBUS_I2C_BLOCK_DATA;
519 case I2C_SMBUS_QUICK:
520 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
525 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
527 if (read_write == I2C_SMBUS_WRITE)
528 outb_p(command, SMBHSTCMD(priv));
531 case I2C_SMBUS_BYTE_DATA:
532 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
534 outb_p(command, SMBHSTCMD(priv));
535 if (read_write == I2C_SMBUS_WRITE)
536 outb_p(data->byte, SMBHSTDAT0(priv));
537 xact = I801_BYTE_DATA;
539 case I2C_SMBUS_WORD_DATA:
540 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
542 outb_p(command, SMBHSTCMD(priv));
543 if (read_write == I2C_SMBUS_WRITE) {
544 outb_p(data->word & 0xff, SMBHSTDAT0(priv));
545 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
547 xact = I801_WORD_DATA;
549 case I2C_SMBUS_BLOCK_DATA:
550 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
552 outb_p(command, SMBHSTCMD(priv));
555 case I2C_SMBUS_I2C_BLOCK_DATA:
556 /* NB: page 240 of ICH5 datasheet shows that the R/#W
557 * bit should be cleared here, even when reading */
558 outb_p((addr & 0x7f) << 1, SMBHSTADD(priv));
559 if (read_write == I2C_SMBUS_READ) {
560 /* NB: page 240 of ICH5 datasheet also shows
561 * that DATA1 is the cmd field when reading */
562 outb_p(command, SMBHSTDAT1(priv));
564 outb_p(command, SMBHSTCMD(priv));
568 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n",
573 if (hwpec) /* enable/disable hardware PEC */
574 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv));
576 outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC),
580 ret = i801_block_transaction(priv, data, read_write, size,
583 ret = i801_transaction(priv, xact | ENABLE_INT9);
585 /* Some BIOSes don't like it when PEC is enabled at reboot or resume
586 time, so we forcibly disable it after every transaction. Turn off
587 E32B for the same reason. */
589 outb_p(inb_p(SMBAUXCTL(priv)) &
590 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
596 if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
599 switch (xact & 0x7f) {
600 case I801_BYTE: /* Result put in SMBHSTDAT0 */
602 data->byte = inb_p(SMBHSTDAT0(priv));
605 data->word = inb_p(SMBHSTDAT0(priv)) +
606 (inb_p(SMBHSTDAT1(priv)) << 8);
613 static u32 i801_func(struct i2c_adapter *adapter)
615 struct i801_priv *priv = i2c_get_adapdata(adapter);
617 return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
618 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
619 I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
620 ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
621 ((priv->features & FEATURE_I2C_BLOCK_READ) ?
622 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0);
625 static const struct i2c_algorithm smbus_algorithm = {
626 .smbus_xfer = i801_access,
627 .functionality = i801_func,
630 static const struct pci_device_id i801_ids[] = {
631 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
632 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
633 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
634 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
635 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
636 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
637 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
638 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
639 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
640 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
641 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
642 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
643 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EP80579_1) },
644 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
645 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
646 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS) },
647 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS) },
648 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS) },
649 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0) },
650 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
651 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
652 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
653 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) },
654 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) },
655 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS) },
656 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMBUS) },
657 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS) },
658 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0) },
659 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1) },
660 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2) },
661 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS) },
662 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS) },
666 MODULE_DEVICE_TABLE(pci, i801_ids);
668 #if defined CONFIG_X86 && defined CONFIG_DMI
669 static unsigned char apanel_addr;
671 /* Scan the system ROM for the signature "FJKEYINF" */
672 static __init const void __iomem *bios_signature(const void __iomem *bios)
675 const unsigned char signature[] = "FJKEYINF";
677 for (offset = 0; offset < 0x10000; offset += 0x10) {
678 if (check_signature(bios + offset, signature,
679 sizeof(signature)-1))
680 return bios + offset;
685 static void __init input_apanel_init(void)
688 const void __iomem *p;
690 bios = ioremap(0xF0000, 0x10000); /* Can't fail */
691 p = bios_signature(bios);
693 /* just use the first address */
694 apanel_addr = readb(p + 8 + 3) >> 1;
699 struct dmi_onboard_device_info {
702 unsigned short i2c_addr;
703 const char *i2c_type;
706 static struct dmi_onboard_device_info __devinitdata dmi_devices[] = {
707 { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
708 { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
709 { "Hades", DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
712 static void __devinit dmi_check_onboard_device(u8 type, const char *name,
713 struct i2c_adapter *adap)
716 struct i2c_board_info info;
718 for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
719 /* & ~0x80, ignore enabled/disabled bit */
720 if ((type & ~0x80) != dmi_devices[i].type)
722 if (strcasecmp(name, dmi_devices[i].name))
725 memset(&info, 0, sizeof(struct i2c_board_info));
726 info.addr = dmi_devices[i].i2c_addr;
727 strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
728 i2c_new_device(adap, &info);
733 /* We use our own function to check for onboard devices instead of
734 dmi_find_device() as some buggy BIOS's have the devices we are interested
735 in marked as disabled */
736 static void __devinit dmi_check_onboard_devices(const struct dmi_header *dm,
744 count = (dm->length - sizeof(struct dmi_header)) / 2;
745 for (i = 0; i < count; i++) {
746 const u8 *d = (char *)(dm + 1) + (i * 2);
747 const char *name = ((char *) dm) + dm->length;
754 while (s > 0 && name[0]) {
755 name += strlen(name) + 1;
758 if (name[0] == 0) /* Bogus string reference */
761 dmi_check_onboard_device(type, name, adap);
765 /* Register optional slaves */
766 static void __devinit i801_probe_optional_slaves(struct i801_priv *priv)
768 /* Only register slaves on main SMBus channel */
769 if (priv->features & FEATURE_IDF)
773 struct i2c_board_info info;
775 memset(&info, 0, sizeof(struct i2c_board_info));
776 info.addr = apanel_addr;
777 strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
778 i2c_new_device(&priv->adapter, &info);
781 if (dmi_name_in_vendors("FUJITSU"))
782 dmi_walk(dmi_check_onboard_devices, &priv->adapter);
785 static void __init input_apanel_init(void) {}
786 static void __devinit i801_probe_optional_slaves(struct i801_priv *priv) {}
787 #endif /* CONFIG_X86 && CONFIG_DMI */
789 static int __devinit i801_probe(struct pci_dev *dev,
790 const struct pci_device_id *id)
794 struct i801_priv *priv;
796 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
800 i2c_set_adapdata(&priv->adapter, priv);
801 priv->adapter.owner = THIS_MODULE;
802 priv->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
803 priv->adapter.algo = &smbus_algorithm;
806 switch (dev->device) {
807 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0:
808 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1:
809 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2:
810 case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0:
811 case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1:
812 case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2:
813 priv->features |= FEATURE_IDF;
816 priv->features |= FEATURE_I2C_BLOCK_READ;
818 case PCI_DEVICE_ID_INTEL_82801DB_3:
819 priv->features |= FEATURE_SMBUS_PEC;
820 priv->features |= FEATURE_BLOCK_BUFFER;
822 case PCI_DEVICE_ID_INTEL_82801CA_3:
823 case PCI_DEVICE_ID_INTEL_82801BA_2:
824 case PCI_DEVICE_ID_INTEL_82801AB_3:
825 case PCI_DEVICE_ID_INTEL_82801AA_3:
829 /* Disable features on user request */
830 for (i = 0; i < ARRAY_SIZE(i801_feature_names); i++) {
831 if (priv->features & disable_features & (1 << i))
832 dev_notice(&dev->dev, "%s disabled by user\n",
833 i801_feature_names[i]);
835 priv->features &= ~disable_features;
837 err = pci_enable_device(dev);
839 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
844 /* Determine the address of the SMBus area */
845 priv->smba = pci_resource_start(dev, SMBBAR);
847 dev_err(&dev->dev, "SMBus base address uninitialized, "
853 err = acpi_check_resource_conflict(&dev->resource[SMBBAR]);
859 err = pci_request_region(dev, SMBBAR, i801_driver.name);
861 dev_err(&dev->dev, "Failed to request SMBus region "
862 "0x%lx-0x%Lx\n", priv->smba,
863 (unsigned long long)pci_resource_end(dev, SMBBAR));
867 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &temp);
868 priv->original_hstcfg = temp;
869 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
870 if (!(temp & SMBHSTCFG_HST_EN)) {
871 dev_info(&dev->dev, "Enabling SMBus device\n");
872 temp |= SMBHSTCFG_HST_EN;
874 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, temp);
876 if (temp & SMBHSTCFG_SMB_SMI_EN)
877 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
879 dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");
881 /* Clear special mode bits */
882 if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
883 outb_p(inb_p(SMBAUXCTL(priv)) &
884 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
886 /* set up the sysfs linkage to our parent device */
887 priv->adapter.dev.parent = &dev->dev;
889 /* Retry up to 3 times on lost arbitration */
890 priv->adapter.retries = 3;
892 snprintf(priv->adapter.name, sizeof(priv->adapter.name),
893 "SMBus I801 adapter at %04lx", priv->smba);
894 err = i2c_add_adapter(&priv->adapter);
896 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
900 i801_probe_optional_slaves(priv);
902 pci_set_drvdata(dev, priv);
906 pci_release_region(dev, SMBBAR);
912 static void __devexit i801_remove(struct pci_dev *dev)
914 struct i801_priv *priv = pci_get_drvdata(dev);
916 i2c_del_adapter(&priv->adapter);
917 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
918 pci_release_region(dev, SMBBAR);
919 pci_set_drvdata(dev, NULL);
922 * do not call pci_disable_device(dev) since it can cause hard hangs on
923 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
928 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
930 struct i801_priv *priv = pci_get_drvdata(dev);
933 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
934 pci_set_power_state(dev, pci_choose_state(dev, mesg));
938 static int i801_resume(struct pci_dev *dev)
940 pci_set_power_state(dev, PCI_D0);
941 pci_restore_state(dev);
942 return pci_enable_device(dev);
945 #define i801_suspend NULL
946 #define i801_resume NULL
949 static struct pci_driver i801_driver = {
950 .name = "i801_smbus",
951 .id_table = i801_ids,
953 .remove = __devexit_p(i801_remove),
954 .suspend = i801_suspend,
955 .resume = i801_resume,
958 static int __init i2c_i801_init(void)
960 if (dmi_name_in_vendors("FUJITSU"))
962 return pci_register_driver(&i801_driver);
965 static void __exit i2c_i801_exit(void)
967 pci_unregister_driver(&i801_driver);
970 MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>, "
971 "Jean Delvare <khali@linux-fr.org>");
972 MODULE_DESCRIPTION("I801 SMBus driver");
973 MODULE_LICENSE("GPL");
975 module_init(i2c_i801_init);
976 module_exit(i2c_i801_exit);