Linux Audio

Check our new training course

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