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