]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/i2c/busses/i2c-i801.c
Merge remote-tracking branch 'hid/for-next'
[karo-tx-linux.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 - 2014  Jean Delvare <jdelvare@suse.de>
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
20 /*
21  * Supports the following Intel I/O Controller Hubs (ICH):
22  *
23  *                                      I/O                     Block   I2C
24  *                                      region  SMBus   Block   proc.   block
25  * Chip name                    PCI ID  size    PEC     buffer  call    read
26  * ---------------------------------------------------------------------------
27  * 82801AA (ICH)                0x2413  16      no      no      no      no
28  * 82801AB (ICH0)               0x2423  16      no      no      no      no
29  * 82801BA (ICH2)               0x2443  16      no      no      no      no
30  * 82801CA (ICH3)               0x2483  32      soft    no      no      no
31  * 82801DB (ICH4)               0x24c3  32      hard    yes     no      no
32  * 82801E (ICH5)                0x24d3  32      hard    yes     yes     yes
33  * 6300ESB                      0x25a4  32      hard    yes     yes     yes
34  * 82801F (ICH6)                0x266a  32      hard    yes     yes     yes
35  * 6310ESB/6320ESB              0x269b  32      hard    yes     yes     yes
36  * 82801G (ICH7)                0x27da  32      hard    yes     yes     yes
37  * 82801H (ICH8)                0x283e  32      hard    yes     yes     yes
38  * 82801I (ICH9)                0x2930  32      hard    yes     yes     yes
39  * EP80579 (Tolapai)            0x5032  32      hard    yes     yes     yes
40  * ICH10                        0x3a30  32      hard    yes     yes     yes
41  * ICH10                        0x3a60  32      hard    yes     yes     yes
42  * 5/3400 Series (PCH)          0x3b30  32      hard    yes     yes     yes
43  * 6 Series (PCH)               0x1c22  32      hard    yes     yes     yes
44  * Patsburg (PCH)               0x1d22  32      hard    yes     yes     yes
45  * Patsburg (PCH) IDF           0x1d70  32      hard    yes     yes     yes
46  * Patsburg (PCH) IDF           0x1d71  32      hard    yes     yes     yes
47  * Patsburg (PCH) IDF           0x1d72  32      hard    yes     yes     yes
48  * DH89xxCC (PCH)               0x2330  32      hard    yes     yes     yes
49  * Panther Point (PCH)          0x1e22  32      hard    yes     yes     yes
50  * Lynx Point (PCH)             0x8c22  32      hard    yes     yes     yes
51  * Lynx Point-LP (PCH)          0x9c22  32      hard    yes     yes     yes
52  * Avoton (SOC)                 0x1f3c  32      hard    yes     yes     yes
53  * Wellsburg (PCH)              0x8d22  32      hard    yes     yes     yes
54  * Wellsburg (PCH) MS           0x8d7d  32      hard    yes     yes     yes
55  * Wellsburg (PCH) MS           0x8d7e  32      hard    yes     yes     yes
56  * Wellsburg (PCH) MS           0x8d7f  32      hard    yes     yes     yes
57  * Coleto Creek (PCH)           0x23b0  32      hard    yes     yes     yes
58  * Wildcat Point (PCH)          0x8ca2  32      hard    yes     yes     yes
59  * Wildcat Point-LP (PCH)       0x9ca2  32      hard    yes     yes     yes
60  * BayTrail (SOC)               0x0f12  32      hard    yes     yes     yes
61  * Sunrise Point-H (PCH)        0xa123  32      hard    yes     yes     yes
62  * Sunrise Point-LP (PCH)       0x9d23  32      hard    yes     yes     yes
63  *
64  * Features supported by this driver:
65  * Software PEC                         no
66  * Hardware PEC                         yes
67  * Block buffer                         yes
68  * Block process call transaction       no
69  * I2C block read transaction           yes (doesn't use the block buffer)
70  * Slave mode                           no
71  * Interrupt processing                 yes
72  *
73  * See the file Documentation/i2c/busses/i2c-i801 for details.
74  */
75
76 #include <linux/interrupt.h>
77 #include <linux/module.h>
78 #include <linux/pci.h>
79 #include <linux/kernel.h>
80 #include <linux/stddef.h>
81 #include <linux/delay.h>
82 #include <linux/ioport.h>
83 #include <linux/init.h>
84 #include <linux/i2c.h>
85 #include <linux/acpi.h>
86 #include <linux/io.h>
87 #include <linux/dmi.h>
88 #include <linux/slab.h>
89 #include <linux/wait.h>
90 #include <linux/err.h>
91 #include <linux/platform_device.h>
92 #include <linux/platform_data/itco_wdt.h>
93
94 #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \
95                 defined CONFIG_DMI
96 #include <linux/gpio.h>
97 #include <linux/i2c-mux-gpio.h>
98 #endif
99
100 /* I801 SMBus address offsets */
101 #define SMBHSTSTS(p)    (0 + (p)->smba)
102 #define SMBHSTCNT(p)    (2 + (p)->smba)
103 #define SMBHSTCMD(p)    (3 + (p)->smba)
104 #define SMBHSTADD(p)    (4 + (p)->smba)
105 #define SMBHSTDAT0(p)   (5 + (p)->smba)
106 #define SMBHSTDAT1(p)   (6 + (p)->smba)
107 #define SMBBLKDAT(p)    (7 + (p)->smba)
108 #define SMBPEC(p)       (8 + (p)->smba)         /* ICH3 and later */
109 #define SMBAUXSTS(p)    (12 + (p)->smba)        /* ICH4 and later */
110 #define SMBAUXCTL(p)    (13 + (p)->smba)        /* ICH4 and later */
111
112 /* PCI Address Constants */
113 #define SMBBAR          4
114 #define SMBPCICTL       0x004
115 #define SMBPCISTS       0x006
116 #define SMBHSTCFG       0x040
117 #define TCOBASE         0x050
118 #define TCOCTL          0x054
119
120 #define ACPIBASE                0x040
121 #define ACPIBASE_SMI_OFF        0x030
122 #define ACPICTRL                0x044
123 #define ACPICTRL_EN             0x080
124
125 #define SBREG_BAR               0x10
126 #define SBREG_SMBCTRL           0xc6000c
127
128 /* Host status bits for SMBPCISTS */
129 #define SMBPCISTS_INTS          0x08
130
131 /* Control bits for SMBPCICTL */
132 #define SMBPCICTL_INTDIS        0x0400
133
134 /* Host configuration bits for SMBHSTCFG */
135 #define SMBHSTCFG_HST_EN        1
136 #define SMBHSTCFG_SMB_SMI_EN    2
137 #define SMBHSTCFG_I2C_EN        4
138
139 /* TCO configuration bits for TCOCTL */
140 #define TCOCTL_EN               0x0100
141
142 /* Auxiliary control register bits, ICH4+ only */
143 #define SMBAUXCTL_CRC           1
144 #define SMBAUXCTL_E32B          2
145
146 /* Other settings */
147 #define MAX_RETRIES             400
148
149 /* I801 command constants */
150 #define I801_QUICK              0x00
151 #define I801_BYTE               0x04
152 #define I801_BYTE_DATA          0x08
153 #define I801_WORD_DATA          0x0C
154 #define I801_PROC_CALL          0x10    /* unimplemented */
155 #define I801_BLOCK_DATA         0x14
156 #define I801_I2C_BLOCK_DATA     0x18    /* ICH5 and later */
157
158 /* I801 Host Control register bits */
159 #define SMBHSTCNT_INTREN        0x01
160 #define SMBHSTCNT_KILL          0x02
161 #define SMBHSTCNT_LAST_BYTE     0x20
162 #define SMBHSTCNT_START         0x40
163 #define SMBHSTCNT_PEC_EN        0x80    /* ICH3 and later */
164
165 /* I801 Hosts Status register bits */
166 #define SMBHSTSTS_BYTE_DONE     0x80
167 #define SMBHSTSTS_INUSE_STS     0x40
168 #define SMBHSTSTS_SMBALERT_STS  0x20
169 #define SMBHSTSTS_FAILED        0x10
170 #define SMBHSTSTS_BUS_ERR       0x08
171 #define SMBHSTSTS_DEV_ERR       0x04
172 #define SMBHSTSTS_INTR          0x02
173 #define SMBHSTSTS_HOST_BUSY     0x01
174
175 #define STATUS_ERROR_FLAGS      (SMBHSTSTS_FAILED | SMBHSTSTS_BUS_ERR | \
176                                  SMBHSTSTS_DEV_ERR)
177
178 #define STATUS_FLAGS            (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR | \
179                                  STATUS_ERROR_FLAGS)
180
181 /* Older devices have their ID defined in <linux/pci_ids.h> */
182 #define PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS              0x0f12
183 #define PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS              0x2292
184 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS           0x1c22
185 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS              0x1d22
186 /* Patsburg also has three 'Integrated Device Function' SMBus controllers */
187 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0         0x1d70
188 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1         0x1d71
189 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2         0x1d72
190 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS          0x1e22
191 #define PCI_DEVICE_ID_INTEL_AVOTON_SMBUS                0x1f3c
192 #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS              0x2330
193 #define PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS           0x23b0
194 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS         0x3b30
195 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS             0x8c22
196 #define PCI_DEVICE_ID_INTEL_WILDCATPOINT_SMBUS          0x8ca2
197 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS             0x8d22
198 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0         0x8d7d
199 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1         0x8d7e
200 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2         0x8d7f
201 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS          0x9c22
202 #define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS       0x9ca2
203 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS        0xa123
204 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS       0x9d23
205
206 struct i801_mux_config {
207         char *gpio_chip;
208         unsigned values[3];
209         int n_values;
210         unsigned classes[3];
211         unsigned gpios[2];              /* Relative to gpio_chip->base */
212         int n_gpios;
213 };
214
215 struct i801_priv {
216         struct i2c_adapter adapter;
217         unsigned long smba;
218         unsigned char original_hstcfg;
219         struct pci_dev *pci_dev;
220         unsigned int features;
221
222         /* isr processing */
223         wait_queue_head_t waitq;
224         u8 status;
225
226         /* Command state used by isr for byte-by-byte block transactions */
227         u8 cmd;
228         bool is_read;
229         int count;
230         int len;
231         u8 *data;
232
233 #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \
234                 defined CONFIG_DMI
235         const struct i801_mux_config *mux_drvdata;
236         struct platform_device *mux_pdev;
237 #endif
238         struct platform_device *tco_pdev;
239 };
240
241 #define FEATURE_SMBUS_PEC       (1 << 0)
242 #define FEATURE_BLOCK_BUFFER    (1 << 1)
243 #define FEATURE_BLOCK_PROC      (1 << 2)
244 #define FEATURE_I2C_BLOCK_READ  (1 << 3)
245 #define FEATURE_IRQ             (1 << 4)
246 /* Not really a feature, but it's convenient to handle it as such */
247 #define FEATURE_IDF             (1 << 15)
248 #define FEATURE_TCO             (1 << 16)
249
250 static const char *i801_feature_names[] = {
251         "SMBus PEC",
252         "Block buffer",
253         "Block process call",
254         "I2C block read",
255         "Interrupt",
256 };
257
258 static unsigned int disable_features;
259 module_param(disable_features, uint, S_IRUGO | S_IWUSR);
260 MODULE_PARM_DESC(disable_features, "Disable selected driver features:\n"
261         "\t\t  0x01  disable SMBus PEC\n"
262         "\t\t  0x02  disable the block buffer\n"
263         "\t\t  0x08  disable the I2C block read functionality\n"
264         "\t\t  0x10  don't use interrupts ");
265
266 /* Make sure the SMBus host is ready to start transmitting.
267    Return 0 if it is, -EBUSY if it is not. */
268 static int i801_check_pre(struct i801_priv *priv)
269 {
270         int status;
271
272         status = inb_p(SMBHSTSTS(priv));
273         if (status & SMBHSTSTS_HOST_BUSY) {
274                 dev_err(&priv->pci_dev->dev, "SMBus is busy, can't use it!\n");
275                 return -EBUSY;
276         }
277
278         status &= STATUS_FLAGS;
279         if (status) {
280                 dev_dbg(&priv->pci_dev->dev, "Clearing status flags (%02x)\n",
281                         status);
282                 outb_p(status, SMBHSTSTS(priv));
283                 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
284                 if (status) {
285                         dev_err(&priv->pci_dev->dev,
286                                 "Failed clearing status flags (%02x)\n",
287                                 status);
288                         return -EBUSY;
289                 }
290         }
291
292         return 0;
293 }
294
295 /*
296  * Convert the status register to an error code, and clear it.
297  * Note that status only contains the bits we want to clear, not the
298  * actual register value.
299  */
300 static int i801_check_post(struct i801_priv *priv, int status)
301 {
302         int result = 0;
303
304         /*
305          * If the SMBus is still busy, we give up
306          * Note: This timeout condition only happens when using polling
307          * transactions.  For interrupt operation, NAK/timeout is indicated by
308          * DEV_ERR.
309          */
310         if (unlikely(status < 0)) {
311                 dev_err(&priv->pci_dev->dev, "Transaction timeout\n");
312                 /* try to stop the current command */
313                 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");
314                 outb_p(inb_p(SMBHSTCNT(priv)) | SMBHSTCNT_KILL,
315                        SMBHSTCNT(priv));
316                 usleep_range(1000, 2000);
317                 outb_p(inb_p(SMBHSTCNT(priv)) & (~SMBHSTCNT_KILL),
318                        SMBHSTCNT(priv));
319
320                 /* Check if it worked */
321                 status = inb_p(SMBHSTSTS(priv));
322                 if ((status & SMBHSTSTS_HOST_BUSY) ||
323                     !(status & SMBHSTSTS_FAILED))
324                         dev_err(&priv->pci_dev->dev,
325                                 "Failed terminating the transaction\n");
326                 outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
327                 return -ETIMEDOUT;
328         }
329
330         if (status & SMBHSTSTS_FAILED) {
331                 result = -EIO;
332                 dev_err(&priv->pci_dev->dev, "Transaction failed\n");
333         }
334         if (status & SMBHSTSTS_DEV_ERR) {
335                 result = -ENXIO;
336                 dev_dbg(&priv->pci_dev->dev, "No response\n");
337         }
338         if (status & SMBHSTSTS_BUS_ERR) {
339                 result = -EAGAIN;
340                 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
341         }
342
343         /* Clear status flags except BYTE_DONE, to be cleared by caller */
344         outb_p(status, SMBHSTSTS(priv));
345
346         return result;
347 }
348
349 /* Wait for BUSY being cleared and either INTR or an error flag being set */
350 static int i801_wait_intr(struct i801_priv *priv)
351 {
352         int timeout = 0;
353         int status;
354
355         /* We will always wait for a fraction of a second! */
356         do {
357                 usleep_range(250, 500);
358                 status = inb_p(SMBHSTSTS(priv));
359         } while (((status & SMBHSTSTS_HOST_BUSY) ||
360                   !(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR))) &&
361                  (timeout++ < MAX_RETRIES));
362
363         if (timeout > MAX_RETRIES) {
364                 dev_dbg(&priv->pci_dev->dev, "INTR Timeout!\n");
365                 return -ETIMEDOUT;
366         }
367         return status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR);
368 }
369
370 /* Wait for either BYTE_DONE or an error flag being set */
371 static int i801_wait_byte_done(struct i801_priv *priv)
372 {
373         int timeout = 0;
374         int status;
375
376         /* We will always wait for a fraction of a second! */
377         do {
378                 usleep_range(250, 500);
379                 status = inb_p(SMBHSTSTS(priv));
380         } while (!(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE)) &&
381                  (timeout++ < MAX_RETRIES));
382
383         if (timeout > MAX_RETRIES) {
384                 dev_dbg(&priv->pci_dev->dev, "BYTE_DONE Timeout!\n");
385                 return -ETIMEDOUT;
386         }
387         return status & STATUS_ERROR_FLAGS;
388 }
389
390 static int i801_transaction(struct i801_priv *priv, int xact)
391 {
392         int status;
393         int result;
394         const struct i2c_adapter *adap = &priv->adapter;
395
396         result = i801_check_pre(priv);
397         if (result < 0)
398                 return result;
399
400         if (priv->features & FEATURE_IRQ) {
401                 outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START,
402                        SMBHSTCNT(priv));
403                 result = wait_event_timeout(priv->waitq,
404                                             (status = priv->status),
405                                             adap->timeout);
406                 if (!result) {
407                         status = -ETIMEDOUT;
408                         dev_warn(&priv->pci_dev->dev,
409                                  "Timeout waiting for interrupt!\n");
410                 }
411                 priv->status = 0;
412                 return i801_check_post(priv, status);
413         }
414
415         /* the current contents of SMBHSTCNT can be overwritten, since PEC,
416          * SMBSCMD are passed in xact */
417         outb_p(xact | SMBHSTCNT_START, SMBHSTCNT(priv));
418
419         status = i801_wait_intr(priv);
420         return i801_check_post(priv, status);
421 }
422
423 static int i801_block_transaction_by_block(struct i801_priv *priv,
424                                            union i2c_smbus_data *data,
425                                            char read_write, int hwpec)
426 {
427         int i, len;
428         int status;
429
430         inb_p(SMBHSTCNT(priv)); /* reset the data buffer index */
431
432         /* Use 32-byte buffer to process this transaction */
433         if (read_write == I2C_SMBUS_WRITE) {
434                 len = data->block[0];
435                 outb_p(len, SMBHSTDAT0(priv));
436                 for (i = 0; i < len; i++)
437                         outb_p(data->block[i+1], SMBBLKDAT(priv));
438         }
439
440         status = i801_transaction(priv, I801_BLOCK_DATA |
441                                   (hwpec ? SMBHSTCNT_PEC_EN : 0));
442         if (status)
443                 return status;
444
445         if (read_write == I2C_SMBUS_READ) {
446                 len = inb_p(SMBHSTDAT0(priv));
447                 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
448                         return -EPROTO;
449
450                 data->block[0] = len;
451                 for (i = 0; i < len; i++)
452                         data->block[i + 1] = inb_p(SMBBLKDAT(priv));
453         }
454         return 0;
455 }
456
457 static void i801_isr_byte_done(struct i801_priv *priv)
458 {
459         if (priv->is_read) {
460                 /* For SMBus block reads, length is received with first byte */
461                 if (((priv->cmd & 0x1c) == I801_BLOCK_DATA) &&
462                     (priv->count == 0)) {
463                         priv->len = inb_p(SMBHSTDAT0(priv));
464                         if (priv->len < 1 || priv->len > I2C_SMBUS_BLOCK_MAX) {
465                                 dev_err(&priv->pci_dev->dev,
466                                         "Illegal SMBus block read size %d\n",
467                                         priv->len);
468                                 /* FIXME: Recover */
469                                 priv->len = I2C_SMBUS_BLOCK_MAX;
470                         } else {
471                                 dev_dbg(&priv->pci_dev->dev,
472                                         "SMBus block read size is %d\n",
473                                         priv->len);
474                         }
475                         priv->data[-1] = priv->len;
476                 }
477
478                 /* Read next byte */
479                 if (priv->count < priv->len)
480                         priv->data[priv->count++] = inb(SMBBLKDAT(priv));
481                 else
482                         dev_dbg(&priv->pci_dev->dev,
483                                 "Discarding extra byte on block read\n");
484
485                 /* Set LAST_BYTE for last byte of read transaction */
486                 if (priv->count == priv->len - 1)
487                         outb_p(priv->cmd | SMBHSTCNT_LAST_BYTE,
488                                SMBHSTCNT(priv));
489         } else if (priv->count < priv->len - 1) {
490                 /* Write next byte, except for IRQ after last byte */
491                 outb_p(priv->data[++priv->count], SMBBLKDAT(priv));
492         }
493
494         /* Clear BYTE_DONE to continue with next byte */
495         outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
496 }
497
498 /*
499  * There are two kinds of interrupts:
500  *
501  * 1) i801 signals transaction completion with one of these interrupts:
502  *      INTR - Success
503  *      DEV_ERR - Invalid command, NAK or communication timeout
504  *      BUS_ERR - SMI# transaction collision
505  *      FAILED - transaction was canceled due to a KILL request
506  *    When any of these occur, update ->status and wake up the waitq.
507  *    ->status must be cleared before kicking off the next transaction.
508  *
509  * 2) For byte-by-byte (I2C read/write) transactions, one BYTE_DONE interrupt
510  *    occurs for each byte of a byte-by-byte to prepare the next byte.
511  */
512 static irqreturn_t i801_isr(int irq, void *dev_id)
513 {
514         struct i801_priv *priv = dev_id;
515         u16 pcists;
516         u8 status;
517
518         /* Confirm this is our interrupt */
519         pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists);
520         if (!(pcists & SMBPCISTS_INTS))
521                 return IRQ_NONE;
522
523         status = inb_p(SMBHSTSTS(priv));
524         if (status & SMBHSTSTS_BYTE_DONE)
525                 i801_isr_byte_done(priv);
526
527         /*
528          * Clear irq sources and report transaction result.
529          * ->status must be cleared before the next transaction is started.
530          */
531         status &= SMBHSTSTS_INTR | STATUS_ERROR_FLAGS;
532         if (status) {
533                 outb_p(status, SMBHSTSTS(priv));
534                 priv->status |= status;
535                 wake_up(&priv->waitq);
536         }
537
538         return IRQ_HANDLED;
539 }
540
541 /*
542  * For "byte-by-byte" block transactions:
543  *   I2C write uses cmd=I801_BLOCK_DATA, I2C_EN=1
544  *   I2C read uses cmd=I801_I2C_BLOCK_DATA
545  */
546 static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
547                                                union i2c_smbus_data *data,
548                                                char read_write, int command,
549                                                int hwpec)
550 {
551         int i, len;
552         int smbcmd;
553         int status;
554         int result;
555         const struct i2c_adapter *adap = &priv->adapter;
556
557         result = i801_check_pre(priv);
558         if (result < 0)
559                 return result;
560
561         len = data->block[0];
562
563         if (read_write == I2C_SMBUS_WRITE) {
564                 outb_p(len, SMBHSTDAT0(priv));
565                 outb_p(data->block[1], SMBBLKDAT(priv));
566         }
567
568         if (command == I2C_SMBUS_I2C_BLOCK_DATA &&
569             read_write == I2C_SMBUS_READ)
570                 smbcmd = I801_I2C_BLOCK_DATA;
571         else
572                 smbcmd = I801_BLOCK_DATA;
573
574         if (priv->features & FEATURE_IRQ) {
575                 priv->is_read = (read_write == I2C_SMBUS_READ);
576                 if (len == 1 && priv->is_read)
577                         smbcmd |= SMBHSTCNT_LAST_BYTE;
578                 priv->cmd = smbcmd | SMBHSTCNT_INTREN;
579                 priv->len = len;
580                 priv->count = 0;
581                 priv->data = &data->block[1];
582
583                 outb_p(priv->cmd | SMBHSTCNT_START, SMBHSTCNT(priv));
584                 result = wait_event_timeout(priv->waitq,
585                                             (status = priv->status),
586                                             adap->timeout);
587                 if (!result) {
588                         status = -ETIMEDOUT;
589                         dev_warn(&priv->pci_dev->dev,
590                                  "Timeout waiting for interrupt!\n");
591                 }
592                 priv->status = 0;
593                 return i801_check_post(priv, status);
594         }
595
596         for (i = 1; i <= len; i++) {
597                 if (i == len && read_write == I2C_SMBUS_READ)
598                         smbcmd |= SMBHSTCNT_LAST_BYTE;
599                 outb_p(smbcmd, SMBHSTCNT(priv));
600
601                 if (i == 1)
602                         outb_p(inb(SMBHSTCNT(priv)) | SMBHSTCNT_START,
603                                SMBHSTCNT(priv));
604
605                 status = i801_wait_byte_done(priv);
606                 if (status)
607                         goto exit;
608
609                 if (i == 1 && read_write == I2C_SMBUS_READ
610                  && command != I2C_SMBUS_I2C_BLOCK_DATA) {
611                         len = inb_p(SMBHSTDAT0(priv));
612                         if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
613                                 dev_err(&priv->pci_dev->dev,
614                                         "Illegal SMBus block read size %d\n",
615                                         len);
616                                 /* Recover */
617                                 while (inb_p(SMBHSTSTS(priv)) &
618                                        SMBHSTSTS_HOST_BUSY)
619                                         outb_p(SMBHSTSTS_BYTE_DONE,
620                                                SMBHSTSTS(priv));
621                                 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
622                                 return -EPROTO;
623                         }
624                         data->block[0] = len;
625                 }
626
627                 /* Retrieve/store value in SMBBLKDAT */
628                 if (read_write == I2C_SMBUS_READ)
629                         data->block[i] = inb_p(SMBBLKDAT(priv));
630                 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
631                         outb_p(data->block[i+1], SMBBLKDAT(priv));
632
633                 /* signals SMBBLKDAT ready */
634                 outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
635         }
636
637         status = i801_wait_intr(priv);
638 exit:
639         return i801_check_post(priv, status);
640 }
641
642 static int i801_set_block_buffer_mode(struct i801_priv *priv)
643 {
644         outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_E32B, SMBAUXCTL(priv));
645         if ((inb_p(SMBAUXCTL(priv)) & SMBAUXCTL_E32B) == 0)
646                 return -EIO;
647         return 0;
648 }
649
650 /* Block transaction function */
651 static int i801_block_transaction(struct i801_priv *priv,
652                                   union i2c_smbus_data *data, char read_write,
653                                   int command, int hwpec)
654 {
655         int result = 0;
656         unsigned char hostc;
657
658         if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
659                 if (read_write == I2C_SMBUS_WRITE) {
660                         /* set I2C_EN bit in configuration register */
661                         pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc);
662                         pci_write_config_byte(priv->pci_dev, SMBHSTCFG,
663                                               hostc | SMBHSTCFG_I2C_EN);
664                 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) {
665                         dev_err(&priv->pci_dev->dev,
666                                 "I2C block read is unsupported!\n");
667                         return -EOPNOTSUPP;
668                 }
669         }
670
671         if (read_write == I2C_SMBUS_WRITE
672          || command == I2C_SMBUS_I2C_BLOCK_DATA) {
673                 if (data->block[0] < 1)
674                         data->block[0] = 1;
675                 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
676                         data->block[0] = I2C_SMBUS_BLOCK_MAX;
677         } else {
678                 data->block[0] = 32;    /* max for SMBus block reads */
679         }
680
681         /* Experience has shown that the block buffer can only be used for
682            SMBus (not I2C) block transactions, even though the datasheet
683            doesn't mention this limitation. */
684         if ((priv->features & FEATURE_BLOCK_BUFFER)
685          && command != I2C_SMBUS_I2C_BLOCK_DATA
686          && i801_set_block_buffer_mode(priv) == 0)
687                 result = i801_block_transaction_by_block(priv, data,
688                                                          read_write, hwpec);
689         else
690                 result = i801_block_transaction_byte_by_byte(priv, data,
691                                                              read_write,
692                                                              command, hwpec);
693
694         if (command == I2C_SMBUS_I2C_BLOCK_DATA
695          && read_write == I2C_SMBUS_WRITE) {
696                 /* restore saved configuration register value */
697                 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc);
698         }
699         return result;
700 }
701
702 /* Return negative errno on error. */
703 static s32 i801_access(struct i2c_adapter *adap, u16 addr,
704                        unsigned short flags, char read_write, u8 command,
705                        int size, union i2c_smbus_data *data)
706 {
707         int hwpec;
708         int block = 0;
709         int ret, xact = 0;
710         struct i801_priv *priv = i2c_get_adapdata(adap);
711
712         hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
713                 && size != I2C_SMBUS_QUICK
714                 && size != I2C_SMBUS_I2C_BLOCK_DATA;
715
716         switch (size) {
717         case I2C_SMBUS_QUICK:
718                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
719                        SMBHSTADD(priv));
720                 xact = I801_QUICK;
721                 break;
722         case I2C_SMBUS_BYTE:
723                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
724                        SMBHSTADD(priv));
725                 if (read_write == I2C_SMBUS_WRITE)
726                         outb_p(command, SMBHSTCMD(priv));
727                 xact = I801_BYTE;
728                 break;
729         case I2C_SMBUS_BYTE_DATA:
730                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
731                        SMBHSTADD(priv));
732                 outb_p(command, SMBHSTCMD(priv));
733                 if (read_write == I2C_SMBUS_WRITE)
734                         outb_p(data->byte, SMBHSTDAT0(priv));
735                 xact = I801_BYTE_DATA;
736                 break;
737         case I2C_SMBUS_WORD_DATA:
738                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
739                        SMBHSTADD(priv));
740                 outb_p(command, SMBHSTCMD(priv));
741                 if (read_write == I2C_SMBUS_WRITE) {
742                         outb_p(data->word & 0xff, SMBHSTDAT0(priv));
743                         outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
744                 }
745                 xact = I801_WORD_DATA;
746                 break;
747         case I2C_SMBUS_BLOCK_DATA:
748                 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
749                        SMBHSTADD(priv));
750                 outb_p(command, SMBHSTCMD(priv));
751                 block = 1;
752                 break;
753         case I2C_SMBUS_I2C_BLOCK_DATA:
754                 /* NB: page 240 of ICH5 datasheet shows that the R/#W
755                  * bit should be cleared here, even when reading */
756                 outb_p((addr & 0x7f) << 1, SMBHSTADD(priv));
757                 if (read_write == I2C_SMBUS_READ) {
758                         /* NB: page 240 of ICH5 datasheet also shows
759                          * that DATA1 is the cmd field when reading */
760                         outb_p(command, SMBHSTDAT1(priv));
761                 } else
762                         outb_p(command, SMBHSTCMD(priv));
763                 block = 1;
764                 break;
765         default:
766                 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n",
767                         size);
768                 return -EOPNOTSUPP;
769         }
770
771         if (hwpec)      /* enable/disable hardware PEC */
772                 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv));
773         else
774                 outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC),
775                        SMBAUXCTL(priv));
776
777         if (block)
778                 ret = i801_block_transaction(priv, data, read_write, size,
779                                              hwpec);
780         else
781                 ret = i801_transaction(priv, xact);
782
783         /* Some BIOSes don't like it when PEC is enabled at reboot or resume
784            time, so we forcibly disable it after every transaction. Turn off
785            E32B for the same reason. */
786         if (hwpec || block)
787                 outb_p(inb_p(SMBAUXCTL(priv)) &
788                        ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
789
790         if (block)
791                 return ret;
792         if (ret)
793                 return ret;
794         if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
795                 return 0;
796
797         switch (xact & 0x7f) {
798         case I801_BYTE: /* Result put in SMBHSTDAT0 */
799         case I801_BYTE_DATA:
800                 data->byte = inb_p(SMBHSTDAT0(priv));
801                 break;
802         case I801_WORD_DATA:
803                 data->word = inb_p(SMBHSTDAT0(priv)) +
804                              (inb_p(SMBHSTDAT1(priv)) << 8);
805                 break;
806         }
807         return 0;
808 }
809
810
811 static u32 i801_func(struct i2c_adapter *adapter)
812 {
813         struct i801_priv *priv = i2c_get_adapdata(adapter);
814
815         return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
816                I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
817                I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
818                ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
819                ((priv->features & FEATURE_I2C_BLOCK_READ) ?
820                 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0);
821 }
822
823 static const struct i2c_algorithm smbus_algorithm = {
824         .smbus_xfer     = i801_access,
825         .functionality  = i801_func,
826 };
827
828 static const struct pci_device_id i801_ids[] = {
829         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
830         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
831         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
832         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
833         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
834         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
835         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
836         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
837         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
838         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
839         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
840         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
841         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EP80579_1) },
842         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
843         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
844         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS) },
845         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS) },
846         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS) },
847         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0) },
848         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
849         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
850         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
851         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) },
852         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) },
853         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS) },
854         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMBUS) },
855         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS) },
856         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0) },
857         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1) },
858         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2) },
859         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS) },
860         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_SMBUS) },
861         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS) },
862         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS) },
863         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS) },
864         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS) },
865         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS) },
866         { 0, }
867 };
868
869 MODULE_DEVICE_TABLE(pci, i801_ids);
870
871 #if defined CONFIG_X86 && defined CONFIG_DMI
872 static unsigned char apanel_addr;
873
874 /* Scan the system ROM for the signature "FJKEYINF" */
875 static __init const void __iomem *bios_signature(const void __iomem *bios)
876 {
877         ssize_t offset;
878         const unsigned char signature[] = "FJKEYINF";
879
880         for (offset = 0; offset < 0x10000; offset += 0x10) {
881                 if (check_signature(bios + offset, signature,
882                                     sizeof(signature)-1))
883                         return bios + offset;
884         }
885         return NULL;
886 }
887
888 static void __init input_apanel_init(void)
889 {
890         void __iomem *bios;
891         const void __iomem *p;
892
893         bios = ioremap(0xF0000, 0x10000); /* Can't fail */
894         p = bios_signature(bios);
895         if (p) {
896                 /* just use the first address */
897                 apanel_addr = readb(p + 8 + 3) >> 1;
898         }
899         iounmap(bios);
900 }
901
902 struct dmi_onboard_device_info {
903         const char *name;
904         u8 type;
905         unsigned short i2c_addr;
906         const char *i2c_type;
907 };
908
909 static const struct dmi_onboard_device_info dmi_devices[] = {
910         { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
911         { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
912         { "Hades",  DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
913 };
914
915 static void dmi_check_onboard_device(u8 type, const char *name,
916                                      struct i2c_adapter *adap)
917 {
918         int i;
919         struct i2c_board_info info;
920
921         for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
922                 /* & ~0x80, ignore enabled/disabled bit */
923                 if ((type & ~0x80) != dmi_devices[i].type)
924                         continue;
925                 if (strcasecmp(name, dmi_devices[i].name))
926                         continue;
927
928                 memset(&info, 0, sizeof(struct i2c_board_info));
929                 info.addr = dmi_devices[i].i2c_addr;
930                 strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
931                 i2c_new_device(adap, &info);
932                 break;
933         }
934 }
935
936 /* We use our own function to check for onboard devices instead of
937    dmi_find_device() as some buggy BIOS's have the devices we are interested
938    in marked as disabled */
939 static void dmi_check_onboard_devices(const struct dmi_header *dm, void *adap)
940 {
941         int i, count;
942
943         if (dm->type != 10)
944                 return;
945
946         count = (dm->length - sizeof(struct dmi_header)) / 2;
947         for (i = 0; i < count; i++) {
948                 const u8 *d = (char *)(dm + 1) + (i * 2);
949                 const char *name = ((char *) dm) + dm->length;
950                 u8 type = d[0];
951                 u8 s = d[1];
952
953                 if (!s)
954                         continue;
955                 s--;
956                 while (s > 0 && name[0]) {
957                         name += strlen(name) + 1;
958                         s--;
959                 }
960                 if (name[0] == 0) /* Bogus string reference */
961                         continue;
962
963                 dmi_check_onboard_device(type, name, adap);
964         }
965 }
966
967 /* Register optional slaves */
968 static void i801_probe_optional_slaves(struct i801_priv *priv)
969 {
970         /* Only register slaves on main SMBus channel */
971         if (priv->features & FEATURE_IDF)
972                 return;
973
974         if (apanel_addr) {
975                 struct i2c_board_info info;
976
977                 memset(&info, 0, sizeof(struct i2c_board_info));
978                 info.addr = apanel_addr;
979                 strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
980                 i2c_new_device(&priv->adapter, &info);
981         }
982
983         if (dmi_name_in_vendors("FUJITSU"))
984                 dmi_walk(dmi_check_onboard_devices, &priv->adapter);
985 }
986 #else
987 static void __init input_apanel_init(void) {}
988 static void i801_probe_optional_slaves(struct i801_priv *priv) {}
989 #endif  /* CONFIG_X86 && CONFIG_DMI */
990
991 #if (defined CONFIG_I2C_MUX_GPIO || defined CONFIG_I2C_MUX_GPIO_MODULE) && \
992                 defined CONFIG_DMI
993 static struct i801_mux_config i801_mux_config_asus_z8_d12 = {
994         .gpio_chip = "gpio_ich",
995         .values = { 0x02, 0x03 },
996         .n_values = 2,
997         .classes = { I2C_CLASS_SPD, I2C_CLASS_SPD },
998         .gpios = { 52, 53 },
999         .n_gpios = 2,
1000 };
1001
1002 static struct i801_mux_config i801_mux_config_asus_z8_d18 = {
1003         .gpio_chip = "gpio_ich",
1004         .values = { 0x02, 0x03, 0x01 },
1005         .n_values = 3,
1006         .classes = { I2C_CLASS_SPD, I2C_CLASS_SPD, I2C_CLASS_SPD },
1007         .gpios = { 52, 53 },
1008         .n_gpios = 2,
1009 };
1010
1011 static const struct dmi_system_id mux_dmi_table[] = {
1012         {
1013                 .matches = {
1014                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1015                         DMI_MATCH(DMI_BOARD_NAME, "Z8NA-D6(C)"),
1016                 },
1017                 .driver_data = &i801_mux_config_asus_z8_d12,
1018         },
1019         {
1020                 .matches = {
1021                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1022                         DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)E-D12(X)"),
1023                 },
1024                 .driver_data = &i801_mux_config_asus_z8_d12,
1025         },
1026         {
1027                 .matches = {
1028                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1029                         DMI_MATCH(DMI_BOARD_NAME, "Z8NH-D12"),
1030                 },
1031                 .driver_data = &i801_mux_config_asus_z8_d12,
1032         },
1033         {
1034                 .matches = {
1035                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1036                         DMI_MATCH(DMI_BOARD_NAME, "Z8PH-D12/IFB"),
1037                 },
1038                 .driver_data = &i801_mux_config_asus_z8_d12,
1039         },
1040         {
1041                 .matches = {
1042                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1043                         DMI_MATCH(DMI_BOARD_NAME, "Z8NR-D12"),
1044                 },
1045                 .driver_data = &i801_mux_config_asus_z8_d12,
1046         },
1047         {
1048                 .matches = {
1049                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1050                         DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)H-D12"),
1051                 },
1052                 .driver_data = &i801_mux_config_asus_z8_d12,
1053         },
1054         {
1055                 .matches = {
1056                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1057                         DMI_MATCH(DMI_BOARD_NAME, "Z8PG-D18"),
1058                 },
1059                 .driver_data = &i801_mux_config_asus_z8_d18,
1060         },
1061         {
1062                 .matches = {
1063                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1064                         DMI_MATCH(DMI_BOARD_NAME, "Z8PE-D18"),
1065                 },
1066                 .driver_data = &i801_mux_config_asus_z8_d18,
1067         },
1068         {
1069                 .matches = {
1070                         DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1071                         DMI_MATCH(DMI_BOARD_NAME, "Z8PS-D12"),
1072                 },
1073                 .driver_data = &i801_mux_config_asus_z8_d12,
1074         },
1075         { }
1076 };
1077
1078 /* Setup multiplexing if needed */
1079 static int i801_add_mux(struct i801_priv *priv)
1080 {
1081         struct device *dev = &priv->adapter.dev;
1082         const struct i801_mux_config *mux_config;
1083         struct i2c_mux_gpio_platform_data gpio_data;
1084         int err;
1085
1086         if (!priv->mux_drvdata)
1087                 return 0;
1088         mux_config = priv->mux_drvdata;
1089
1090         /* Prepare the platform data */
1091         memset(&gpio_data, 0, sizeof(struct i2c_mux_gpio_platform_data));
1092         gpio_data.parent = priv->adapter.nr;
1093         gpio_data.values = mux_config->values;
1094         gpio_data.n_values = mux_config->n_values;
1095         gpio_data.classes = mux_config->classes;
1096         gpio_data.gpio_chip = mux_config->gpio_chip;
1097         gpio_data.gpios = mux_config->gpios;
1098         gpio_data.n_gpios = mux_config->n_gpios;
1099         gpio_data.idle = I2C_MUX_GPIO_NO_IDLE;
1100
1101         /* Register the mux device */
1102         priv->mux_pdev = platform_device_register_data(dev, "i2c-mux-gpio",
1103                                 PLATFORM_DEVID_AUTO, &gpio_data,
1104                                 sizeof(struct i2c_mux_gpio_platform_data));
1105         if (IS_ERR(priv->mux_pdev)) {
1106                 err = PTR_ERR(priv->mux_pdev);
1107                 priv->mux_pdev = NULL;
1108                 dev_err(dev, "Failed to register i2c-mux-gpio device\n");
1109                 return err;
1110         }
1111
1112         return 0;
1113 }
1114
1115 static void i801_del_mux(struct i801_priv *priv)
1116 {
1117         if (priv->mux_pdev)
1118                 platform_device_unregister(priv->mux_pdev);
1119 }
1120
1121 static unsigned int i801_get_adapter_class(struct i801_priv *priv)
1122 {
1123         const struct dmi_system_id *id;
1124         const struct i801_mux_config *mux_config;
1125         unsigned int class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
1126         int i;
1127
1128         id = dmi_first_match(mux_dmi_table);
1129         if (id) {
1130                 /* Remove branch classes from trunk */
1131                 mux_config = id->driver_data;
1132                 for (i = 0; i < mux_config->n_values; i++)
1133                         class &= ~mux_config->classes[i];
1134
1135                 /* Remember for later */
1136                 priv->mux_drvdata = mux_config;
1137         }
1138
1139         return class;
1140 }
1141 #else
1142 static inline int i801_add_mux(struct i801_priv *priv) { return 0; }
1143 static inline void i801_del_mux(struct i801_priv *priv) { }
1144
1145 static inline unsigned int i801_get_adapter_class(struct i801_priv *priv)
1146 {
1147         return I2C_CLASS_HWMON | I2C_CLASS_SPD;
1148 }
1149 #endif
1150
1151 static const struct itco_wdt_platform_data tco_platform_data = {
1152         .name = "Intel PCH",
1153         .version = 4,
1154 };
1155
1156 static DEFINE_SPINLOCK(p2sb_spinlock);
1157
1158 static void i801_add_tco(struct i801_priv *priv)
1159 {
1160         struct pci_dev *pci_dev = priv->pci_dev;
1161         struct resource tco_res[3], *res;
1162         struct platform_device *pdev;
1163         unsigned int devfn;
1164         u32 tco_base, tco_ctl;
1165         u32 base_addr, ctrl_val;
1166         u64 base64_addr;
1167
1168         if (!(priv->features & FEATURE_TCO))
1169                 return;
1170
1171         pci_read_config_dword(pci_dev, TCOBASE, &tco_base);
1172         pci_read_config_dword(pci_dev, TCOCTL, &tco_ctl);
1173         if (!(tco_ctl & TCOCTL_EN))
1174                 return;
1175
1176         memset(tco_res, 0, sizeof(tco_res));
1177
1178         res = &tco_res[ICH_RES_IO_TCO];
1179         res->start = tco_base & ~1;
1180         res->end = res->start + 32 - 1;
1181         res->flags = IORESOURCE_IO;
1182
1183         /*
1184          * Power Management registers.
1185          */
1186         devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);
1187         pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);
1188
1189         res = &tco_res[ICH_RES_IO_SMI];
1190         res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
1191         res->end = res->start + 3;
1192         res->flags = IORESOURCE_IO;
1193
1194         /*
1195          * Enable the ACPI I/O space.
1196          */
1197         pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
1198         ctrl_val |= ACPICTRL_EN;
1199         pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
1200
1201         /*
1202          * We must access the NO_REBOOT bit over the Primary to Sideband
1203          * bridge (P2SB). The BIOS prevents the P2SB device from being
1204          * enumerated by the PCI subsystem, so we need to unhide/hide it
1205          * to lookup the P2SB BAR.
1206          */
1207         spin_lock(&p2sb_spinlock);
1208
1209         devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 1);
1210
1211         /* Unhide the P2SB device */
1212         pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x0);
1213
1214         pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR, &base_addr);
1215         base64_addr = base_addr & 0xfffffff0;
1216
1217         pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR + 0x4, &base_addr);
1218         base64_addr |= (u64)base_addr << 32;
1219
1220         /* Hide the P2SB device */
1221         pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x1);
1222         spin_unlock(&p2sb_spinlock);
1223
1224         res = &tco_res[ICH_RES_MEM_OFF];
1225         res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL;
1226         res->end = res->start + 3;
1227         res->flags = IORESOURCE_MEM;
1228
1229         pdev = platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1230                                                  tco_res, 3, &tco_platform_data,
1231                                                  sizeof(tco_platform_data));
1232         if (IS_ERR(pdev)) {
1233                 dev_warn(&pci_dev->dev, "failed to create iTCO device\n");
1234                 return;
1235         }
1236
1237         priv->tco_pdev = pdev;
1238 }
1239
1240 static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
1241 {
1242         unsigned char temp;
1243         int err, i;
1244         struct i801_priv *priv;
1245
1246         priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL);
1247         if (!priv)
1248                 return -ENOMEM;
1249
1250         i2c_set_adapdata(&priv->adapter, priv);
1251         priv->adapter.owner = THIS_MODULE;
1252         priv->adapter.class = i801_get_adapter_class(priv);
1253         priv->adapter.algo = &smbus_algorithm;
1254
1255         priv->pci_dev = dev;
1256         switch (dev->device) {
1257         case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS:
1258         case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS:
1259                 priv->features |= FEATURE_I2C_BLOCK_READ;
1260                 priv->features |= FEATURE_IRQ;
1261                 priv->features |= FEATURE_SMBUS_PEC;
1262                 priv->features |= FEATURE_BLOCK_BUFFER;
1263                 priv->features |= FEATURE_TCO;
1264                 break;
1265
1266         case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0:
1267         case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1:
1268         case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2:
1269         case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0:
1270         case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1:
1271         case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2:
1272                 priv->features |= FEATURE_IDF;
1273                 /* fall through */
1274         default:
1275                 priv->features |= FEATURE_I2C_BLOCK_READ;
1276                 priv->features |= FEATURE_IRQ;
1277                 /* fall through */
1278         case PCI_DEVICE_ID_INTEL_82801DB_3:
1279                 priv->features |= FEATURE_SMBUS_PEC;
1280                 priv->features |= FEATURE_BLOCK_BUFFER;
1281                 /* fall through */
1282         case PCI_DEVICE_ID_INTEL_82801CA_3:
1283         case PCI_DEVICE_ID_INTEL_82801BA_2:
1284         case PCI_DEVICE_ID_INTEL_82801AB_3:
1285         case PCI_DEVICE_ID_INTEL_82801AA_3:
1286                 break;
1287         }
1288
1289         /* Disable features on user request */
1290         for (i = 0; i < ARRAY_SIZE(i801_feature_names); i++) {
1291                 if (priv->features & disable_features & (1 << i))
1292                         dev_notice(&dev->dev, "%s disabled by user\n",
1293                                    i801_feature_names[i]);
1294         }
1295         priv->features &= ~disable_features;
1296
1297         err = pcim_enable_device(dev);
1298         if (err) {
1299                 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
1300                         err);
1301                 return err;
1302         }
1303         pcim_pin_device(dev);
1304
1305         /* Determine the address of the SMBus area */
1306         priv->smba = pci_resource_start(dev, SMBBAR);
1307         if (!priv->smba) {
1308                 dev_err(&dev->dev,
1309                         "SMBus base address uninitialized, upgrade BIOS\n");
1310                 return -ENODEV;
1311         }
1312
1313         err = acpi_check_resource_conflict(&dev->resource[SMBBAR]);
1314         if (err) {
1315                 return -ENODEV;
1316         }
1317
1318         err = pcim_iomap_regions(dev, 1 << SMBBAR,
1319                                  dev_driver_string(&dev->dev));
1320         if (err) {
1321                 dev_err(&dev->dev,
1322                         "Failed to request SMBus region 0x%lx-0x%Lx\n",
1323                         priv->smba,
1324                         (unsigned long long)pci_resource_end(dev, SMBBAR));
1325                 return err;
1326         }
1327
1328         pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &temp);
1329         priv->original_hstcfg = temp;
1330         temp &= ~SMBHSTCFG_I2C_EN;      /* SMBus timing */
1331         if (!(temp & SMBHSTCFG_HST_EN)) {
1332                 dev_info(&dev->dev, "Enabling SMBus device\n");
1333                 temp |= SMBHSTCFG_HST_EN;
1334         }
1335         pci_write_config_byte(priv->pci_dev, SMBHSTCFG, temp);
1336
1337         if (temp & SMBHSTCFG_SMB_SMI_EN) {
1338                 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
1339                 /* Disable SMBus interrupt feature if SMBus using SMI# */
1340                 priv->features &= ~FEATURE_IRQ;
1341         }
1342
1343         /* Clear special mode bits */
1344         if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
1345                 outb_p(inb_p(SMBAUXCTL(priv)) &
1346                        ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
1347
1348         /* Default timeout in interrupt mode: 200 ms */
1349         priv->adapter.timeout = HZ / 5;
1350
1351         if (priv->features & FEATURE_IRQ) {
1352                 u16 pcictl, pcists;
1353
1354                 /* Complain if an interrupt is already pending */
1355                 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists);
1356                 if (pcists & SMBPCISTS_INTS)
1357                         dev_warn(&dev->dev, "An interrupt is pending!\n");
1358
1359                 /* Check if interrupts have been disabled */
1360                 pci_read_config_word(priv->pci_dev, SMBPCICTL, &pcictl);
1361                 if (pcictl & SMBPCICTL_INTDIS) {
1362                         dev_info(&dev->dev, "Interrupts are disabled\n");
1363                         priv->features &= ~FEATURE_IRQ;
1364                 }
1365         }
1366
1367         if (priv->features & FEATURE_IRQ) {
1368                 init_waitqueue_head(&priv->waitq);
1369
1370                 err = devm_request_irq(&dev->dev, dev->irq, i801_isr,
1371                                        IRQF_SHARED,
1372                                        dev_driver_string(&dev->dev), priv);
1373                 if (err) {
1374                         dev_err(&dev->dev, "Failed to allocate irq %d: %d\n",
1375                                 dev->irq, err);
1376                         priv->features &= ~FEATURE_IRQ;
1377                 }
1378         }
1379         dev_info(&dev->dev, "SMBus using %s\n",
1380                  priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling");
1381
1382         i801_add_tco(priv);
1383
1384         /* set up the sysfs linkage to our parent device */
1385         priv->adapter.dev.parent = &dev->dev;
1386
1387         /* Retry up to 3 times on lost arbitration */
1388         priv->adapter.retries = 3;
1389
1390         snprintf(priv->adapter.name, sizeof(priv->adapter.name),
1391                 "SMBus I801 adapter at %04lx", priv->smba);
1392         err = i2c_add_adapter(&priv->adapter);
1393         if (err) {
1394                 dev_err(&dev->dev, "Failed to add SMBus adapter\n");
1395                 return err;
1396         }
1397
1398         i801_probe_optional_slaves(priv);
1399         /* We ignore errors - multiplexing is optional */
1400         i801_add_mux(priv);
1401
1402         pci_set_drvdata(dev, priv);
1403
1404         return 0;
1405 }
1406
1407 static void i801_remove(struct pci_dev *dev)
1408 {
1409         struct i801_priv *priv = pci_get_drvdata(dev);
1410
1411         i801_del_mux(priv);
1412         i2c_del_adapter(&priv->adapter);
1413         pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1414
1415         platform_device_unregister(priv->tco_pdev);
1416
1417         /*
1418          * do not call pci_disable_device(dev) since it can cause hard hangs on
1419          * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
1420          */
1421 }
1422
1423 #ifdef CONFIG_PM
1424 static int i801_suspend(struct pci_dev *dev, pm_message_t mesg)
1425 {
1426         struct i801_priv *priv = pci_get_drvdata(dev);
1427
1428         pci_save_state(dev);
1429         pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1430         pci_set_power_state(dev, pci_choose_state(dev, mesg));
1431         return 0;
1432 }
1433
1434 static int i801_resume(struct pci_dev *dev)
1435 {
1436         pci_set_power_state(dev, PCI_D0);
1437         pci_restore_state(dev);
1438         return 0;
1439 }
1440 #else
1441 #define i801_suspend NULL
1442 #define i801_resume NULL
1443 #endif
1444
1445 static struct pci_driver i801_driver = {
1446         .name           = "i801_smbus",
1447         .id_table       = i801_ids,
1448         .probe          = i801_probe,
1449         .remove         = i801_remove,
1450         .suspend        = i801_suspend,
1451         .resume         = i801_resume,
1452 };
1453
1454 static int __init i2c_i801_init(void)
1455 {
1456         if (dmi_name_in_vendors("FUJITSU"))
1457                 input_apanel_init();
1458         return pci_register_driver(&i801_driver);
1459 }
1460
1461 static void __exit i2c_i801_exit(void)
1462 {
1463         pci_unregister_driver(&i801_driver);
1464 }
1465
1466 MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>, Jean Delvare <jdelvare@suse.de>");
1467 MODULE_DESCRIPTION("I801 SMBus driver");
1468 MODULE_LICENSE("GPL");
1469
1470 module_init(i2c_i801_init);
1471 module_exit(i2c_i801_exit);