2 i2c-i801.c - Part of lm_sensors, Linux kernel modules for hardware
4 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
5 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 SUPPORTED DEVICES PCI ID
29 82801DB 24C3 (HW PEC supported)
30 82801EB 24D3 (HW PEC supported)
37 This driver supports several versions of Intel's I/O Controller Hubs (ICH).
38 For SMBus support, they are similar to the PIIX4 and are part
39 of Intel's '810' and other chipsets.
40 See the file Documentation/i2c/busses/i2c-i801 for details.
41 I2C Block Read and Process Call are not supported.
44 /* Note: we assume there can only be one I801, with one SMBus interface */
46 #include <linux/module.h>
47 #include <linux/pci.h>
48 #include <linux/kernel.h>
49 #include <linux/stddef.h>
50 #include <linux/delay.h>
51 #include <linux/ioport.h>
52 #include <linux/init.h>
53 #include <linux/i2c.h>
56 /* I801 SMBus address offsets */
57 #define SMBHSTSTS (0 + i801_smba)
58 #define SMBHSTCNT (2 + i801_smba)
59 #define SMBHSTCMD (3 + i801_smba)
60 #define SMBHSTADD (4 + i801_smba)
61 #define SMBHSTDAT0 (5 + i801_smba)
62 #define SMBHSTDAT1 (6 + i801_smba)
63 #define SMBBLKDAT (7 + i801_smba)
64 #define SMBPEC (8 + i801_smba) /* ICH4 only */
65 #define SMBAUXSTS (12 + i801_smba) /* ICH4 only */
66 #define SMBAUXCTL (13 + i801_smba) /* ICH4 only */
68 /* PCI Address Constants */
70 #define SMBHSTCFG 0x040
72 /* Host configuration bits for SMBHSTCFG */
73 #define SMBHSTCFG_HST_EN 1
74 #define SMBHSTCFG_SMB_SMI_EN 2
75 #define SMBHSTCFG_I2C_EN 4
77 /* Auxillary control register bits, ICH4+ only */
78 #define SMBAUXCTL_CRC 1
79 #define SMBAUXCTL_E32B 2
81 /* kill bit for SMBHSTCNT */
82 #define SMBHSTCNT_KILL 2
85 #define MAX_TIMEOUT 100
86 #define ENABLE_INT9 0 /* set to 0x01 to enable - untested */
88 /* I801 command constants */
89 #define I801_QUICK 0x00
90 #define I801_BYTE 0x04
91 #define I801_BYTE_DATA 0x08
92 #define I801_WORD_DATA 0x0C
93 #define I801_PROC_CALL 0x10 /* later chips only, unimplemented */
94 #define I801_BLOCK_DATA 0x14
95 #define I801_I2C_BLOCK_DATA 0x18 /* unimplemented */
96 #define I801_BLOCK_LAST 0x34
97 #define I801_I2C_BLOCK_LAST 0x38 /* unimplemented */
98 #define I801_START 0x40
99 #define I801_PEC_EN 0x80 /* ICH4 only */
101 /* I801 Hosts Status register bits */
102 #define SMBHSTSTS_BYTE_DONE 0x80
103 #define SMBHSTSTS_INUSE_STS 0x40
104 #define SMBHSTSTS_SMBALERT_STS 0x20
105 #define SMBHSTSTS_FAILED 0x10
106 #define SMBHSTSTS_BUS_ERR 0x08
107 #define SMBHSTSTS_DEV_ERR 0x04
108 #define SMBHSTSTS_INTR 0x02
109 #define SMBHSTSTS_HOST_BUSY 0x01
111 static unsigned long i801_smba;
112 static unsigned char i801_original_hstcfg;
113 static struct pci_driver i801_driver;
114 static struct pci_dev *I801_dev;
117 static int i801_transaction(int xact)
123 dev_dbg(&I801_dev->dev, "Transaction (pre): CNT=%02x, CMD=%02x, "
124 "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT),
125 inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0),
128 /* Make sure the SMBus host is ready to start transmitting */
129 /* 0x1f = Failed, Bus_Err, Dev_Err, Intr, Host_Busy */
130 if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
131 dev_dbg(&I801_dev->dev, "SMBus busy (%02x). Resetting...\n",
133 outb_p(temp, SMBHSTSTS);
134 if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
135 dev_dbg(&I801_dev->dev, "Failed! (%02x)\n", temp);
138 dev_dbg(&I801_dev->dev, "Successful!\n");
142 /* the current contents of SMBHSTCNT can be overwritten, since PEC,
143 * INTREN, SMBSCMD are passed in xact */
144 outb_p(xact | I801_START, SMBHSTCNT);
146 /* We will always wait for a fraction of a second! */
149 temp = inb_p(SMBHSTSTS);
150 } while ((temp & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT));
152 /* If the SMBus is still busy, we give up */
153 if (timeout >= MAX_TIMEOUT) {
154 dev_dbg(&I801_dev->dev, "SMBus Timeout!\n");
156 /* try to stop the current command */
157 dev_dbg(&I801_dev->dev, "Terminating the current operation\n");
158 outb_p(inb_p(SMBHSTCNT) | SMBHSTCNT_KILL, SMBHSTCNT);
160 outb_p(inb_p(SMBHSTCNT) & (~SMBHSTCNT_KILL), SMBHSTCNT);
163 if (temp & SMBHSTSTS_FAILED) {
165 dev_dbg(&I801_dev->dev, "Error: Failed bus transaction\n");
168 if (temp & SMBHSTSTS_BUS_ERR) {
170 dev_err(&I801_dev->dev, "Bus collision! SMBus may be locked "
171 "until next hard reset. (sorry!)\n");
172 /* Clock stops and slave is stuck in mid-transmission */
175 if (temp & SMBHSTSTS_DEV_ERR) {
177 dev_dbg(&I801_dev->dev, "Error: no response!\n");
180 if ((inb_p(SMBHSTSTS) & 0x1f) != 0x00)
181 outb_p(inb(SMBHSTSTS), SMBHSTSTS);
183 if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
184 dev_dbg(&I801_dev->dev, "Failed reset at end of transaction "
187 dev_dbg(&I801_dev->dev, "Transaction (post): CNT=%02x, CMD=%02x, "
188 "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT),
189 inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0),
194 /* wait for INTR bit as advised by Intel */
195 static void i801_wait_hwpec(void)
202 temp = inb_p(SMBHSTSTS);
203 } while ((!(temp & SMBHSTSTS_INTR))
204 && (timeout++ < MAX_TIMEOUT));
206 if (timeout >= MAX_TIMEOUT) {
207 dev_dbg(&I801_dev->dev, "PEC Timeout!\n");
209 outb_p(temp, SMBHSTSTS);
212 static int i801_block_transaction_by_block(union i2c_smbus_data *data,
213 char read_write, int hwpec)
217 inb_p(SMBHSTCNT); /* reset the data buffer index */
219 /* Use 32-byte buffer to process this transaction */
220 if (read_write == I2C_SMBUS_WRITE) {
221 len = data->block[0];
222 outb_p(len, SMBHSTDAT0);
223 for (i = 0; i < len; i++)
224 outb_p(data->block[i+1], SMBBLKDAT);
227 if (i801_transaction(I801_BLOCK_DATA | ENABLE_INT9 |
228 I801_PEC_EN * hwpec))
231 if (read_write == I2C_SMBUS_READ) {
232 len = inb_p(SMBHSTDAT0);
233 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
236 data->block[0] = len;
237 for (i = 0; i < len; i++)
238 data->block[i + 1] = inb_p(SMBBLKDAT);
243 static int i801_block_transaction_byte_by_byte(union i2c_smbus_data *data,
244 char read_write, int hwpec)
251 unsigned char errmask;
253 len = data->block[0];
255 if (read_write == I2C_SMBUS_WRITE) {
256 outb_p(len, SMBHSTDAT0);
257 outb_p(data->block[1], SMBBLKDAT);
260 for (i = 1; i <= len; i++) {
261 if (i == len && read_write == I2C_SMBUS_READ)
262 smbcmd = I801_BLOCK_LAST;
264 smbcmd = I801_BLOCK_DATA;
265 outb_p(smbcmd | ENABLE_INT9, SMBHSTCNT);
267 dev_dbg(&I801_dev->dev, "Block (pre %d): CNT=%02x, CMD=%02x, "
268 "ADD=%02x, DAT0=%02x, BLKDAT=%02x\n", i,
269 inb_p(SMBHSTCNT), inb_p(SMBHSTCMD), inb_p(SMBHSTADD),
270 inb_p(SMBHSTDAT0), inb_p(SMBBLKDAT));
272 /* Make sure the SMBus host is ready to start transmitting */
273 temp = inb_p(SMBHSTSTS);
275 /* Erronenous conditions before transaction:
276 * Byte_Done, Failed, Bus_Err, Dev_Err, Intr, Host_Busy */
279 /* Erronenous conditions during transaction:
280 * Failed, Bus_Err, Dev_Err, Intr */
283 if (temp & errmask) {
284 dev_dbg(&I801_dev->dev, "SMBus busy (%02x). "
285 "Resetting...\n", temp);
286 outb_p(temp, SMBHSTSTS);
287 if (((temp = inb_p(SMBHSTSTS)) & errmask) != 0x00) {
288 dev_err(&I801_dev->dev,
289 "Reset failed! (%02x)\n", temp);
293 /* if die in middle of block transaction, fail */
298 outb_p(inb(SMBHSTCNT) | I801_START, SMBHSTCNT);
300 /* We will always wait for a fraction of a second! */
304 temp = inb_p(SMBHSTSTS);
306 while ((!(temp & SMBHSTSTS_BYTE_DONE))
307 && (timeout++ < MAX_TIMEOUT));
309 /* If the SMBus is still busy, we give up */
310 if (timeout >= MAX_TIMEOUT) {
311 /* try to stop the current command */
312 dev_dbg(&I801_dev->dev, "Terminating the current "
314 outb_p(inb_p(SMBHSTCNT) | SMBHSTCNT_KILL, SMBHSTCNT);
316 outb_p(inb_p(SMBHSTCNT) & (~SMBHSTCNT_KILL),
319 dev_dbg(&I801_dev->dev, "SMBus Timeout!\n");
322 if (temp & SMBHSTSTS_FAILED) {
324 dev_dbg(&I801_dev->dev,
325 "Error: Failed bus transaction\n");
326 } else if (temp & SMBHSTSTS_BUS_ERR) {
328 dev_err(&I801_dev->dev, "Bus collision!\n");
329 } else if (temp & SMBHSTSTS_DEV_ERR) {
331 dev_dbg(&I801_dev->dev, "Error: no response!\n");
334 if (i == 1 && read_write == I2C_SMBUS_READ) {
335 len = inb_p(SMBHSTDAT0);
336 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
338 data->block[0] = len;
341 /* Retrieve/store value in SMBBLKDAT */
342 if (read_write == I2C_SMBUS_READ)
343 data->block[i] = inb_p(SMBBLKDAT);
344 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
345 outb_p(data->block[i+1], SMBBLKDAT);
346 if ((temp & 0x9e) != 0x00)
347 outb_p(temp, SMBHSTSTS); /* signals SMBBLKDAT ready */
349 if ((temp = (0x1e & inb_p(SMBHSTSTS))) != 0x00) {
350 dev_dbg(&I801_dev->dev,
351 "Bad status (%02x) at end of transaction\n",
354 dev_dbg(&I801_dev->dev, "Block (post %d): CNT=%02x, CMD=%02x, "
355 "ADD=%02x, DAT0=%02x, BLKDAT=%02x\n", i,
356 inb_p(SMBHSTCNT), inb_p(SMBHSTCMD), inb_p(SMBHSTADD),
357 inb_p(SMBHSTDAT0), inb_p(SMBBLKDAT));
365 static int i801_set_block_buffer_mode(void)
367 outb_p(inb_p(SMBAUXCTL) | SMBAUXCTL_E32B, SMBAUXCTL);
368 if ((inb_p(SMBAUXCTL) & SMBAUXCTL_E32B) == 0)
373 /* Block transaction function */
374 static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
375 int command, int hwpec)
380 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
381 if (read_write == I2C_SMBUS_WRITE) {
382 /* set I2C_EN bit in configuration register */
383 pci_read_config_byte(I801_dev, SMBHSTCFG, &hostc);
384 pci_write_config_byte(I801_dev, SMBHSTCFG,
385 hostc | SMBHSTCFG_I2C_EN);
387 dev_err(&I801_dev->dev,
388 "I2C_SMBUS_I2C_BLOCK_READ not DB!\n");
393 if (read_write == I2C_SMBUS_WRITE) {
394 if (data->block[0] < 1)
396 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
397 data->block[0] = I2C_SMBUS_BLOCK_MAX;
399 data->block[0] = 32; /* max for reads */
402 if (isich4 && i801_set_block_buffer_mode() == 0 )
403 result = i801_block_transaction_by_block(data, read_write,
406 result = i801_block_transaction_byte_by_byte(data, read_write,
409 if (result == 0 && hwpec)
412 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
413 /* restore saved configuration register value */
414 pci_write_config_byte(I801_dev, SMBHSTCFG, hostc);
419 /* Return -1 on error. */
420 static s32 i801_access(struct i2c_adapter * adap, u16 addr,
421 unsigned short flags, char read_write, u8 command,
422 int size, union i2c_smbus_data * data)
428 hwpec = isich4 && (flags & I2C_CLIENT_PEC)
429 && size != I2C_SMBUS_QUICK
430 && size != I2C_SMBUS_I2C_BLOCK_DATA;
433 case I2C_SMBUS_QUICK:
434 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
439 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
441 if (read_write == I2C_SMBUS_WRITE)
442 outb_p(command, SMBHSTCMD);
445 case I2C_SMBUS_BYTE_DATA:
446 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
448 outb_p(command, SMBHSTCMD);
449 if (read_write == I2C_SMBUS_WRITE)
450 outb_p(data->byte, SMBHSTDAT0);
451 xact = I801_BYTE_DATA;
453 case I2C_SMBUS_WORD_DATA:
454 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
456 outb_p(command, SMBHSTCMD);
457 if (read_write == I2C_SMBUS_WRITE) {
458 outb_p(data->word & 0xff, SMBHSTDAT0);
459 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1);
461 xact = I801_WORD_DATA;
463 case I2C_SMBUS_BLOCK_DATA:
464 case I2C_SMBUS_I2C_BLOCK_DATA:
465 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
467 outb_p(command, SMBHSTCMD);
470 case I2C_SMBUS_PROC_CALL:
472 dev_err(&I801_dev->dev, "Unsupported transaction %d\n", size);
476 if (hwpec) /* enable/disable hardware PEC */
477 outb_p(inb_p(SMBAUXCTL) | SMBAUXCTL_CRC, SMBAUXCTL);
479 outb_p(inb_p(SMBAUXCTL) & (~SMBAUXCTL_CRC), SMBAUXCTL);
482 ret = i801_block_transaction(data, read_write, size, hwpec);
484 ret = i801_transaction(xact | ENABLE_INT9);
486 /* Some BIOSes don't like it when PEC is enabled at reboot or resume
487 time, so we forcibly disable it after every transaction. Turn off
488 E32B for the same reason. */
490 outb_p(inb_p(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B),
497 if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
500 switch (xact & 0x7f) {
501 case I801_BYTE: /* Result put in SMBHSTDAT0 */
503 data->byte = inb_p(SMBHSTDAT0);
506 data->word = inb_p(SMBHSTDAT0) + (inb_p(SMBHSTDAT1) << 8);
513 static u32 i801_func(struct i2c_adapter *adapter)
515 return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
516 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
517 I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK
518 | (isich4 ? I2C_FUNC_SMBUS_HWPEC_CALC : 0);
521 static const struct i2c_algorithm smbus_algorithm = {
522 .smbus_xfer = i801_access,
523 .functionality = i801_func,
526 static struct i2c_adapter i801_adapter = {
527 .owner = THIS_MODULE,
528 .id = I2C_HW_SMBUS_I801,
529 .class = I2C_CLASS_HWMON,
530 .algo = &smbus_algorithm,
533 static struct pci_device_id i801_ids[] = {
534 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
535 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
536 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
537 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
538 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
539 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
540 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
541 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
542 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
543 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
544 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
545 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
549 MODULE_DEVICE_TABLE (pci, i801_ids);
551 static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
557 switch (dev->device) {
558 case PCI_DEVICE_ID_INTEL_82801DB_3:
559 case PCI_DEVICE_ID_INTEL_82801EB_3:
560 case PCI_DEVICE_ID_INTEL_ESB_4:
561 case PCI_DEVICE_ID_INTEL_ICH6_16:
562 case PCI_DEVICE_ID_INTEL_ICH7_17:
563 case PCI_DEVICE_ID_INTEL_ESB2_17:
564 case PCI_DEVICE_ID_INTEL_ICH8_5:
565 case PCI_DEVICE_ID_INTEL_ICH9_6:
572 err = pci_enable_device(dev);
574 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
579 /* Determine the address of the SMBus area */
580 i801_smba = pci_resource_start(dev, SMBBAR);
582 dev_err(&dev->dev, "SMBus base address uninitialized, "
588 err = pci_request_region(dev, SMBBAR, i801_driver.name);
590 dev_err(&dev->dev, "Failed to request SMBus region "
591 "0x%lx-0x%Lx\n", i801_smba,
592 (unsigned long long)pci_resource_end(dev, SMBBAR));
596 pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
597 i801_original_hstcfg = temp;
598 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
599 if (!(temp & SMBHSTCFG_HST_EN)) {
600 dev_info(&dev->dev, "Enabling SMBus device\n");
601 temp |= SMBHSTCFG_HST_EN;
603 pci_write_config_byte(I801_dev, SMBHSTCFG, temp);
605 if (temp & SMBHSTCFG_SMB_SMI_EN)
606 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
608 dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");
610 /* set up the sysfs linkage to our parent device */
611 i801_adapter.dev.parent = &dev->dev;
613 snprintf(i801_adapter.name, sizeof(i801_adapter.name),
614 "SMBus I801 adapter at %04lx", i801_smba);
615 err = i2c_add_adapter(&i801_adapter);
617 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
623 pci_release_region(dev, SMBBAR);
628 static void __devexit i801_remove(struct pci_dev *dev)
630 i2c_del_adapter(&i801_adapter);
631 pci_write_config_byte(I801_dev, SMBHSTCFG, i801_original_hstcfg);
632 pci_release_region(dev, SMBBAR);
634 * do not call pci_disable_device(dev) since it can cause hard hangs on
635 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
640 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
643 pci_write_config_byte(dev, SMBHSTCFG, i801_original_hstcfg);
644 pci_set_power_state(dev, pci_choose_state(dev, mesg));
648 static int i801_resume(struct pci_dev *dev)
650 pci_set_power_state(dev, PCI_D0);
651 pci_restore_state(dev);
652 return pci_enable_device(dev);
655 #define i801_suspend NULL
656 #define i801_resume NULL
659 static struct pci_driver i801_driver = {
660 .name = "i801_smbus",
661 .id_table = i801_ids,
663 .remove = __devexit_p(i801_remove),
664 .suspend = i801_suspend,
665 .resume = i801_resume,
668 static int __init i2c_i801_init(void)
670 return pci_register_driver(&i801_driver);
673 static void __exit i2c_i801_exit(void)
675 pci_unregister_driver(&i801_driver);
678 MODULE_AUTHOR ("Frodo Looijaard <frodol@dds.nl>, "
679 "Philip Edelbrock <phil@netroedge.com>, "
680 "and Mark D. Studebaker <mdsxyz123@yahoo.com>");
681 MODULE_DESCRIPTION("I801 SMBus driver");
682 MODULE_LICENSE("GPL");
684 module_init(i2c_i801_init);
685 module_exit(i2c_i801_exit);