fs: use kmem_cache_zalloc instead
[pv_ops_mirror.git] / drivers / i2c / busses / i2c-i801.c
blobac27e5f84ebe2ef60aef3fb40427ec7232ef744a
1 /*
2 i2c-i801.c - Part of lm_sensors, Linux kernel modules for hardware
3 monitoring
4 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
5 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
6 <mdsxyz123@yahoo.com>
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
25 82801AA 2413
26 82801AB 2423
27 82801BA 2443
28 82801CA/CAM 2483
29 82801DB 24C3 (HW PEC supported)
30 82801EB 24D3 (HW PEC supported)
31 6300ESB 25A4
32 ICH6 266A
33 ICH7 27DA
34 ESB2 269B
35 ICH8 283E
36 ICH9 2930
37 Tolapai 5032
38 This driver supports several versions of Intel's I/O Controller Hubs (ICH).
39 For SMBus support, they are similar to the PIIX4 and are part
40 of Intel's '810' and other chipsets.
41 See the file Documentation/i2c/busses/i2c-i801 for details.
42 I2C Block Read and Process Call are not supported.
45 /* Note: we assume there can only be one I801, with one SMBus interface */
47 #include <linux/module.h>
48 #include <linux/pci.h>
49 #include <linux/kernel.h>
50 #include <linux/stddef.h>
51 #include <linux/delay.h>
52 #include <linux/ioport.h>
53 #include <linux/init.h>
54 #include <linux/i2c.h>
55 #include <asm/io.h>
57 /* I801 SMBus address offsets */
58 #define SMBHSTSTS (0 + i801_smba)
59 #define SMBHSTCNT (2 + i801_smba)
60 #define SMBHSTCMD (3 + i801_smba)
61 #define SMBHSTADD (4 + i801_smba)
62 #define SMBHSTDAT0 (5 + i801_smba)
63 #define SMBHSTDAT1 (6 + i801_smba)
64 #define SMBBLKDAT (7 + i801_smba)
65 #define SMBPEC (8 + i801_smba) /* ICH4 only */
66 #define SMBAUXSTS (12 + i801_smba) /* ICH4 only */
67 #define SMBAUXCTL (13 + i801_smba) /* ICH4 only */
69 /* PCI Address Constants */
70 #define SMBBAR 4
71 #define SMBHSTCFG 0x040
73 /* Host configuration bits for SMBHSTCFG */
74 #define SMBHSTCFG_HST_EN 1
75 #define SMBHSTCFG_SMB_SMI_EN 2
76 #define SMBHSTCFG_I2C_EN 4
78 /* Auxillary control register bits, ICH4+ only */
79 #define SMBAUXCTL_CRC 1
80 #define SMBAUXCTL_E32B 2
82 /* kill bit for SMBHSTCNT */
83 #define SMBHSTCNT_KILL 2
85 /* Other settings */
86 #define MAX_TIMEOUT 100
87 #define ENABLE_INT9 0 /* set to 0x01 to enable - untested */
89 /* I801 command constants */
90 #define I801_QUICK 0x00
91 #define I801_BYTE 0x04
92 #define I801_BYTE_DATA 0x08
93 #define I801_WORD_DATA 0x0C
94 #define I801_PROC_CALL 0x10 /* later chips only, unimplemented */
95 #define I801_BLOCK_DATA 0x14
96 #define I801_I2C_BLOCK_DATA 0x18 /* unimplemented */
97 #define I801_BLOCK_LAST 0x34
98 #define I801_I2C_BLOCK_LAST 0x38 /* unimplemented */
99 #define I801_START 0x40
100 #define I801_PEC_EN 0x80 /* ICH4 only */
102 /* I801 Hosts Status register bits */
103 #define SMBHSTSTS_BYTE_DONE 0x80
104 #define SMBHSTSTS_INUSE_STS 0x40
105 #define SMBHSTSTS_SMBALERT_STS 0x20
106 #define SMBHSTSTS_FAILED 0x10
107 #define SMBHSTSTS_BUS_ERR 0x08
108 #define SMBHSTSTS_DEV_ERR 0x04
109 #define SMBHSTSTS_INTR 0x02
110 #define SMBHSTSTS_HOST_BUSY 0x01
112 static unsigned long i801_smba;
113 static unsigned char i801_original_hstcfg;
114 static struct pci_driver i801_driver;
115 static struct pci_dev *I801_dev;
116 static int isich4;
118 static int i801_transaction(int xact)
120 int temp;
121 int result = 0;
122 int timeout = 0;
124 dev_dbg(&I801_dev->dev, "Transaction (pre): CNT=%02x, CMD=%02x, "
125 "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT),
126 inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0),
127 inb_p(SMBHSTDAT1));
129 /* Make sure the SMBus host is ready to start transmitting */
130 /* 0x1f = Failed, Bus_Err, Dev_Err, Intr, Host_Busy */
131 if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
132 dev_dbg(&I801_dev->dev, "SMBus busy (%02x). Resetting...\n",
133 temp);
134 outb_p(temp, SMBHSTSTS);
135 if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
136 dev_dbg(&I801_dev->dev, "Failed! (%02x)\n", temp);
137 return -1;
138 } else {
139 dev_dbg(&I801_dev->dev, "Successful!\n");
143 /* the current contents of SMBHSTCNT can be overwritten, since PEC,
144 * INTREN, SMBSCMD are passed in xact */
145 outb_p(xact | I801_START, SMBHSTCNT);
147 /* We will always wait for a fraction of a second! */
148 do {
149 msleep(1);
150 temp = inb_p(SMBHSTSTS);
151 } while ((temp & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT));
153 /* If the SMBus is still busy, we give up */
154 if (timeout >= MAX_TIMEOUT) {
155 dev_dbg(&I801_dev->dev, "SMBus Timeout!\n");
156 result = -1;
157 /* try to stop the current command */
158 dev_dbg(&I801_dev->dev, "Terminating the current operation\n");
159 outb_p(inb_p(SMBHSTCNT) | SMBHSTCNT_KILL, SMBHSTCNT);
160 msleep(1);
161 outb_p(inb_p(SMBHSTCNT) & (~SMBHSTCNT_KILL), SMBHSTCNT);
164 if (temp & SMBHSTSTS_FAILED) {
165 result = -1;
166 dev_dbg(&I801_dev->dev, "Error: Failed bus transaction\n");
169 if (temp & SMBHSTSTS_BUS_ERR) {
170 result = -1;
171 dev_err(&I801_dev->dev, "Bus collision! SMBus may be locked "
172 "until next hard reset. (sorry!)\n");
173 /* Clock stops and slave is stuck in mid-transmission */
176 if (temp & SMBHSTSTS_DEV_ERR) {
177 result = -1;
178 dev_dbg(&I801_dev->dev, "Error: no response!\n");
181 if ((inb_p(SMBHSTSTS) & 0x1f) != 0x00)
182 outb_p(inb(SMBHSTSTS), SMBHSTSTS);
184 if ((temp = (0x1f & inb_p(SMBHSTSTS))) != 0x00) {
185 dev_dbg(&I801_dev->dev, "Failed reset at end of transaction "
186 "(%02x)\n", temp);
188 dev_dbg(&I801_dev->dev, "Transaction (post): CNT=%02x, CMD=%02x, "
189 "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT),
190 inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0),
191 inb_p(SMBHSTDAT1));
192 return result;
195 /* wait for INTR bit as advised by Intel */
196 static void i801_wait_hwpec(void)
198 int timeout = 0;
199 int temp;
201 do {
202 msleep(1);
203 temp = inb_p(SMBHSTSTS);
204 } while ((!(temp & SMBHSTSTS_INTR))
205 && (timeout++ < MAX_TIMEOUT));
207 if (timeout >= MAX_TIMEOUT) {
208 dev_dbg(&I801_dev->dev, "PEC Timeout!\n");
210 outb_p(temp, SMBHSTSTS);
213 static int i801_block_transaction_by_block(union i2c_smbus_data *data,
214 char read_write, int hwpec)
216 int i, len;
218 inb_p(SMBHSTCNT); /* reset the data buffer index */
220 /* Use 32-byte buffer to process this transaction */
221 if (read_write == I2C_SMBUS_WRITE) {
222 len = data->block[0];
223 outb_p(len, SMBHSTDAT0);
224 for (i = 0; i < len; i++)
225 outb_p(data->block[i+1], SMBBLKDAT);
228 if (i801_transaction(I801_BLOCK_DATA | ENABLE_INT9 |
229 I801_PEC_EN * hwpec))
230 return -1;
232 if (read_write == I2C_SMBUS_READ) {
233 len = inb_p(SMBHSTDAT0);
234 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
235 return -1;
237 data->block[0] = len;
238 for (i = 0; i < len; i++)
239 data->block[i + 1] = inb_p(SMBBLKDAT);
241 return 0;
244 static int i801_block_transaction_byte_by_byte(union i2c_smbus_data *data,
245 char read_write, int hwpec)
247 int i, len;
248 int smbcmd;
249 int temp;
250 int result = 0;
251 int timeout;
252 unsigned char errmask;
254 len = data->block[0];
256 if (read_write == I2C_SMBUS_WRITE) {
257 outb_p(len, SMBHSTDAT0);
258 outb_p(data->block[1], SMBBLKDAT);
261 for (i = 1; i <= len; i++) {
262 if (i == len && read_write == I2C_SMBUS_READ)
263 smbcmd = I801_BLOCK_LAST;
264 else
265 smbcmd = I801_BLOCK_DATA;
266 outb_p(smbcmd | ENABLE_INT9, SMBHSTCNT);
268 dev_dbg(&I801_dev->dev, "Block (pre %d): CNT=%02x, CMD=%02x, "
269 "ADD=%02x, DAT0=%02x, BLKDAT=%02x\n", i,
270 inb_p(SMBHSTCNT), inb_p(SMBHSTCMD), inb_p(SMBHSTADD),
271 inb_p(SMBHSTDAT0), inb_p(SMBBLKDAT));
273 /* Make sure the SMBus host is ready to start transmitting */
274 temp = inb_p(SMBHSTSTS);
275 if (i == 1) {
276 /* Erroneous conditions before transaction:
277 * Byte_Done, Failed, Bus_Err, Dev_Err, Intr, Host_Busy */
278 errmask = 0x9f;
279 } else {
280 /* Erroneous conditions during transaction:
281 * Failed, Bus_Err, Dev_Err, Intr */
282 errmask = 0x1e;
284 if (temp & errmask) {
285 dev_dbg(&I801_dev->dev, "SMBus busy (%02x). "
286 "Resetting...\n", temp);
287 outb_p(temp, SMBHSTSTS);
288 if (((temp = inb_p(SMBHSTSTS)) & errmask) != 0x00) {
289 dev_err(&I801_dev->dev,
290 "Reset failed! (%02x)\n", temp);
291 return -1;
293 if (i != 1)
294 /* if die in middle of block transaction, fail */
295 return -1;
298 if (i == 1)
299 outb_p(inb(SMBHSTCNT) | I801_START, SMBHSTCNT);
301 /* We will always wait for a fraction of a second! */
302 timeout = 0;
303 do {
304 msleep(1);
305 temp = inb_p(SMBHSTSTS);
307 while ((!(temp & SMBHSTSTS_BYTE_DONE))
308 && (timeout++ < MAX_TIMEOUT));
310 /* If the SMBus is still busy, we give up */
311 if (timeout >= MAX_TIMEOUT) {
312 /* try to stop the current command */
313 dev_dbg(&I801_dev->dev, "Terminating the current "
314 "operation\n");
315 outb_p(inb_p(SMBHSTCNT) | SMBHSTCNT_KILL, SMBHSTCNT);
316 msleep(1);
317 outb_p(inb_p(SMBHSTCNT) & (~SMBHSTCNT_KILL),
318 SMBHSTCNT);
319 result = -1;
320 dev_dbg(&I801_dev->dev, "SMBus Timeout!\n");
323 if (temp & SMBHSTSTS_FAILED) {
324 result = -1;
325 dev_dbg(&I801_dev->dev,
326 "Error: Failed bus transaction\n");
327 } else if (temp & SMBHSTSTS_BUS_ERR) {
328 result = -1;
329 dev_err(&I801_dev->dev, "Bus collision!\n");
330 } else if (temp & SMBHSTSTS_DEV_ERR) {
331 result = -1;
332 dev_dbg(&I801_dev->dev, "Error: no response!\n");
335 if (i == 1 && read_write == I2C_SMBUS_READ) {
336 len = inb_p(SMBHSTDAT0);
337 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
338 return -1;
339 data->block[0] = len;
342 /* Retrieve/store value in SMBBLKDAT */
343 if (read_write == I2C_SMBUS_READ)
344 data->block[i] = inb_p(SMBBLKDAT);
345 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
346 outb_p(data->block[i+1], SMBBLKDAT);
347 if ((temp & 0x9e) != 0x00)
348 outb_p(temp, SMBHSTSTS); /* signals SMBBLKDAT ready */
350 if ((temp = (0x1e & inb_p(SMBHSTSTS))) != 0x00) {
351 dev_dbg(&I801_dev->dev,
352 "Bad status (%02x) at end of transaction\n",
353 temp);
355 dev_dbg(&I801_dev->dev, "Block (post %d): CNT=%02x, CMD=%02x, "
356 "ADD=%02x, DAT0=%02x, BLKDAT=%02x\n", i,
357 inb_p(SMBHSTCNT), inb_p(SMBHSTCMD), inb_p(SMBHSTADD),
358 inb_p(SMBHSTDAT0), inb_p(SMBBLKDAT));
360 if (result < 0)
361 return result;
363 return result;
366 static int i801_set_block_buffer_mode(void)
368 outb_p(inb_p(SMBAUXCTL) | SMBAUXCTL_E32B, SMBAUXCTL);
369 if ((inb_p(SMBAUXCTL) & SMBAUXCTL_E32B) == 0)
370 return -1;
371 return 0;
374 /* Block transaction function */
375 static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
376 int command, int hwpec)
378 int result = 0;
379 unsigned char hostc;
381 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
382 if (read_write == I2C_SMBUS_WRITE) {
383 /* set I2C_EN bit in configuration register */
384 pci_read_config_byte(I801_dev, SMBHSTCFG, &hostc);
385 pci_write_config_byte(I801_dev, SMBHSTCFG,
386 hostc | SMBHSTCFG_I2C_EN);
387 } else {
388 dev_err(&I801_dev->dev,
389 "I2C_SMBUS_I2C_BLOCK_READ not DB!\n");
390 return -1;
394 if (read_write == I2C_SMBUS_WRITE) {
395 if (data->block[0] < 1)
396 data->block[0] = 1;
397 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
398 data->block[0] = I2C_SMBUS_BLOCK_MAX;
399 } else {
400 data->block[0] = 32; /* max for reads */
403 if (isich4 && i801_set_block_buffer_mode() == 0 )
404 result = i801_block_transaction_by_block(data, read_write,
405 hwpec);
406 else
407 result = i801_block_transaction_byte_by_byte(data, read_write,
408 hwpec);
410 if (result == 0 && hwpec)
411 i801_wait_hwpec();
413 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
414 /* restore saved configuration register value */
415 pci_write_config_byte(I801_dev, SMBHSTCFG, hostc);
417 return result;
420 /* Return -1 on error. */
421 static s32 i801_access(struct i2c_adapter * adap, u16 addr,
422 unsigned short flags, char read_write, u8 command,
423 int size, union i2c_smbus_data * data)
425 int hwpec;
426 int block = 0;
427 int ret, xact = 0;
429 hwpec = isich4 && (flags & I2C_CLIENT_PEC)
430 && size != I2C_SMBUS_QUICK
431 && size != I2C_SMBUS_I2C_BLOCK_DATA;
433 switch (size) {
434 case I2C_SMBUS_QUICK:
435 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
436 SMBHSTADD);
437 xact = I801_QUICK;
438 break;
439 case I2C_SMBUS_BYTE:
440 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
441 SMBHSTADD);
442 if (read_write == I2C_SMBUS_WRITE)
443 outb_p(command, SMBHSTCMD);
444 xact = I801_BYTE;
445 break;
446 case I2C_SMBUS_BYTE_DATA:
447 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
448 SMBHSTADD);
449 outb_p(command, SMBHSTCMD);
450 if (read_write == I2C_SMBUS_WRITE)
451 outb_p(data->byte, SMBHSTDAT0);
452 xact = I801_BYTE_DATA;
453 break;
454 case I2C_SMBUS_WORD_DATA:
455 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
456 SMBHSTADD);
457 outb_p(command, SMBHSTCMD);
458 if (read_write == I2C_SMBUS_WRITE) {
459 outb_p(data->word & 0xff, SMBHSTDAT0);
460 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1);
462 xact = I801_WORD_DATA;
463 break;
464 case I2C_SMBUS_BLOCK_DATA:
465 case I2C_SMBUS_I2C_BLOCK_DATA:
466 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
467 SMBHSTADD);
468 outb_p(command, SMBHSTCMD);
469 block = 1;
470 break;
471 case I2C_SMBUS_PROC_CALL:
472 default:
473 dev_err(&I801_dev->dev, "Unsupported transaction %d\n", size);
474 return -1;
477 if (hwpec) /* enable/disable hardware PEC */
478 outb_p(inb_p(SMBAUXCTL) | SMBAUXCTL_CRC, SMBAUXCTL);
479 else
480 outb_p(inb_p(SMBAUXCTL) & (~SMBAUXCTL_CRC), SMBAUXCTL);
482 if(block)
483 ret = i801_block_transaction(data, read_write, size, hwpec);
484 else
485 ret = i801_transaction(xact | ENABLE_INT9);
487 /* Some BIOSes don't like it when PEC is enabled at reboot or resume
488 time, so we forcibly disable it after every transaction. Turn off
489 E32B for the same reason. */
490 if (hwpec)
491 outb_p(inb_p(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B),
492 SMBAUXCTL);
494 if(block)
495 return ret;
496 if(ret)
497 return -1;
498 if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
499 return 0;
501 switch (xact & 0x7f) {
502 case I801_BYTE: /* Result put in SMBHSTDAT0 */
503 case I801_BYTE_DATA:
504 data->byte = inb_p(SMBHSTDAT0);
505 break;
506 case I801_WORD_DATA:
507 data->word = inb_p(SMBHSTDAT0) + (inb_p(SMBHSTDAT1) << 8);
508 break;
510 return 0;
514 static u32 i801_func(struct i2c_adapter *adapter)
516 return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
517 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
518 I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK
519 | (isich4 ? I2C_FUNC_SMBUS_PEC : 0);
522 static const struct i2c_algorithm smbus_algorithm = {
523 .smbus_xfer = i801_access,
524 .functionality = i801_func,
527 static struct i2c_adapter i801_adapter = {
528 .owner = THIS_MODULE,
529 .id = I2C_HW_SMBUS_I801,
530 .class = I2C_CLASS_HWMON,
531 .algo = &smbus_algorithm,
534 static struct pci_device_id i801_ids[] = {
535 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
536 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
537 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
538 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
539 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
540 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
541 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
542 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
543 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
544 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
545 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
546 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
547 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TOLAPAI_1) },
548 { 0, }
551 MODULE_DEVICE_TABLE (pci, i801_ids);
553 static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
555 unsigned char temp;
556 int err;
558 I801_dev = dev;
559 switch (dev->device) {
560 case PCI_DEVICE_ID_INTEL_82801DB_3:
561 case PCI_DEVICE_ID_INTEL_82801EB_3:
562 case PCI_DEVICE_ID_INTEL_ESB_4:
563 case PCI_DEVICE_ID_INTEL_ICH6_16:
564 case PCI_DEVICE_ID_INTEL_ICH7_17:
565 case PCI_DEVICE_ID_INTEL_ESB2_17:
566 case PCI_DEVICE_ID_INTEL_ICH8_5:
567 case PCI_DEVICE_ID_INTEL_ICH9_6:
568 case PCI_DEVICE_ID_INTEL_TOLAPAI_1:
569 isich4 = 1;
570 break;
571 default:
572 isich4 = 0;
575 err = pci_enable_device(dev);
576 if (err) {
577 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
578 err);
579 goto exit;
582 /* Determine the address of the SMBus area */
583 i801_smba = pci_resource_start(dev, SMBBAR);
584 if (!i801_smba) {
585 dev_err(&dev->dev, "SMBus base address uninitialized, "
586 "upgrade BIOS\n");
587 err = -ENODEV;
588 goto exit;
591 err = pci_request_region(dev, SMBBAR, i801_driver.name);
592 if (err) {
593 dev_err(&dev->dev, "Failed to request SMBus region "
594 "0x%lx-0x%Lx\n", i801_smba,
595 (unsigned long long)pci_resource_end(dev, SMBBAR));
596 goto exit;
599 pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
600 i801_original_hstcfg = temp;
601 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
602 if (!(temp & SMBHSTCFG_HST_EN)) {
603 dev_info(&dev->dev, "Enabling SMBus device\n");
604 temp |= SMBHSTCFG_HST_EN;
606 pci_write_config_byte(I801_dev, SMBHSTCFG, temp);
608 if (temp & SMBHSTCFG_SMB_SMI_EN)
609 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
610 else
611 dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");
613 /* set up the sysfs linkage to our parent device */
614 i801_adapter.dev.parent = &dev->dev;
616 snprintf(i801_adapter.name, sizeof(i801_adapter.name),
617 "SMBus I801 adapter at %04lx", i801_smba);
618 err = i2c_add_adapter(&i801_adapter);
619 if (err) {
620 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
621 goto exit_release;
623 return 0;
625 exit_release:
626 pci_release_region(dev, SMBBAR);
627 exit:
628 return err;
631 static void __devexit i801_remove(struct pci_dev *dev)
633 i2c_del_adapter(&i801_adapter);
634 pci_write_config_byte(I801_dev, SMBHSTCFG, i801_original_hstcfg);
635 pci_release_region(dev, SMBBAR);
637 * do not call pci_disable_device(dev) since it can cause hard hangs on
638 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
642 #ifdef CONFIG_PM
643 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
645 pci_save_state(dev);
646 pci_write_config_byte(dev, SMBHSTCFG, i801_original_hstcfg);
647 pci_set_power_state(dev, pci_choose_state(dev, mesg));
648 return 0;
651 static int i801_resume(struct pci_dev *dev)
653 pci_set_power_state(dev, PCI_D0);
654 pci_restore_state(dev);
655 return pci_enable_device(dev);
657 #else
658 #define i801_suspend NULL
659 #define i801_resume NULL
660 #endif
662 static struct pci_driver i801_driver = {
663 .name = "i801_smbus",
664 .id_table = i801_ids,
665 .probe = i801_probe,
666 .remove = __devexit_p(i801_remove),
667 .suspend = i801_suspend,
668 .resume = i801_resume,
671 static int __init i2c_i801_init(void)
673 return pci_register_driver(&i801_driver);
676 static void __exit i2c_i801_exit(void)
678 pci_unregister_driver(&i801_driver);
681 MODULE_AUTHOR ("Frodo Looijaard <frodol@dds.nl>, "
682 "Philip Edelbrock <phil@netroedge.com>, "
683 "and Mark D. Studebaker <mdsxyz123@yahoo.com>");
684 MODULE_DESCRIPTION("I801 SMBus driver");
685 MODULE_LICENSE("GPL");
687 module_init(i2c_i801_init);
688 module_exit(i2c_i801_exit);