2 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
3 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
5 Copyright (C) 2007 - 2012 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
56 Features supported by this driver:
60 Block process call transaction no
61 I2C block read transaction yes (doesn't use the block buffer)
63 Interrupt processing yes
65 See the file Documentation/i2c/busses/i2c-i801 for details.
68 #include <linux/interrupt.h>
69 #include <linux/module.h>
70 #include <linux/pci.h>
71 #include <linux/kernel.h>
72 #include <linux/stddef.h>
73 #include <linux/delay.h>
74 #include <linux/ioport.h>
75 #include <linux/init.h>
76 #include <linux/i2c.h>
77 #include <linux/acpi.h>
79 #include <linux/dmi.h>
80 #include <linux/slab.h>
81 #include <linux/wait.h>
83 /* I801 SMBus address offsets */
84 #define SMBHSTSTS(p) (0 + (p)->smba)
85 #define SMBHSTCNT(p) (2 + (p)->smba)
86 #define SMBHSTCMD(p) (3 + (p)->smba)
87 #define SMBHSTADD(p) (4 + (p)->smba)
88 #define SMBHSTDAT0(p) (5 + (p)->smba)
89 #define SMBHSTDAT1(p) (6 + (p)->smba)
90 #define SMBBLKDAT(p) (7 + (p)->smba)
91 #define SMBPEC(p) (8 + (p)->smba) /* ICH3 and later */
92 #define SMBAUXSTS(p) (12 + (p)->smba) /* ICH4 and later */
93 #define SMBAUXCTL(p) (13 + (p)->smba) /* ICH4 and later */
95 /* PCI Address Constants */
97 #define SMBPCISTS 0x006
98 #define SMBHSTCFG 0x040
100 /* Host status bits for SMBPCISTS */
101 #define SMBPCISTS_INTS 0x08
103 /* Host configuration bits for SMBHSTCFG */
104 #define SMBHSTCFG_HST_EN 1
105 #define SMBHSTCFG_SMB_SMI_EN 2
106 #define SMBHSTCFG_I2C_EN 4
108 /* Auxiliary control register bits, ICH4+ only */
109 #define SMBAUXCTL_CRC 1
110 #define SMBAUXCTL_E32B 2
113 #define MAX_RETRIES 400
115 /* I801 command constants */
116 #define I801_QUICK 0x00
117 #define I801_BYTE 0x04
118 #define I801_BYTE_DATA 0x08
119 #define I801_WORD_DATA 0x0C
120 #define I801_PROC_CALL 0x10 /* unimplemented */
121 #define I801_BLOCK_DATA 0x14
122 #define I801_I2C_BLOCK_DATA 0x18 /* ICH5 and later */
124 /* I801 Host Control register bits */
125 #define SMBHSTCNT_INTREN 0x01
126 #define SMBHSTCNT_KILL 0x02
127 #define SMBHSTCNT_LAST_BYTE 0x20
128 #define SMBHSTCNT_START 0x40
129 #define SMBHSTCNT_PEC_EN 0x80 /* ICH3 and later */
131 /* I801 Hosts Status register bits */
132 #define SMBHSTSTS_BYTE_DONE 0x80
133 #define SMBHSTSTS_INUSE_STS 0x40
134 #define SMBHSTSTS_SMBALERT_STS 0x20
135 #define SMBHSTSTS_FAILED 0x10
136 #define SMBHSTSTS_BUS_ERR 0x08
137 #define SMBHSTSTS_DEV_ERR 0x04
138 #define SMBHSTSTS_INTR 0x02
139 #define SMBHSTSTS_HOST_BUSY 0x01
141 #define STATUS_ERROR_FLAGS (SMBHSTSTS_FAILED | SMBHSTSTS_BUS_ERR | \
144 #define STATUS_FLAGS (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR | \
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_DH89XXCC_SMBUS 0x2330
156 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
157 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22
160 struct i2c_adapter adapter;
162 unsigned char original_hstcfg;
163 struct pci_dev *pci_dev;
164 unsigned int features;
167 wait_queue_head_t waitq;
171 static struct pci_driver i801_driver;
173 #define FEATURE_SMBUS_PEC (1 << 0)
174 #define FEATURE_BLOCK_BUFFER (1 << 1)
175 #define FEATURE_BLOCK_PROC (1 << 2)
176 #define FEATURE_I2C_BLOCK_READ (1 << 3)
177 #define FEATURE_IRQ (1 << 4)
178 /* Not really a feature, but it's convenient to handle it as such */
179 #define FEATURE_IDF (1 << 15)
181 static const char *i801_feature_names[] = {
184 "Block process call",
189 static unsigned int disable_features;
190 module_param(disable_features, uint, S_IRUGO | S_IWUSR);
191 MODULE_PARM_DESC(disable_features, "Disable selected driver features");
193 /* Make sure the SMBus host is ready to start transmitting.
194 Return 0 if it is, -EBUSY if it is not. */
195 static int i801_check_pre(struct i801_priv *priv)
199 status = inb_p(SMBHSTSTS(priv));
200 if (status & SMBHSTSTS_HOST_BUSY) {
201 dev_err(&priv->pci_dev->dev, "SMBus is busy, can't use it!\n");
205 status &= STATUS_FLAGS;
207 dev_dbg(&priv->pci_dev->dev, "Clearing status flags (%02x)\n",
209 outb_p(status, SMBHSTSTS(priv));
210 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
212 dev_err(&priv->pci_dev->dev,
213 "Failed clearing status flags (%02x)\n",
223 * Convert the status register to an error code, and clear it.
224 * Note that status only contains the bits we want to clear, not the
225 * actual register value.
227 static int i801_check_post(struct i801_priv *priv, int status)
232 * If the SMBus is still busy, we give up
233 * Note: This timeout condition only happens when using polling
234 * transactions. For interrupt operation, NAK/timeout is indicated by
237 if (unlikely(status < 0)) {
238 dev_err(&priv->pci_dev->dev, "Transaction timeout\n");
239 /* try to stop the current command */
240 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");
241 outb_p(inb_p(SMBHSTCNT(priv)) | SMBHSTCNT_KILL,
243 usleep_range(1000, 2000);
244 outb_p(inb_p(SMBHSTCNT(priv)) & (~SMBHSTCNT_KILL),
247 /* Check if it worked */
248 status = inb_p(SMBHSTSTS(priv));
249 if ((status & SMBHSTSTS_HOST_BUSY) ||
250 !(status & SMBHSTSTS_FAILED))
251 dev_err(&priv->pci_dev->dev,
252 "Failed terminating the transaction\n");
253 outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
257 if (status & SMBHSTSTS_FAILED) {
259 dev_err(&priv->pci_dev->dev, "Transaction failed\n");
261 if (status & SMBHSTSTS_DEV_ERR) {
263 dev_dbg(&priv->pci_dev->dev, "No response\n");
265 if (status & SMBHSTSTS_BUS_ERR) {
267 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
270 /* Clear status flags except BYTE_DONE, to be cleared by caller */
271 outb_p(status, SMBHSTSTS(priv));
276 /* Wait for BUSY being cleared and either INTR or an error flag being set */
277 static int i801_wait_intr(struct i801_priv *priv)
282 /* We will always wait for a fraction of a second! */
284 usleep_range(250, 500);
285 status = inb_p(SMBHSTSTS(priv));
286 } while (((status & SMBHSTSTS_HOST_BUSY) ||
287 !(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR))) &&
288 (timeout++ < MAX_RETRIES));
290 if (timeout > MAX_RETRIES) {
291 dev_dbg(&priv->pci_dev->dev, "INTR Timeout!\n");
294 return status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR);
297 /* Wait for either BYTE_DONE or an error flag being set */
298 static int i801_wait_byte_done(struct i801_priv *priv)
303 /* We will always wait for a fraction of a second! */
305 usleep_range(250, 500);
306 status = inb_p(SMBHSTSTS(priv));
307 } while (!(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE)) &&
308 (timeout++ < MAX_RETRIES));
310 if (timeout > MAX_RETRIES) {
311 dev_dbg(&priv->pci_dev->dev, "BYTE_DONE Timeout!\n");
314 return status & STATUS_ERROR_FLAGS;
317 static int i801_transaction(struct i801_priv *priv, int xact)
322 result = i801_check_pre(priv);
326 if (priv->features & FEATURE_IRQ) {
327 outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START,
329 wait_event(priv->waitq, (status = priv->status));
331 return i801_check_post(priv, status);
334 /* the current contents of SMBHSTCNT can be overwritten, since PEC,
335 * SMBSCMD are passed in xact */
336 outb_p(xact | SMBHSTCNT_START, SMBHSTCNT(priv));
338 status = i801_wait_intr(priv);
339 return i801_check_post(priv, status);
342 static int i801_block_transaction_by_block(struct i801_priv *priv,
343 union i2c_smbus_data *data,
344 char read_write, int hwpec)
349 inb_p(SMBHSTCNT(priv)); /* reset the data buffer index */
351 /* Use 32-byte buffer to process this transaction */
352 if (read_write == I2C_SMBUS_WRITE) {
353 len = data->block[0];
354 outb_p(len, SMBHSTDAT0(priv));
355 for (i = 0; i < len; i++)
356 outb_p(data->block[i+1], SMBBLKDAT(priv));
359 status = i801_transaction(priv, I801_BLOCK_DATA |
360 (hwpec ? SMBHSTCNT_PEC_EN : 0));
364 if (read_write == I2C_SMBUS_READ) {
365 len = inb_p(SMBHSTDAT0(priv));
366 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
369 data->block[0] = len;
370 for (i = 0; i < len; i++)
371 data->block[i + 1] = inb_p(SMBBLKDAT(priv));
377 * i801 signals transaction completion with one of these interrupts:
379 * DEV_ERR - Invalid command, NAK or communication timeout
380 * BUS_ERR - SMI# transaction collision
381 * FAILED - transaction was canceled due to a KILL request
382 * When any of these occur, update ->status and wake up the waitq.
383 * ->status must be cleared before kicking off the next transaction.
385 static irqreturn_t i801_isr(int irq, void *dev_id)
387 struct i801_priv *priv = dev_id;
391 /* Confirm this is our interrupt */
392 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists);
393 if (!(pcists & SMBPCISTS_INTS))
396 status = inb_p(SMBHSTSTS(priv));
398 dev_dbg(&priv->pci_dev->dev, "irq: status = %02x\n", status);
401 * Clear irq sources and report transaction result.
402 * ->status must be cleared before the next transaction is started.
404 status &= SMBHSTSTS_INTR | STATUS_ERROR_FLAGS;
406 outb_p(status, SMBHSTSTS(priv));
407 priv->status |= status;
408 wake_up(&priv->waitq);
415 * For "byte-by-byte" block transactions:
416 * I2C write uses cmd=I801_BLOCK_DATA, I2C_EN=1
417 * I2C read uses cmd=I801_I2C_BLOCK_DATA
419 static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
420 union i2c_smbus_data *data,
421 char read_write, int command,
429 result = i801_check_pre(priv);
433 len = data->block[0];
435 if (read_write == I2C_SMBUS_WRITE) {
436 outb_p(len, SMBHSTDAT0(priv));
437 outb_p(data->block[1], SMBBLKDAT(priv));
440 if (command == I2C_SMBUS_I2C_BLOCK_DATA &&
441 read_write == I2C_SMBUS_READ)
442 smbcmd = I801_I2C_BLOCK_DATA;
444 smbcmd = I801_BLOCK_DATA;
446 for (i = 1; i <= len; i++) {
447 if (i == len && read_write == I2C_SMBUS_READ)
448 smbcmd |= SMBHSTCNT_LAST_BYTE;
449 outb_p(smbcmd, SMBHSTCNT(priv));
452 outb_p(inb(SMBHSTCNT(priv)) | SMBHSTCNT_START,
455 status = i801_wait_byte_done(priv);
459 if (i == 1 && read_write == I2C_SMBUS_READ
460 && command != I2C_SMBUS_I2C_BLOCK_DATA) {
461 len = inb_p(SMBHSTDAT0(priv));
462 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
463 dev_err(&priv->pci_dev->dev,
464 "Illegal SMBus block read size %d\n",
467 while (inb_p(SMBHSTSTS(priv)) &
469 outb_p(SMBHSTSTS_BYTE_DONE,
471 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
474 data->block[0] = len;
477 /* Retrieve/store value in SMBBLKDAT */
478 if (read_write == I2C_SMBUS_READ)
479 data->block[i] = inb_p(SMBBLKDAT(priv));
480 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
481 outb_p(data->block[i+1], SMBBLKDAT(priv));
483 /* signals SMBBLKDAT ready */
484 outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
487 status = i801_wait_intr(priv);
489 return i801_check_post(priv, status);
492 static int i801_set_block_buffer_mode(struct i801_priv *priv)
494 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_E32B, SMBAUXCTL(priv));
495 if ((inb_p(SMBAUXCTL(priv)) & SMBAUXCTL_E32B) == 0)
500 /* Block transaction function */
501 static int i801_block_transaction(struct i801_priv *priv,
502 union i2c_smbus_data *data, char read_write,
503 int command, int hwpec)
508 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
509 if (read_write == I2C_SMBUS_WRITE) {
510 /* set I2C_EN bit in configuration register */
511 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc);
512 pci_write_config_byte(priv->pci_dev, SMBHSTCFG,
513 hostc | SMBHSTCFG_I2C_EN);
514 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) {
515 dev_err(&priv->pci_dev->dev,
516 "I2C block read is unsupported!\n");
521 if (read_write == I2C_SMBUS_WRITE
522 || command == I2C_SMBUS_I2C_BLOCK_DATA) {
523 if (data->block[0] < 1)
525 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
526 data->block[0] = I2C_SMBUS_BLOCK_MAX;
528 data->block[0] = 32; /* max for SMBus block reads */
531 /* Experience has shown that the block buffer can only be used for
532 SMBus (not I2C) block transactions, even though the datasheet
533 doesn't mention this limitation. */
534 if ((priv->features & FEATURE_BLOCK_BUFFER)
535 && command != I2C_SMBUS_I2C_BLOCK_DATA
536 && i801_set_block_buffer_mode(priv) == 0)
537 result = i801_block_transaction_by_block(priv, data,
540 result = i801_block_transaction_byte_by_byte(priv, data,
544 if (command == I2C_SMBUS_I2C_BLOCK_DATA
545 && read_write == I2C_SMBUS_WRITE) {
546 /* restore saved configuration register value */
547 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc);
552 /* Return negative errno on error. */
553 static s32 i801_access(struct i2c_adapter *adap, u16 addr,
554 unsigned short flags, char read_write, u8 command,
555 int size, union i2c_smbus_data *data)
560 struct i801_priv *priv = i2c_get_adapdata(adap);
562 hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
563 && size != I2C_SMBUS_QUICK
564 && size != I2C_SMBUS_I2C_BLOCK_DATA;
567 case I2C_SMBUS_QUICK:
568 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
573 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
575 if (read_write == I2C_SMBUS_WRITE)
576 outb_p(command, SMBHSTCMD(priv));
579 case I2C_SMBUS_BYTE_DATA:
580 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
582 outb_p(command, SMBHSTCMD(priv));
583 if (read_write == I2C_SMBUS_WRITE)
584 outb_p(data->byte, SMBHSTDAT0(priv));
585 xact = I801_BYTE_DATA;
587 case I2C_SMBUS_WORD_DATA:
588 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
590 outb_p(command, SMBHSTCMD(priv));
591 if (read_write == I2C_SMBUS_WRITE) {
592 outb_p(data->word & 0xff, SMBHSTDAT0(priv));
593 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
595 xact = I801_WORD_DATA;
597 case I2C_SMBUS_BLOCK_DATA:
598 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
600 outb_p(command, SMBHSTCMD(priv));
603 case I2C_SMBUS_I2C_BLOCK_DATA:
604 /* NB: page 240 of ICH5 datasheet shows that the R/#W
605 * bit should be cleared here, even when reading */
606 outb_p((addr & 0x7f) << 1, SMBHSTADD(priv));
607 if (read_write == I2C_SMBUS_READ) {
608 /* NB: page 240 of ICH5 datasheet also shows
609 * that DATA1 is the cmd field when reading */
610 outb_p(command, SMBHSTDAT1(priv));
612 outb_p(command, SMBHSTCMD(priv));
616 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n",
621 if (hwpec) /* enable/disable hardware PEC */
622 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv));
624 outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC),
628 ret = i801_block_transaction(priv, data, read_write, size,
631 ret = i801_transaction(priv, xact);
633 /* Some BIOSes don't like it when PEC is enabled at reboot or resume
634 time, so we forcibly disable it after every transaction. Turn off
635 E32B for the same reason. */
637 outb_p(inb_p(SMBAUXCTL(priv)) &
638 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
644 if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
647 switch (xact & 0x7f) {
648 case I801_BYTE: /* Result put in SMBHSTDAT0 */
650 data->byte = inb_p(SMBHSTDAT0(priv));
653 data->word = inb_p(SMBHSTDAT0(priv)) +
654 (inb_p(SMBHSTDAT1(priv)) << 8);
661 static u32 i801_func(struct i2c_adapter *adapter)
663 struct i801_priv *priv = i2c_get_adapdata(adapter);
665 return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
666 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
667 I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
668 ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
669 ((priv->features & FEATURE_I2C_BLOCK_READ) ?
670 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0);
673 static const struct i2c_algorithm smbus_algorithm = {
674 .smbus_xfer = i801_access,
675 .functionality = i801_func,
678 static DEFINE_PCI_DEVICE_TABLE(i801_ids) = {
679 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
680 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
681 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
682 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
683 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
684 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
685 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
686 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
687 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
688 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
689 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
690 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
691 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EP80579_1) },
692 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
693 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
694 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS) },
695 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS) },
696 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS) },
697 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0) },
698 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
699 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
700 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
701 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) },
702 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) },
706 MODULE_DEVICE_TABLE(pci, i801_ids);
708 #if defined CONFIG_X86 && defined CONFIG_DMI
709 static unsigned char apanel_addr;
711 /* Scan the system ROM for the signature "FJKEYINF" */
712 static __init const void __iomem *bios_signature(const void __iomem *bios)
715 const unsigned char signature[] = "FJKEYINF";
717 for (offset = 0; offset < 0x10000; offset += 0x10) {
718 if (check_signature(bios + offset, signature,
719 sizeof(signature)-1))
720 return bios + offset;
725 static void __init input_apanel_init(void)
728 const void __iomem *p;
730 bios = ioremap(0xF0000, 0x10000); /* Can't fail */
731 p = bios_signature(bios);
733 /* just use the first address */
734 apanel_addr = readb(p + 8 + 3) >> 1;
739 struct dmi_onboard_device_info {
742 unsigned short i2c_addr;
743 const char *i2c_type;
746 static struct dmi_onboard_device_info __devinitdata dmi_devices[] = {
747 { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
748 { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
749 { "Hades", DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
752 static void __devinit dmi_check_onboard_device(u8 type, const char *name,
753 struct i2c_adapter *adap)
756 struct i2c_board_info info;
758 for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
759 /* & ~0x80, ignore enabled/disabled bit */
760 if ((type & ~0x80) != dmi_devices[i].type)
762 if (strcasecmp(name, dmi_devices[i].name))
765 memset(&info, 0, sizeof(struct i2c_board_info));
766 info.addr = dmi_devices[i].i2c_addr;
767 strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
768 i2c_new_device(adap, &info);
773 /* We use our own function to check for onboard devices instead of
774 dmi_find_device() as some buggy BIOS's have the devices we are interested
775 in marked as disabled */
776 static void __devinit dmi_check_onboard_devices(const struct dmi_header *dm,
784 count = (dm->length - sizeof(struct dmi_header)) / 2;
785 for (i = 0; i < count; i++) {
786 const u8 *d = (char *)(dm + 1) + (i * 2);
787 const char *name = ((char *) dm) + dm->length;
794 while (s > 0 && name[0]) {
795 name += strlen(name) + 1;
798 if (name[0] == 0) /* Bogus string reference */
801 dmi_check_onboard_device(type, name, adap);
805 /* Register optional slaves */
806 static void __devinit i801_probe_optional_slaves(struct i801_priv *priv)
808 /* Only register slaves on main SMBus channel */
809 if (priv->features & FEATURE_IDF)
813 struct i2c_board_info info;
815 memset(&info, 0, sizeof(struct i2c_board_info));
816 info.addr = apanel_addr;
817 strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
818 i2c_new_device(&priv->adapter, &info);
821 if (dmi_name_in_vendors("FUJITSU"))
822 dmi_walk(dmi_check_onboard_devices, &priv->adapter);
825 static void __init input_apanel_init(void) {}
826 static void __devinit i801_probe_optional_slaves(struct i801_priv *priv) {}
827 #endif /* CONFIG_X86 && CONFIG_DMI */
829 static int __devinit i801_probe(struct pci_dev *dev,
830 const struct pci_device_id *id)
834 struct i801_priv *priv;
836 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
840 i2c_set_adapdata(&priv->adapter, priv);
841 priv->adapter.owner = THIS_MODULE;
842 priv->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
843 priv->adapter.algo = &smbus_algorithm;
846 switch (dev->device) {
847 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0:
848 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1:
849 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2:
850 priv->features |= FEATURE_IDF;
853 priv->features |= FEATURE_I2C_BLOCK_READ;
855 case PCI_DEVICE_ID_INTEL_82801DB_3:
856 priv->features |= FEATURE_SMBUS_PEC;
857 priv->features |= FEATURE_BLOCK_BUFFER;
859 case PCI_DEVICE_ID_INTEL_82801CA_3:
860 case PCI_DEVICE_ID_INTEL_82801BA_2:
861 case PCI_DEVICE_ID_INTEL_82801AB_3:
862 case PCI_DEVICE_ID_INTEL_82801AA_3:
866 /* IRQ processing tested on CougarPoint PCH, ICH5, ICH7-M and ICH10 */
867 if (dev->device == PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS ||
868 dev->device == PCI_DEVICE_ID_INTEL_82801EB_3 ||
869 dev->device == PCI_DEVICE_ID_INTEL_ICH7_17 ||
870 dev->device == PCI_DEVICE_ID_INTEL_ICH8_5 ||
871 dev->device == PCI_DEVICE_ID_INTEL_ICH9_6 ||
872 dev->device == PCI_DEVICE_ID_INTEL_ICH10_4 ||
873 dev->device == PCI_DEVICE_ID_INTEL_ICH10_5)
874 priv->features |= FEATURE_IRQ;
876 /* Disable features on user request */
877 for (i = 0; i < ARRAY_SIZE(i801_feature_names); i++) {
878 if (priv->features & disable_features & (1 << i))
879 dev_notice(&dev->dev, "%s disabled by user\n",
880 i801_feature_names[i]);
882 priv->features &= ~disable_features;
884 err = pci_enable_device(dev);
886 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
891 /* Determine the address of the SMBus area */
892 priv->smba = pci_resource_start(dev, SMBBAR);
894 dev_err(&dev->dev, "SMBus base address uninitialized, "
900 err = acpi_check_resource_conflict(&dev->resource[SMBBAR]);
906 err = pci_request_region(dev, SMBBAR, i801_driver.name);
908 dev_err(&dev->dev, "Failed to request SMBus region "
909 "0x%lx-0x%Lx\n", priv->smba,
910 (unsigned long long)pci_resource_end(dev, SMBBAR));
914 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &temp);
915 priv->original_hstcfg = temp;
916 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
917 if (!(temp & SMBHSTCFG_HST_EN)) {
918 dev_info(&dev->dev, "Enabling SMBus device\n");
919 temp |= SMBHSTCFG_HST_EN;
921 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, temp);
923 if (temp & SMBHSTCFG_SMB_SMI_EN) {
924 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
925 /* Disable SMBus interrupt feature if SMBus using SMI# */
926 priv->features &= ~FEATURE_IRQ;
929 /* Clear special mode bits */
930 if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
931 outb_p(inb_p(SMBAUXCTL(priv)) &
932 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
934 if (priv->features & FEATURE_IRQ) {
935 init_waitqueue_head(&priv->waitq);
937 err = request_irq(dev->irq, i801_isr, IRQF_SHARED,
938 i801_driver.name, priv);
940 dev_err(&dev->dev, "Failed to allocate irq %d: %d\n",
944 dev_info(&dev->dev, "SMBus using PCI Interrupt\n");
947 /* set up the sysfs linkage to our parent device */
948 priv->adapter.dev.parent = &dev->dev;
950 /* Retry up to 3 times on lost arbitration */
951 priv->adapter.retries = 3;
953 snprintf(priv->adapter.name, sizeof(priv->adapter.name),
954 "SMBus I801 adapter at %04lx", priv->smba);
955 err = i2c_add_adapter(&priv->adapter);
957 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
961 i801_probe_optional_slaves(priv);
963 pci_set_drvdata(dev, priv);
968 if (priv->features & FEATURE_IRQ)
969 free_irq(dev->irq, priv);
971 pci_release_region(dev, SMBBAR);
977 static void __devexit i801_remove(struct pci_dev *dev)
979 struct i801_priv *priv = pci_get_drvdata(dev);
981 i2c_del_adapter(&priv->adapter);
982 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
984 if (priv->features & FEATURE_IRQ)
985 free_irq(dev->irq, priv);
986 pci_release_region(dev, SMBBAR);
988 pci_set_drvdata(dev, NULL);
991 * do not call pci_disable_device(dev) since it can cause hard hangs on
992 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
997 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
999 struct i801_priv *priv = pci_get_drvdata(dev);
1001 pci_save_state(dev);
1002 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1003 pci_set_power_state(dev, pci_choose_state(dev, mesg));
1007 static int i801_resume(struct pci_dev *dev)
1009 pci_set_power_state(dev, PCI_D0);
1010 pci_restore_state(dev);
1011 return pci_enable_device(dev);
1014 #define i801_suspend NULL
1015 #define i801_resume NULL
1018 static struct pci_driver i801_driver = {
1019 .name = "i801_smbus",
1020 .id_table = i801_ids,
1021 .probe = i801_probe,
1022 .remove = __devexit_p(i801_remove),
1023 .suspend = i801_suspend,
1024 .resume = i801_resume,
1027 static int __init i2c_i801_init(void)
1029 if (dmi_name_in_vendors("FUJITSU"))
1030 input_apanel_init();
1031 return pci_register_driver(&i801_driver);
1034 static void __exit i2c_i801_exit(void)
1036 pci_unregister_driver(&i801_driver);
1039 MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>, "
1040 "Jean Delvare <khali@linux-fr.org>");
1041 MODULE_DESCRIPTION("I801 SMBus driver");
1042 MODULE_LICENSE("GPL");
1044 module_init(i2c_i801_init);
1045 module_exit(i2c_i801_exit);