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