Merge branch 'upstream/core' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen
[pandora-kernel.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     Copyright (C) 2010         Intel Corporation,
7                                David Woodhouse <dwmw2@infradead.org>
8
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.
13
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.
18
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.
22 */
23
24 /*
25   Supports the following Intel I/O Controller Hubs (ICH):
26
27                                   I/O                     Block   I2C
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   Cougar Point (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
53   Features supported by this driver:
54   Software PEC                     no
55   Hardware PEC                     yes
56   Block buffer                     yes
57   Block process call transaction   no
58   I2C block read transaction       yes  (doesn't use the block buffer)
59   Slave mode                       no
60
61   See the file Documentation/i2c/busses/i2c-i801 for details.
62 */
63
64 #include <linux/module.h>
65 #include <linux/pci.h>
66 #include <linux/kernel.h>
67 #include <linux/stddef.h>
68 #include <linux/delay.h>
69 #include <linux/ioport.h>
70 #include <linux/init.h>
71 #include <linux/i2c.h>
72 #include <linux/acpi.h>
73 #include <linux/io.h>
74 #include <linux/dmi.h>
75
76 /* I801 SMBus address offsets */
77 #define SMBHSTSTS(p)    (0 + (p)->smba)
78 #define SMBHSTCNT(p)    (2 + (p)->smba)
79 #define SMBHSTCMD(p)    (3 + (p)->smba)
80 #define SMBHSTADD(p)    (4 + (p)->smba)
81 #define SMBHSTDAT0(p)   (5 + (p)->smba)
82 #define SMBHSTDAT1(p)   (6 + (p)->smba)
83 #define SMBBLKDAT(p)    (7 + (p)->smba)
84 #define SMBPEC(p)       (8 + (p)->smba)         /* ICH3 and later */
85 #define SMBAUXSTS(p)    (12 + (p)->smba)        /* ICH4 and later */
86 #define SMBAUXCTL(p)    (13 + (p)->smba)        /* ICH4 and later */
87
88 /* PCI Address Constants */
89 #define SMBBAR          4
90 #define SMBHSTCFG       0x040
91
92 /* Host configuration bits for SMBHSTCFG */
93 #define SMBHSTCFG_HST_EN        1
94 #define SMBHSTCFG_SMB_SMI_EN    2
95 #define SMBHSTCFG_I2C_EN        4
96
97 /* Auxillary control register bits, ICH4+ only */
98 #define SMBAUXCTL_CRC           1
99 #define SMBAUXCTL_E32B          2
100
101 /* kill bit for SMBHSTCNT */
102 #define SMBHSTCNT_KILL          2
103
104 /* Other settings */
105 #define MAX_TIMEOUT             100
106 #define ENABLE_INT9             0       /* set to 0x01 to enable - untested */
107
108 /* I801 command constants */
109 #define I801_QUICK              0x00
110 #define I801_BYTE               0x04
111 #define I801_BYTE_DATA          0x08
112 #define I801_WORD_DATA          0x0C
113 #define I801_PROC_CALL          0x10    /* unimplemented */
114 #define I801_BLOCK_DATA         0x14
115 #define I801_I2C_BLOCK_DATA     0x18    /* ICH5 and later */
116 #define I801_BLOCK_LAST         0x34
117 #define I801_I2C_BLOCK_LAST     0x38    /* ICH5 and later */
118 #define I801_START              0x40
119 #define I801_PEC_EN             0x80    /* ICH3 and later */
120
121 /* I801 Hosts Status register bits */
122 #define SMBHSTSTS_BYTE_DONE     0x80
123 #define SMBHSTSTS_INUSE_STS     0x40
124 #define SMBHSTSTS_SMBALERT_STS  0x20
125 #define SMBHSTSTS_FAILED        0x10
126 #define SMBHSTSTS_BUS_ERR       0x08
127 #define SMBHSTSTS_DEV_ERR       0x04
128 #define SMBHSTSTS_INTR          0x02
129 #define SMBHSTSTS_HOST_BUSY     0x01
130
131 #define STATUS_FLAGS            (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_FAILED | \
132                                  SMBHSTSTS_BUS_ERR | SMBHSTSTS_DEV_ERR | \
133                                  SMBHSTSTS_INTR)
134
135 /* Patsburg also has three 'Integrated Device Function' SMBus controllers */
136 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0 0x1d70
137 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1 0x1d71
138 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2 0x1d72
139
140 struct i801_priv {
141         struct i2c_adapter adapter;
142         unsigned long smba;
143         unsigned char original_hstcfg;
144         struct pci_dev *pci_dev;
145         unsigned int features;
146 };
147
148 static struct pci_driver i801_driver;
149
150 #define FEATURE_SMBUS_PEC       (1 << 0)
151 #define FEATURE_BLOCK_BUFFER    (1 << 1)
152 #define FEATURE_BLOCK_PROC      (1 << 2)
153 #define FEATURE_I2C_BLOCK_READ  (1 << 3)
154
155 static const char *i801_feature_names[] = {
156         "SMBus PEC",
157         "Block buffer",
158         "Block process call",
159         "I2C block read",
160 };
161
162 static unsigned int disable_features;
163 module_param(disable_features, uint, S_IRUGO | S_IWUSR);
164 MODULE_PARM_DESC(disable_features, "Disable selected driver features");
165
166 /* Make sure the SMBus host is ready to start transmitting.
167    Return 0 if it is, -EBUSY if it is not. */
168 static int i801_check_pre(struct i801_priv *priv)
169 {
170         int status;
171
172         status = inb_p(SMBHSTSTS(priv));
173         if (status & SMBHSTSTS_HOST_BUSY) {
174                 dev_err(&priv->pci_dev->dev, "SMBus is busy, can't use it!\n");
175                 return -EBUSY;
176         }
177
178         status &= STATUS_FLAGS;
179         if (status) {
180                 dev_dbg(&priv->pci_dev->dev, "Clearing status flags (%02x)\n",
181                         status);
182                 outb_p(status, SMBHSTSTS(priv));
183                 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
184                 if (status) {
185                         dev_err(&priv->pci_dev->dev,
186                                 "Failed clearing status flags (%02x)\n",
187                                 status);
188                         return -EBUSY;
189                 }
190         }
191
192         return 0;
193 }
194
195 /* Convert the status register to an error code, and clear it. */
196 static int i801_check_post(struct i801_priv *priv, int status, int timeout)
197 {
198         int result = 0;
199
200         /* If the SMBus is still busy, we give up */
201         if (timeout) {
202                 dev_err(&priv->pci_dev->dev, "Transaction timeout\n");
203                 /* try to stop the current command */
204                 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");
205                 outb_p(inb_p(SMBHSTCNT(priv)) | SMBHSTCNT_KILL,
206                        SMBHSTCNT(priv));
207                 msleep(1);
208                 outb_p(inb_p(SMBHSTCNT(priv)) & (~SMBHSTCNT_KILL),
209                        SMBHSTCNT(priv));
210
211                 /* Check if it worked */
212                 status = inb_p(SMBHSTSTS(priv));
213                 if ((status & SMBHSTSTS_HOST_BUSY) ||
214                     !(status & SMBHSTSTS_FAILED))
215                         dev_err(&priv->pci_dev->dev,
216                                 "Failed terminating the transaction\n");
217                 outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
218                 return -ETIMEDOUT;
219         }
220
221         if (status & SMBHSTSTS_FAILED) {
222                 result = -EIO;
223                 dev_err(&priv->pci_dev->dev, "Transaction failed\n");
224         }
225         if (status & SMBHSTSTS_DEV_ERR) {
226                 result = -ENXIO;
227                 dev_dbg(&priv->pci_dev->dev, "No response\n");
228         }
229         if (status & SMBHSTSTS_BUS_ERR) {
230                 result = -EAGAIN;
231                 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
232         }
233
234         if (result) {
235                 /* Clear error flags */
236                 outb_p(status & STATUS_FLAGS, SMBHSTSTS(priv));
237                 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
238                 if (status) {
239                         dev_warn(&priv->pci_dev->dev, "Failed clearing status "
240                                  "flags at end of transaction (%02x)\n",
241                                  status);
242                 }
243         }
244
245         return result;
246 }
247
248 static int i801_transaction(struct i801_priv *priv, int xact)
249 {
250         int status;
251         int result;
252         int timeout = 0;
253
254         result = i801_check_pre(priv);
255         if (result < 0)
256                 return result;
257
258         /* the current contents of SMBHSTCNT can be overwritten, since PEC,
259          * INTREN, SMBSCMD are passed in xact */
260         outb_p(xact | I801_START, SMBHSTCNT(priv));
261
262         /* We will always wait for a fraction of a second! */
263         do {
264                 msleep(1);
265                 status = inb_p(SMBHSTSTS(priv));
266         } while ((status & SMBHSTSTS_HOST_BUSY) && (timeout++ < MAX_TIMEOUT));
267
268         result = i801_check_post(priv, status, timeout > MAX_TIMEOUT);
269         if (result < 0)
270                 return result;
271
272         outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
273         return 0;
274 }
275
276 /* wait for INTR bit as advised by Intel */
277 static void i801_wait_hwpec(struct i801_priv *priv)
278 {
279         int timeout = 0;
280         int status;
281
282         do {
283                 msleep(1);
284                 status = inb_p(SMBHSTSTS(priv));
285         } while ((!(status & SMBHSTSTS_INTR))
286                  && (timeout++ < MAX_TIMEOUT));
287
288         if (timeout > MAX_TIMEOUT)
289                 dev_dbg(&priv->pci_dev->dev, "PEC Timeout!\n");
290
291         outb_p(status, SMBHSTSTS(priv));
292 }
293
294 static int i801_block_transaction_by_block(struct i801_priv *priv,
295                                            union i2c_smbus_data *data,
296                                            char read_write, int hwpec)
297 {
298         int i, len;
299         int status;
300
301         inb_p(SMBHSTCNT(priv)); /* reset the data buffer index */
302
303         /* Use 32-byte buffer to process this transaction */
304         if (read_write == I2C_SMBUS_WRITE) {
305                 len = data->block[0];
306                 outb_p(len, SMBHSTDAT0(priv));
307                 for (i = 0; i < len; i++)
308                         outb_p(data->block[i+1], SMBBLKDAT(priv));
309         }
310
311         status = i801_transaction(priv, I801_BLOCK_DATA | ENABLE_INT9 |
312                                   I801_PEC_EN * hwpec);
313         if (status)
314                 return status;
315
316         if (read_write == I2C_SMBUS_READ) {
317                 len = inb_p(SMBHSTDAT0(priv));
318                 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
319                         return -EPROTO;
320
321                 data->block[0] = len;
322                 for (i = 0; i < len; i++)
323                         data->block[i + 1] = inb_p(SMBBLKDAT(priv));
324         }
325         return 0;
326 }
327
328 static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
329                                                union i2c_smbus_data *data,
330                                                char read_write, int command,
331                                                int hwpec)
332 {
333         int i, len;
334         int smbcmd;
335         int status;
336         int result;
337         int timeout;
338
339         result = i801_check_pre(priv);
340         if (result < 0)
341                 return result;
342
343         len = data->block[0];
344
345         if (read_write == I2C_SMBUS_WRITE) {
346                 outb_p(len, SMBHSTDAT0(priv));
347                 outb_p(data->block[1], SMBBLKDAT(priv));
348         }
349
350         for (i = 1; i <= len; i++) {
351                 if (i == len && read_write == I2C_SMBUS_READ) {
352                         if (command == I2C_SMBUS_I2C_BLOCK_DATA)
353                                 smbcmd = I801_I2C_BLOCK_LAST;
354                         else
355                                 smbcmd = I801_BLOCK_LAST;
356                 } else {
357                         if (command == I2C_SMBUS_I2C_BLOCK_DATA
358                          && read_write == I2C_SMBUS_READ)
359                                 smbcmd = I801_I2C_BLOCK_DATA;
360                         else
361                                 smbcmd = I801_BLOCK_DATA;
362                 }
363                 outb_p(smbcmd | ENABLE_INT9, SMBHSTCNT(priv));
364
365                 if (i == 1)
366                         outb_p(inb(SMBHSTCNT(priv)) | I801_START,
367                                SMBHSTCNT(priv));
368
369                 /* We will always wait for a fraction of a second! */
370                 timeout = 0;
371                 do {
372                         msleep(1);
373                         status = inb_p(SMBHSTSTS(priv));
374                 } while ((!(status & SMBHSTSTS_BYTE_DONE))
375                          && (timeout++ < MAX_TIMEOUT));
376
377                 result = i801_check_post(priv, status, timeout > MAX_TIMEOUT);
378                 if (result < 0)
379                         return result;
380
381                 if (i == 1 && read_write == I2C_SMBUS_READ
382                  && command != I2C_SMBUS_I2C_BLOCK_DATA) {
383                         len = inb_p(SMBHSTDAT0(priv));
384                         if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
385                                 dev_err(&priv->pci_dev->dev,
386                                         "Illegal SMBus block read size %d\n",
387                                         len);
388                                 /* Recover */
389                                 while (inb_p(SMBHSTSTS(priv)) &
390                                        SMBHSTSTS_HOST_BUSY)
391                                         outb_p(SMBHSTSTS_BYTE_DONE,
392                                                SMBHSTSTS(priv));
393                                 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
394                                 return -EPROTO;
395                         }
396                         data->block[0] = len;
397                 }
398
399                 /* Retrieve/store value in SMBBLKDAT */
400                 if (read_write == I2C_SMBUS_READ)
401                         data->block[i] = inb_p(SMBBLKDAT(priv));
402                 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
403                         outb_p(data->block[i+1], SMBBLKDAT(priv));
404
405                 /* signals SMBBLKDAT ready */
406                 outb_p(SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR, SMBHSTSTS(priv));
407         }
408
409         return 0;
410 }
411
412 static int i801_set_block_buffer_mode(struct i801_priv *priv)
413 {
414         outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_E32B, SMBAUXCTL(priv));
415         if ((inb_p(SMBAUXCTL(priv)) & SMBAUXCTL_E32B) == 0)
416                 return -EIO;
417         return 0;
418 }
419
420 /* Block transaction function */
421 static int i801_block_transaction(struct i801_priv *priv,
422                                   union i2c_smbus_data *data, char read_write,
423                                   int command, int hwpec)
424 {
425         int result = 0;
426         unsigned char hostc;
427
428         if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
429                 if (read_write == I2C_SMBUS_WRITE) {
430                         /* set I2C_EN bit in configuration register */
431                         pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc);
432                         pci_write_config_byte(priv->pci_dev, SMBHSTCFG,
433                                               hostc | SMBHSTCFG_I2C_EN);
434                 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) {
435                         dev_err(&priv->pci_dev->dev,
436                                 "I2C block read is unsupported!\n");
437                         return -EOPNOTSUPP;
438                 }
439         }
440
441         if (read_write == I2C_SMBUS_WRITE
442          || command == I2C_SMBUS_I2C_BLOCK_DATA) {
443                 if (data->block[0] < 1)
444                         data->block[0] = 1;
445                 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
446                         data->block[0] = I2C_SMBUS_BLOCK_MAX;
447         } else {
448                 data->block[0] = 32;    /* max for SMBus block reads */
449         }
450
451         /* Experience has shown that the block buffer can only be used for
452            SMBus (not I2C) block transactions, even though the datasheet
453            doesn't mention this limitation. */
454         if ((priv->features & FEATURE_BLOCK_BUFFER)
455          && command != I2C_SMBUS_I2C_BLOCK_DATA
456          && i801_set_block_buffer_mode(priv) == 0)
457                 result = i801_block_transaction_by_block(priv, data,
458                                                          read_write, hwpec);
459         else
460                 result = i801_block_transaction_byte_by_byte(priv, data,
461                                                              read_write,
462                                                              command, hwpec);
463
464         if (result == 0 && hwpec)
465                 i801_wait_hwpec(priv);
466
467         if (command == I2C_SMBUS_I2C_BLOCK_DATA
468          && read_write == I2C_SMBUS_WRITE) {
469                 /* restore saved configuration register value */
470                 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc);
471         }
472         return result;
473 }
474
475 /* Return negative errno on error. */
476 static s32 i801_access(struct i2c_adapter *adap, u16 addr,
477                        unsigned short flags, char read_write, u8 command,
478                        int size, union i2c_smbus_data *data)
479 {
480         int hwpec;
481         int block = 0;
482         int ret, xact = 0;
483         struct i801_priv *priv = i2c_get_adapdata(adap);
484
485         hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
486                 && size != I2C_SMBUS_QUICK
487                 && size != I2C_SMBUS_I2C_BLOCK_DATA;
488
489         switch (size) {
490         case I2C_SMBUS_QUICK:
491                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
492                        SMBHSTADD(priv));
493                 xact = I801_QUICK;
494                 break;
495         case I2C_SMBUS_BYTE:
496                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
497                        SMBHSTADD(priv));
498                 if (read_write == I2C_SMBUS_WRITE)
499                         outb_p(command, SMBHSTCMD(priv));
500                 xact = I801_BYTE;
501                 break;
502         case I2C_SMBUS_BYTE_DATA:
503                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
504                        SMBHSTADD(priv));
505                 outb_p(command, SMBHSTCMD(priv));
506                 if (read_write == I2C_SMBUS_WRITE)
507                         outb_p(data->byte, SMBHSTDAT0(priv));
508                 xact = I801_BYTE_DATA;
509                 break;
510         case I2C_SMBUS_WORD_DATA:
511                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
512                        SMBHSTADD(priv));
513                 outb_p(command, SMBHSTCMD(priv));
514                 if (read_write == I2C_SMBUS_WRITE) {
515                         outb_p(data->word & 0xff, SMBHSTDAT0(priv));
516                         outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
517                 }
518                 xact = I801_WORD_DATA;
519                 break;
520         case I2C_SMBUS_BLOCK_DATA:
521                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
522                        SMBHSTADD(priv));
523                 outb_p(command, SMBHSTCMD(priv));
524                 block = 1;
525                 break;
526         case I2C_SMBUS_I2C_BLOCK_DATA:
527                 /* NB: page 240 of ICH5 datasheet shows that the R/#W
528                  * bit should be cleared here, even when reading */
529                 outb_p((addr & 0x7f) << 1, SMBHSTADD(priv));
530                 if (read_write == I2C_SMBUS_READ) {
531                         /* NB: page 240 of ICH5 datasheet also shows
532                          * that DATA1 is the cmd field when reading */
533                         outb_p(command, SMBHSTDAT1(priv));
534                 } else
535                         outb_p(command, SMBHSTCMD(priv));
536                 block = 1;
537                 break;
538         default:
539                 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n",
540                         size);
541                 return -EOPNOTSUPP;
542         }
543
544         if (hwpec)      /* enable/disable hardware PEC */
545                 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv));
546         else
547                 outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC),
548                        SMBAUXCTL(priv));
549
550         if (block)
551                 ret = i801_block_transaction(priv, data, read_write, size,
552                                              hwpec);
553         else
554                 ret = i801_transaction(priv, xact | ENABLE_INT9);
555
556         /* Some BIOSes don't like it when PEC is enabled at reboot or resume
557            time, so we forcibly disable it after every transaction. Turn off
558            E32B for the same reason. */
559         if (hwpec || block)
560                 outb_p(inb_p(SMBAUXCTL(priv)) &
561                        ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
562
563         if (block)
564                 return ret;
565         if (ret)
566                 return ret;
567         if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
568                 return 0;
569
570         switch (xact & 0x7f) {
571         case I801_BYTE: /* Result put in SMBHSTDAT0 */
572         case I801_BYTE_DATA:
573                 data->byte = inb_p(SMBHSTDAT0(priv));
574                 break;
575         case I801_WORD_DATA:
576                 data->word = inb_p(SMBHSTDAT0(priv)) +
577                              (inb_p(SMBHSTDAT1(priv)) << 8);
578                 break;
579         }
580         return 0;
581 }
582
583
584 static u32 i801_func(struct i2c_adapter *adapter)
585 {
586         struct i801_priv *priv = i2c_get_adapdata(adapter);
587
588         return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
589                I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
590                I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
591                ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
592                ((priv->features & FEATURE_I2C_BLOCK_READ) ?
593                 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0);
594 }
595
596 static const struct i2c_algorithm smbus_algorithm = {
597         .smbus_xfer     = i801_access,
598         .functionality  = i801_func,
599 };
600
601 static const struct pci_device_id i801_ids[] = {
602         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
603         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
604         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
605         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
606         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
607         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
608         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
609         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
610         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
611         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
612         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
613         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
614         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EP80579_1) },
615         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
616         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
617         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS) },
618         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS) },
619         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS) },
620         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0) },
621         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
622         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
623         { 0, }
624 };
625
626 MODULE_DEVICE_TABLE(pci, i801_ids);
627
628 #if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
629 static unsigned char apanel_addr;
630
631 /* Scan the system ROM for the signature "FJKEYINF" */
632 static __init const void __iomem *bios_signature(const void __iomem *bios)
633 {
634         ssize_t offset;
635         const unsigned char signature[] = "FJKEYINF";
636
637         for (offset = 0; offset < 0x10000; offset += 0x10) {
638                 if (check_signature(bios + offset, signature,
639                                     sizeof(signature)-1))
640                         return bios + offset;
641         }
642         return NULL;
643 }
644
645 static void __init input_apanel_init(void)
646 {
647         void __iomem *bios;
648         const void __iomem *p;
649
650         bios = ioremap(0xF0000, 0x10000); /* Can't fail */
651         p = bios_signature(bios);
652         if (p) {
653                 /* just use the first address */
654                 apanel_addr = readb(p + 8 + 3) >> 1;
655         }
656         iounmap(bios);
657 }
658 #else
659 static void __init input_apanel_init(void) {}
660 #endif
661
662 #if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE
663 struct dmi_onboard_device_info {
664         const char *name;
665         u8 type;
666         unsigned short i2c_addr;
667         const char *i2c_type;
668 };
669
670 static struct dmi_onboard_device_info __devinitdata dmi_devices[] = {
671         { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
672         { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
673         { "Hades",  DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
674 };
675
676 static void __devinit dmi_check_onboard_device(u8 type, const char *name,
677                                                struct i2c_adapter *adap)
678 {
679         int i;
680         struct i2c_board_info info;
681
682         for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
683                 /* & ~0x80, ignore enabled/disabled bit */
684                 if ((type & ~0x80) != dmi_devices[i].type)
685                         continue;
686                 if (strcasecmp(name, dmi_devices[i].name))
687                         continue;
688
689                 memset(&info, 0, sizeof(struct i2c_board_info));
690                 info.addr = dmi_devices[i].i2c_addr;
691                 strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
692                 i2c_new_device(adap, &info);
693                 break;
694         }
695 }
696
697 /* We use our own function to check for onboard devices instead of
698    dmi_find_device() as some buggy BIOS's have the devices we are interested
699    in marked as disabled */
700 static void __devinit dmi_check_onboard_devices(const struct dmi_header *dm,
701                                                 void *adap)
702 {
703         int i, count;
704
705         if (dm->type != 10)
706                 return;
707
708         count = (dm->length - sizeof(struct dmi_header)) / 2;
709         for (i = 0; i < count; i++) {
710                 const u8 *d = (char *)(dm + 1) + (i * 2);
711                 const char *name = ((char *) dm) + dm->length;
712                 u8 type = d[0];
713                 u8 s = d[1];
714
715                 if (!s)
716                         continue;
717                 s--;
718                 while (s > 0 && name[0]) {
719                         name += strlen(name) + 1;
720                         s--;
721                 }
722                 if (name[0] == 0) /* Bogus string reference */
723                         continue;
724
725                 dmi_check_onboard_device(type, name, adap);
726         }
727 }
728 #endif
729
730 static int __devinit i801_probe(struct pci_dev *dev,
731                                 const struct pci_device_id *id)
732 {
733         unsigned char temp;
734         int err, i;
735         struct i801_priv *priv;
736
737         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
738         if (!priv)
739                 return -ENOMEM;
740
741         i2c_set_adapdata(&priv->adapter, priv);
742         priv->adapter.owner = THIS_MODULE;
743         priv->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
744         priv->adapter.algo = &smbus_algorithm;
745
746         priv->pci_dev = dev;
747         switch (dev->device) {
748         default:
749                 priv->features |= FEATURE_I2C_BLOCK_READ;
750                 /* fall through */
751         case PCI_DEVICE_ID_INTEL_82801DB_3:
752                 priv->features |= FEATURE_SMBUS_PEC;
753                 priv->features |= FEATURE_BLOCK_BUFFER;
754                 /* fall through */
755         case PCI_DEVICE_ID_INTEL_82801CA_3:
756         case PCI_DEVICE_ID_INTEL_82801BA_2:
757         case PCI_DEVICE_ID_INTEL_82801AB_3:
758         case PCI_DEVICE_ID_INTEL_82801AA_3:
759                 break;
760         }
761
762         /* Disable features on user request */
763         for (i = 0; i < ARRAY_SIZE(i801_feature_names); i++) {
764                 if (priv->features & disable_features & (1 << i))
765                         dev_notice(&dev->dev, "%s disabled by user\n",
766                                    i801_feature_names[i]);
767         }
768         priv->features &= ~disable_features;
769
770         err = pci_enable_device(dev);
771         if (err) {
772                 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
773                         err);
774                 goto exit;
775         }
776
777         /* Determine the address of the SMBus area */
778         priv->smba = pci_resource_start(dev, SMBBAR);
779         if (!priv->smba) {
780                 dev_err(&dev->dev, "SMBus base address uninitialized, "
781                         "upgrade BIOS\n");
782                 err = -ENODEV;
783                 goto exit;
784         }
785
786         err = acpi_check_resource_conflict(&dev->resource[SMBBAR]);
787         if (err) {
788                 err = -ENODEV;
789                 goto exit;
790         }
791
792         err = pci_request_region(dev, SMBBAR, i801_driver.name);
793         if (err) {
794                 dev_err(&dev->dev, "Failed to request SMBus region "
795                         "0x%lx-0x%Lx\n", priv->smba,
796                         (unsigned long long)pci_resource_end(dev, SMBBAR));
797                 goto exit;
798         }
799
800         pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &temp);
801         priv->original_hstcfg = temp;
802         temp &= ~SMBHSTCFG_I2C_EN;      /* SMBus timing */
803         if (!(temp & SMBHSTCFG_HST_EN)) {
804                 dev_info(&dev->dev, "Enabling SMBus device\n");
805                 temp |= SMBHSTCFG_HST_EN;
806         }
807         pci_write_config_byte(priv->pci_dev, SMBHSTCFG, temp);
808
809         if (temp & SMBHSTCFG_SMB_SMI_EN)
810                 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
811         else
812                 dev_dbg(&dev->dev, "SMBus using PCI Interrupt\n");
813
814         /* Clear special mode bits */
815         if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
816                 outb_p(inb_p(SMBAUXCTL(priv)) &
817                        ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
818
819         /* set up the sysfs linkage to our parent device */
820         priv->adapter.dev.parent = &dev->dev;
821
822         /* Retry up to 3 times on lost arbitration */
823         priv->adapter.retries = 3;
824
825         snprintf(priv->adapter.name, sizeof(priv->adapter.name),
826                 "SMBus I801 adapter at %04lx", priv->smba);
827         err = i2c_add_adapter(&priv->adapter);
828         if (err) {
829                 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
830                 goto exit_release;
831         }
832
833         /* Register optional slaves */
834 #if defined CONFIG_INPUT_APANEL || defined CONFIG_INPUT_APANEL_MODULE
835         if (apanel_addr) {
836                 struct i2c_board_info info;
837
838                 memset(&info, 0, sizeof(struct i2c_board_info));
839                 info.addr = apanel_addr;
840                 strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
841                 i2c_new_device(&priv->adapter, &info);
842         }
843 #endif
844 #if defined CONFIG_SENSORS_FSCHMD || defined CONFIG_SENSORS_FSCHMD_MODULE
845         if (dmi_name_in_vendors("FUJITSU"))
846                 dmi_walk(dmi_check_onboard_devices, &priv->adapter);
847 #endif
848
849         pci_set_drvdata(dev, priv);
850         return 0;
851
852 exit_release:
853         pci_release_region(dev, SMBBAR);
854 exit:
855         kfree(priv);
856         return err;
857 }
858
859 static void __devexit i801_remove(struct pci_dev *dev)
860 {
861         struct i801_priv *priv = pci_get_drvdata(dev);
862
863         i2c_del_adapter(&priv->adapter);
864         pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
865         pci_release_region(dev, SMBBAR);
866         pci_set_drvdata(dev, NULL);
867         kfree(priv);
868         /*
869          * do not call pci_disable_device(dev) since it can cause hard hangs on
870          * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
871          */
872 }
873
874 #ifdef CONFIG_PM
875 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
876 {
877         struct i801_priv *priv = pci_get_drvdata(dev);
878
879         pci_save_state(dev);
880         pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
881         pci_set_power_state(dev, pci_choose_state(dev, mesg));
882         return 0;
883 }
884
885 static int i801_resume(struct pci_dev *dev)
886 {
887         pci_set_power_state(dev, PCI_D0);
888         pci_restore_state(dev);
889         return pci_enable_device(dev);
890 }
891 #else
892 #define i801_suspend NULL
893 #define i801_resume NULL
894 #endif
895
896 static struct pci_driver i801_driver = {
897         .name           = "i801_smbus",
898         .id_table       = i801_ids,
899         .probe          = i801_probe,
900         .remove         = __devexit_p(i801_remove),
901         .suspend        = i801_suspend,
902         .resume         = i801_resume,
903 };
904
905 static int __init i2c_i801_init(void)
906 {
907         input_apanel_init();
908         return pci_register_driver(&i801_driver);
909 }
910
911 static void __exit i2c_i801_exit(void)
912 {
913         pci_unregister_driver(&i801_driver);
914 }
915
916 MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>, "
917               "Jean Delvare <khali@linux-fr.org>");
918 MODULE_DESCRIPTION("I801 SMBus driver");
919 MODULE_LICENSE("GPL");
920
921 module_init(i2c_i801_init);
922 module_exit(i2c_i801_exit);