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