jfs: Fix error handling in metapage_writepage()
[profile/ivi/kernel-x86-ivi.git] / drivers / i2c / busses / i2c-i801.c
1 /*
2     Copyright (c) 1998 - 2002  Frodo Looijaard <frodol@dds.nl>,
3     Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
4     <mdsxyz123@yahoo.com>
5     Copyright (C) 2007, 2008   Jean Delvare <khali@linux-fr.org>
6
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., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22 /*
23   Supports the following Intel I/O Controller Hubs (ICH):
24
25                                   I/O                     Block   I2C
26                                   region  SMBus   Block   proc.   block
27   Chip name             PCI ID    size    PEC     buffer  call    read
28   ----------------------------------------------------------------------
29   82801AA  (ICH)        0x2413     16      no      no      no      no
30   82801AB  (ICH0)       0x2423     16      no      no      no      no
31   82801BA  (ICH2)       0x2443     16      no      no      no      no
32   82801CA  (ICH3)       0x2483     32     soft     no      no      no
33   82801DB  (ICH4)       0x24c3     32     hard     yes     no      no
34   82801E   (ICH5)       0x24d3     32     hard     yes     yes     yes
35   6300ESB               0x25a4     32     hard     yes     yes     yes
36   82801F   (ICH6)       0x266a     32     hard     yes     yes     yes
37   6310ESB/6320ESB       0x269b     32     hard     yes     yes     yes
38   82801G   (ICH7)       0x27da     32     hard     yes     yes     yes
39   82801H   (ICH8)       0x283e     32     hard     yes     yes     yes
40   82801I   (ICH9)       0x2930     32     hard     yes     yes     yes
41   Tolapai               0x5032     32     hard     yes     yes     yes
42   ICH10                 0x3a30     32     hard     yes     yes     yes
43   ICH10                 0x3a60     32     hard     yes     yes     yes
44   PCH                   0x3b30     32     hard     yes     yes     yes
45
46   Features supported by this driver:
47   Software PEC                     no
48   Hardware PEC                     yes
49   Block buffer                     yes
50   Block process call transaction   no
51   I2C block read transaction       yes  (doesn't use the block buffer)
52
53   See the file Documentation/i2c/busses/i2c-i801 for details.
54 */
55
56 /* Note: we assume there can only be one I801, with one SMBus interface */
57
58 #include <linux/module.h>
59 #include <linux/pci.h>
60 #include <linux/kernel.h>
61 #include <linux/stddef.h>
62 #include <linux/delay.h>
63 #include <linux/ioport.h>
64 #include <linux/init.h>
65 #include <linux/i2c.h>
66 #include <linux/acpi.h>
67 #include <linux/io.h>
68
69 /* I801 SMBus address offsets */
70 #define SMBHSTSTS       (0 + i801_smba)
71 #define SMBHSTCNT       (2 + i801_smba)
72 #define SMBHSTCMD       (3 + i801_smba)
73 #define SMBHSTADD       (4 + i801_smba)
74 #define SMBHSTDAT0      (5 + i801_smba)
75 #define SMBHSTDAT1      (6 + i801_smba)
76 #define SMBBLKDAT       (7 + i801_smba)
77 #define SMBPEC          (8 + i801_smba)         /* ICH3 and later */
78 #define SMBAUXSTS       (12 + i801_smba)        /* ICH4 and later */
79 #define SMBAUXCTL       (13 + i801_smba)        /* ICH4 and later */
80
81 /* PCI Address Constants */
82 #define SMBBAR          4
83 #define SMBHSTCFG       0x040
84
85 /* Host configuration bits for SMBHSTCFG */
86 #define SMBHSTCFG_HST_EN        1
87 #define SMBHSTCFG_SMB_SMI_EN    2
88 #define SMBHSTCFG_I2C_EN        4
89
90 /* Auxillary control register bits, ICH4+ only */
91 #define SMBAUXCTL_CRC           1
92 #define SMBAUXCTL_E32B          2
93
94 /* kill bit for SMBHSTCNT */
95 #define SMBHSTCNT_KILL          2
96
97 /* Other settings */
98 #define MAX_TIMEOUT             100
99 #define ENABLE_INT9             0       /* set to 0x01 to enable - untested */
100
101 /* I801 command constants */
102 #define I801_QUICK              0x00
103 #define I801_BYTE               0x04
104 #define I801_BYTE_DATA          0x08
105 #define I801_WORD_DATA          0x0C
106 #define I801_PROC_CALL          0x10    /* unimplemented */
107 #define I801_BLOCK_DATA         0x14
108 #define I801_I2C_BLOCK_DATA     0x18    /* ICH5 and later */
109 #define I801_BLOCK_LAST         0x34
110 #define I801_I2C_BLOCK_LAST     0x38    /* ICH5 and later */
111 #define I801_START              0x40
112 #define I801_PEC_EN             0x80    /* ICH3 and later */
113
114 /* I801 Hosts Status register bits */
115 #define SMBHSTSTS_BYTE_DONE     0x80
116 #define SMBHSTSTS_INUSE_STS     0x40
117 #define SMBHSTSTS_SMBALERT_STS  0x20
118 #define SMBHSTSTS_FAILED        0x10
119 #define SMBHSTSTS_BUS_ERR       0x08
120 #define SMBHSTSTS_DEV_ERR       0x04
121 #define SMBHSTSTS_INTR          0x02
122 #define SMBHSTSTS_HOST_BUSY     0x01
123
124 #define STATUS_FLAGS            (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_FAILED | \
125                                  SMBHSTSTS_BUS_ERR | SMBHSTSTS_DEV_ERR | \
126                                  SMBHSTSTS_INTR)
127
128 static unsigned long i801_smba;
129 static unsigned char i801_original_hstcfg;
130 static struct pci_driver i801_driver;
131 static struct pci_dev *I801_dev;
132
133 #define FEATURE_SMBUS_PEC       (1 << 0)
134 #define FEATURE_BLOCK_BUFFER    (1 << 1)
135 #define FEATURE_BLOCK_PROC      (1 << 2)
136 #define FEATURE_I2C_BLOCK_READ  (1 << 3)
137 static unsigned int i801_features;
138
139 /* Make sure the SMBus host is ready to start transmitting.
140    Return 0 if it is, -EBUSY if it is not. */
141 static int i801_check_pre(void)
142 {
143         int status;
144
145         status = inb_p(SMBHSTSTS);
146         if (status & SMBHSTSTS_HOST_BUSY) {
147                 dev_err(&I801_dev->dev, "SMBus is busy, can't use it!\n");
148                 return -EBUSY;
149         }
150
151         status &= STATUS_FLAGS;
152         if (status) {
153                 dev_dbg(&I801_dev->dev, "Clearing status flags (%02x)\n",
154                         status);
155                 outb_p(status, SMBHSTSTS);
156                 status = inb_p(SMBHSTSTS) & STATUS_FLAGS;
157                 if (status) {
158                         dev_err(&I801_dev->dev,
159                                 "Failed clearing status flags (%02x)\n",
160                                 status);
161                         return -EBUSY;
162                 }
163         }
164
165         return 0;
166 }
167
168 /* Convert the status register to an error code, and clear it. */
169 static int i801_check_post(int status, int timeout)
170 {
171         int result = 0;
172
173         /* If the SMBus is still busy, we give up */
174         if (timeout) {
175                 dev_err(&I801_dev->dev, "Transaction timeout\n");
176                 /* try to stop the current command */
177                 dev_dbg(&I801_dev->dev, "Terminating the current operation\n");
178                 outb_p(inb_p(SMBHSTCNT) | SMBHSTCNT_KILL, SMBHSTCNT);
179                 msleep(1);
180                 outb_p(inb_p(SMBHSTCNT) & (~SMBHSTCNT_KILL), SMBHSTCNT);
181
182                 /* Check if it worked */
183                 status = inb_p(SMBHSTSTS);
184                 if ((status & SMBHSTSTS_HOST_BUSY) ||
185                     !(status & SMBHSTSTS_FAILED))
186                         dev_err(&I801_dev->dev,
187                                 "Failed terminating the transaction\n");
188                 outb_p(STATUS_FLAGS, SMBHSTSTS);
189                 return -ETIMEDOUT;
190         }
191
192         if (status & SMBHSTSTS_FAILED) {
193                 result = -EIO;
194                 dev_err(&I801_dev->dev, "Transaction failed\n");
195         }
196         if (status & SMBHSTSTS_DEV_ERR) {
197                 result = -ENXIO;
198                 dev_dbg(&I801_dev->dev, "No response\n");
199         }
200         if (status & SMBHSTSTS_BUS_ERR) {
201                 result = -EAGAIN;
202                 dev_dbg(&I801_dev->dev, "Lost arbitration\n");
203         }
204
205         if (result) {
206                 /* Clear error flags */
207                 outb_p(status & STATUS_FLAGS, SMBHSTSTS);
208                 status = inb_p(SMBHSTSTS) & STATUS_FLAGS;
209                 if (status) {
210                         dev_warn(&I801_dev->dev, "Failed clearing status "
211                                  "flags at end of transaction (%02x)\n",
212                                  status);
213                 }
214         }
215
216         return result;
217 }
218
219 static int i801_transaction(int xact)
220 {
221         int status;
222         int result;
223         int timeout = 0;
224
225         result = i801_check_pre();
226         if (result < 0)
227                 return result;
228
229         /* the current contents of SMBHSTCNT can be overwritten, since PEC,
230          * INTREN, SMBSCMD are passed in xact */
231         outb_p(xact | I801_START, SMBHSTCNT);
232
233         /* We will always wait for a fraction of a second! */
234         do {
235                 msleep(1);
236                 status = inb_p(SMBHSTSTS);
237         } while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT));
238
239         result = i801_check_post(status, timeout >= MAX_TIMEOUT);
240         if (result < 0)
241                 return result;
242
243         outb_p(SMBHSTSTS_INTR, SMBHSTSTS);
244         return 0;
245 }
246
247 /* wait for INTR bit as advised by Intel */
248 static void i801_wait_hwpec(void)
249 {
250         int timeout = 0;
251         int status;
252
253         do {
254                 msleep(1);
255                 status = inb_p(SMBHSTSTS);
256         } while ((!(status & SMBHSTSTS_INTR))
257                  && (timeout++ < MAX_TIMEOUT));
258
259         if (timeout >= MAX_TIMEOUT) {
260                 dev_dbg(&I801_dev->dev, "PEC Timeout!\n");
261         }
262         outb_p(status, SMBHSTSTS);
263 }
264
265 static int i801_block_transaction_by_block(union i2c_smbus_data *data,
266                                            char read_write, int hwpec)
267 {
268         int i, len;
269         int status;
270
271         inb_p(SMBHSTCNT); /* reset the data buffer index */
272
273         /* Use 32-byte buffer to process this transaction */
274         if (read_write == I2C_SMBUS_WRITE) {
275                 len = data->block[0];
276                 outb_p(len, SMBHSTDAT0);
277                 for (i = 0; i < len; i++)
278                         outb_p(data->block[i+1], SMBBLKDAT);
279         }
280
281         status = i801_transaction(I801_BLOCK_DATA | ENABLE_INT9 |
282                                   I801_PEC_EN * hwpec);
283         if (status)
284                 return status;
285
286         if (read_write == I2C_SMBUS_READ) {
287                 len = inb_p(SMBHSTDAT0);
288                 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
289                         return -EPROTO;
290
291                 data->block[0] = len;
292                 for (i = 0; i < len; i++)
293                         data->block[i + 1] = inb_p(SMBBLKDAT);
294         }
295         return 0;
296 }
297
298 static int i801_block_transaction_byte_by_byte(union i2c_smbus_data *data,
299                                                char read_write, int command,
300                                                int hwpec)
301 {
302         int i, len;
303         int smbcmd;
304         int status;
305         int result;
306         int timeout;
307
308         result = i801_check_pre();
309         if (result < 0)
310                 return result;
311
312         len = data->block[0];
313
314         if (read_write == I2C_SMBUS_WRITE) {
315                 outb_p(len, SMBHSTDAT0);
316                 outb_p(data->block[1], SMBBLKDAT);
317         }
318
319         for (i = 1; i <= len; i++) {
320                 if (i == len && read_write == I2C_SMBUS_READ) {
321                         if (command == I2C_SMBUS_I2C_BLOCK_DATA)
322                                 smbcmd = I801_I2C_BLOCK_LAST;
323                         else
324                                 smbcmd = I801_BLOCK_LAST;
325                 } else {
326                         if (command == I2C_SMBUS_I2C_BLOCK_DATA
327                          && read_write == I2C_SMBUS_READ)
328                                 smbcmd = I801_I2C_BLOCK_DATA;
329                         else
330                                 smbcmd = I801_BLOCK_DATA;
331                 }
332                 outb_p(smbcmd | ENABLE_INT9, SMBHSTCNT);
333
334                 if (i == 1)
335                         outb_p(inb(SMBHSTCNT) | I801_START, SMBHSTCNT);
336
337                 /* We will always wait for a fraction of a second! */
338                 timeout = 0;
339                 do {
340                         msleep(1);
341                         status = inb_p(SMBHSTSTS);
342                 }
343                 while ((!(status & SMBHSTSTS_BYTE_DONE))
344                        && (timeout++ < MAX_TIMEOUT));
345
346                 result = i801_check_post(status, timeout >= MAX_TIMEOUT);
347                 if (result < 0)
348                         return result;
349
350                 if (i == 1 && read_write == I2C_SMBUS_READ
351                  && command != I2C_SMBUS_I2C_BLOCK_DATA) {
352                         len = inb_p(SMBHSTDAT0);
353                         if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
354                                 dev_err(&I801_dev->dev,
355                                         "Illegal SMBus block read size %d\n",
356                                         len);
357                                 /* Recover */
358                                 while (inb_p(SMBHSTSTS) & SMBHSTSTS_HOST_BUSY)
359                                         outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS);
360                                 outb_p(SMBHSTSTS_INTR, SMBHSTSTS);
361                                 return -EPROTO;
362                         }
363                         data->block[0] = len;
364                 }
365
366                 /* Retrieve/store value in SMBBLKDAT */
367                 if (read_write == I2C_SMBUS_READ)
368                         data->block[i] = inb_p(SMBBLKDAT);
369                 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
370                         outb_p(data->block[i+1], SMBBLKDAT);
371
372                 /* signals SMBBLKDAT ready */
373                 outb_p(SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR, SMBHSTSTS);
374         }
375
376         return 0;
377 }
378
379 static int i801_set_block_buffer_mode(void)
380 {
381         outb_p(inb_p(SMBAUXCTL) | SMBAUXCTL_E32B, SMBAUXCTL);
382         if ((inb_p(SMBAUXCTL) & SMBAUXCTL_E32B) == 0)
383                 return -EIO;
384         return 0;
385 }
386
387 /* Block transaction function */
388 static int i801_block_transaction(union i2c_smbus_data *data, char read_write,
389                                   int command, int hwpec)
390 {
391         int result = 0;
392         unsigned char hostc;
393
394         if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
395                 if (read_write == I2C_SMBUS_WRITE) {
396                         /* set I2C_EN bit in configuration register */
397                         pci_read_config_byte(I801_dev, SMBHSTCFG, &hostc);
398                         pci_write_config_byte(I801_dev, SMBHSTCFG,
399                                               hostc | SMBHSTCFG_I2C_EN);
400                 } else if (!(i801_features & FEATURE_I2C_BLOCK_READ)) {
401                         dev_err(&I801_dev->dev,
402                                 "I2C block read is unsupported!\n");
403                         return -EOPNOTSUPP;
404                 }
405         }
406
407         if (read_write == I2C_SMBUS_WRITE
408          || command == I2C_SMBUS_I2C_BLOCK_DATA) {
409                 if (data->block[0] < 1)
410                         data->block[0] = 1;
411                 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
412                         data->block[0] = I2C_SMBUS_BLOCK_MAX;
413         } else {
414                 data->block[0] = 32;    /* max for SMBus block reads */
415         }
416
417         if ((i801_features & FEATURE_BLOCK_BUFFER)
418          && !(command == I2C_SMBUS_I2C_BLOCK_DATA
419               && read_write == I2C_SMBUS_READ)
420          && i801_set_block_buffer_mode() == 0)
421                 result = i801_block_transaction_by_block(data, read_write,
422                                                          hwpec);
423         else
424                 result = i801_block_transaction_byte_by_byte(data, read_write,
425                                                              command, hwpec);
426
427         if (result == 0 && hwpec)
428                 i801_wait_hwpec();
429
430         if (command == I2C_SMBUS_I2C_BLOCK_DATA
431          && read_write == I2C_SMBUS_WRITE) {
432                 /* restore saved configuration register value */
433                 pci_write_config_byte(I801_dev, SMBHSTCFG, hostc);
434         }
435         return result;
436 }
437
438 /* Return negative errno on error. */
439 static s32 i801_access(struct i2c_adapter * adap, u16 addr,
440                        unsigned short flags, char read_write, u8 command,
441                        int size, union i2c_smbus_data * data)
442 {
443         int hwpec;
444         int block = 0;
445         int ret, xact = 0;
446
447         hwpec = (i801_features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
448                 && size != I2C_SMBUS_QUICK
449                 && size != I2C_SMBUS_I2C_BLOCK_DATA;
450
451         switch (size) {
452         case I2C_SMBUS_QUICK:
453                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
454                        SMBHSTADD);
455                 xact = I801_QUICK;
456                 break;
457         case I2C_SMBUS_BYTE:
458                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
459                        SMBHSTADD);
460                 if (read_write == I2C_SMBUS_WRITE)
461                         outb_p(command, SMBHSTCMD);
462                 xact = I801_BYTE;
463                 break;
464         case I2C_SMBUS_BYTE_DATA:
465                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
466                        SMBHSTADD);
467                 outb_p(command, SMBHSTCMD);
468                 if (read_write == I2C_SMBUS_WRITE)
469                         outb_p(data->byte, SMBHSTDAT0);
470                 xact = I801_BYTE_DATA;
471                 break;
472         case I2C_SMBUS_WORD_DATA:
473                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
474                        SMBHSTADD);
475                 outb_p(command, SMBHSTCMD);
476                 if (read_write == I2C_SMBUS_WRITE) {
477                         outb_p(data->word & 0xff, SMBHSTDAT0);
478                         outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1);
479                 }
480                 xact = I801_WORD_DATA;
481                 break;
482         case I2C_SMBUS_BLOCK_DATA:
483                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
484                        SMBHSTADD);
485                 outb_p(command, SMBHSTCMD);
486                 block = 1;
487                 break;
488         case I2C_SMBUS_I2C_BLOCK_DATA:
489                 /* NB: page 240 of ICH5 datasheet shows that the R/#W
490                  * bit should be cleared here, even when reading */
491                 outb_p((addr & 0x7f) << 1, SMBHSTADD);
492                 if (read_write == I2C_SMBUS_READ) {
493                         /* NB: page 240 of ICH5 datasheet also shows
494                          * that DATA1 is the cmd field when reading */
495                         outb_p(command, SMBHSTDAT1);
496                 } else
497                         outb_p(command, SMBHSTCMD);
498                 block = 1;
499                 break;
500         default:
501                 dev_err(&I801_dev->dev, "Unsupported transaction %d\n", size);
502                 return -EOPNOTSUPP;
503         }
504
505         if (hwpec)      /* enable/disable hardware PEC */
506                 outb_p(inb_p(SMBAUXCTL) | SMBAUXCTL_CRC, SMBAUXCTL);
507         else
508                 outb_p(inb_p(SMBAUXCTL) & (~SMBAUXCTL_CRC), SMBAUXCTL);
509
510         if(block)
511                 ret = i801_block_transaction(data, read_write, size, hwpec);
512         else
513                 ret = i801_transaction(xact | ENABLE_INT9);
514
515         /* Some BIOSes don't like it when PEC is enabled at reboot or resume
516            time, so we forcibly disable it after every transaction. Turn off
517            E32B for the same reason. */
518         if (hwpec || block)
519                 outb_p(inb_p(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B),
520                        SMBAUXCTL);
521
522         if(block)
523                 return ret;
524         if(ret)
525                 return ret;
526         if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
527                 return 0;
528
529         switch (xact & 0x7f) {
530         case I801_BYTE: /* Result put in SMBHSTDAT0 */
531         case I801_BYTE_DATA:
532                 data->byte = inb_p(SMBHSTDAT0);
533                 break;
534         case I801_WORD_DATA:
535                 data->word = inb_p(SMBHSTDAT0) + (inb_p(SMBHSTDAT1) << 8);
536                 break;
537         }
538         return 0;
539 }
540
541
542 static u32 i801_func(struct i2c_adapter *adapter)
543 {
544         return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
545                I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
546                I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
547                ((i801_features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
548                ((i801_features & FEATURE_I2C_BLOCK_READ) ?
549                 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0);
550 }
551
552 static const struct i2c_algorithm smbus_algorithm = {
553         .smbus_xfer     = i801_access,
554         .functionality  = i801_func,
555 };
556
557 static struct i2c_adapter i801_adapter = {
558         .owner          = THIS_MODULE,
559         .id             = I2C_HW_SMBUS_I801,
560         .class          = I2C_CLASS_HWMON | I2C_CLASS_SPD,
561         .algo           = &smbus_algorithm,
562 };
563
564 static struct pci_device_id i801_ids[] = {
565         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
566         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
567         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
568         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
569         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
570         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
571         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
572         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
573         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
574         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
575         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
576         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
577         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TOLAPAI_1) },
578         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
579         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
580         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PCH_SMBUS) },
581         { 0, }
582 };
583
584 MODULE_DEVICE_TABLE (pci, i801_ids);
585
586 #if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
587 static unsigned char apanel_addr;
588
589 /* Scan the system ROM for the signature "FJKEYINF" */
590 static __init const void __iomem *bios_signature(const void __iomem *bios)
591 {
592         ssize_t offset;
593         const unsigned char signature[] = "FJKEYINF";
594
595         for (offset = 0; offset < 0x10000; offset += 0x10) {
596                 if (check_signature(bios + offset, signature,
597                                     sizeof(signature)-1))
598                         return bios + offset;
599         }
600         return NULL;
601 }
602
603 static void __init input_apanel_init(void)
604 {
605         void __iomem *bios;
606         const void __iomem *p;
607
608         bios = ioremap(0xF0000, 0x10000); /* Can't fail */
609         p = bios_signature(bios);
610         if (p) {
611                 /* just use the first address */
612                 apanel_addr = readb(p + 8 + 3) >> 1;
613         }
614         iounmap(bios);
615 }
616 #else
617 static void __init input_apanel_init(void) {}
618 #endif
619
620 static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
621 {
622         unsigned char temp;
623         int err;
624
625         I801_dev = dev;
626         i801_features = 0;
627         switch (dev->device) {
628         case PCI_DEVICE_ID_INTEL_82801EB_3:
629         case PCI_DEVICE_ID_INTEL_ESB_4:
630         case PCI_DEVICE_ID_INTEL_ICH6_16:
631         case PCI_DEVICE_ID_INTEL_ICH7_17:
632         case PCI_DEVICE_ID_INTEL_ESB2_17:
633         case PCI_DEVICE_ID_INTEL_ICH8_5:
634         case PCI_DEVICE_ID_INTEL_ICH9_6:
635         case PCI_DEVICE_ID_INTEL_TOLAPAI_1:
636         case PCI_DEVICE_ID_INTEL_ICH10_4:
637         case PCI_DEVICE_ID_INTEL_ICH10_5:
638         case PCI_DEVICE_ID_INTEL_PCH_SMBUS:
639                 i801_features |= FEATURE_I2C_BLOCK_READ;
640                 /* fall through */
641         case PCI_DEVICE_ID_INTEL_82801DB_3:
642                 i801_features |= FEATURE_SMBUS_PEC;
643                 i801_features |= FEATURE_BLOCK_BUFFER;
644                 break;
645         }
646
647         err = pci_enable_device(dev);
648         if (err) {
649                 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
650                         err);
651                 goto exit;
652         }
653
654         /* Determine the address of the SMBus area */
655         i801_smba = pci_resource_start(dev, SMBBAR);
656         if (!i801_smba) {
657                 dev_err(&dev->dev, "SMBus base address uninitialized, "
658                         "upgrade BIOS\n");
659                 err = -ENODEV;
660                 goto exit;
661         }
662
663         err = acpi_check_resource_conflict(&dev->resource[SMBBAR]);
664         if (err)
665                 goto exit;
666
667         err = pci_request_region(dev, SMBBAR, i801_driver.name);
668         if (err) {
669                 dev_err(&dev->dev, "Failed to request SMBus region "
670                         "0x%lx-0x%Lx\n", i801_smba,
671                         (unsigned long long)pci_resource_end(dev, SMBBAR));
672                 goto exit;
673         }
674
675         pci_read_config_byte(I801_dev, SMBHSTCFG, &temp);
676         i801_original_hstcfg = temp;
677         temp &= ~SMBHSTCFG_I2C_EN;      /* SMBus timing */
678         if (!(temp & SMBHSTCFG_HST_EN)) {
679                 dev_info(&dev->dev, "Enabling SMBus device\n");
680                 temp |= SMBHSTCFG_HST_EN;
681         }
682         pci_write_config_byte(I801_dev, SMBHSTCFG, temp);
683
684         if (temp & SMBHSTCFG_SMB_SMI_EN)
685                 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
686         else
687                 dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");
688
689         /* Clear special mode bits */
690         if (i801_features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
691                 outb_p(inb_p(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B),
692                        SMBAUXCTL);
693
694         /* set up the sysfs linkage to our parent device */
695         i801_adapter.dev.parent = &dev->dev;
696
697         snprintf(i801_adapter.name, sizeof(i801_adapter.name),
698                 "SMBus I801 adapter at %04lx", i801_smba);
699         err = i2c_add_adapter(&i801_adapter);
700         if (err) {
701                 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
702                 goto exit_release;
703         }
704
705         /* Register optional slaves */
706 #if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
707         if (apanel_addr) {
708                 struct i2c_board_info info;
709
710                 memset(&info, 0, sizeof(struct i2c_board_info));
711                 info.addr = apanel_addr;
712                 strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
713                 i2c_new_device(&i801_adapter, &info);
714         }
715 #endif
716
717         return 0;
718
719 exit_release:
720         pci_release_region(dev, SMBBAR);
721 exit:
722         return err;
723 }
724
725 static void __devexit i801_remove(struct pci_dev *dev)
726 {
727         i2c_del_adapter(&i801_adapter);
728         pci_write_config_byte(I801_dev, SMBHSTCFG, i801_original_hstcfg);
729         pci_release_region(dev, SMBBAR);
730         /*
731          * do not call pci_disable_device(dev) since it can cause hard hangs on
732          * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
733          */
734 }
735
736 #ifdef CONFIG_PM
737 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
738 {
739         pci_save_state(dev);
740         pci_write_config_byte(dev, SMBHSTCFG, i801_original_hstcfg);
741         pci_set_power_state(dev, pci_choose_state(dev, mesg));
742         return 0;
743 }
744
745 static int i801_resume(struct pci_dev *dev)
746 {
747         pci_set_power_state(dev, PCI_D0);
748         pci_restore_state(dev);
749         return pci_enable_device(dev);
750 }
751 #else
752 #define i801_suspend NULL
753 #define i801_resume NULL
754 #endif
755
756 static struct pci_driver i801_driver = {
757         .name           = "i801_smbus",
758         .id_table       = i801_ids,
759         .probe          = i801_probe,
760         .remove         = __devexit_p(i801_remove),
761         .suspend        = i801_suspend,
762         .resume         = i801_resume,
763 };
764
765 static int __init i2c_i801_init(void)
766 {
767         input_apanel_init();
768         return pci_register_driver(&i801_driver);
769 }
770
771 static void __exit i2c_i801_exit(void)
772 {
773         pci_unregister_driver(&i801_driver);
774 }
775
776 MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>, "
777               "Jean Delvare <khali@linux-fr.org>");
778 MODULE_DESCRIPTION("I801 SMBus driver");
779 MODULE_LICENSE("GPL");
780
781 module_init(i2c_i801_init);
782 module_exit(i2c_i801_exit);