0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094 #define DRV_NAME "i801_smbus"
0095
0096 #include <linux/interrupt.h>
0097 #include <linux/module.h>
0098 #include <linux/pci.h>
0099 #include <linux/kernel.h>
0100 #include <linux/stddef.h>
0101 #include <linux/delay.h>
0102 #include <linux/ioport.h>
0103 #include <linux/init.h>
0104 #include <linux/i2c.h>
0105 #include <linux/i2c-smbus.h>
0106 #include <linux/acpi.h>
0107 #include <linux/io.h>
0108 #include <linux/dmi.h>
0109 #include <linux/slab.h>
0110 #include <linux/string.h>
0111 #include <linux/completion.h>
0112 #include <linux/err.h>
0113 #include <linux/platform_device.h>
0114 #include <linux/platform_data/itco_wdt.h>
0115 #include <linux/platform_data/x86/p2sb.h>
0116 #include <linux/pm_runtime.h>
0117 #include <linux/mutex.h>
0118
0119 #if IS_ENABLED(CONFIG_I2C_MUX_GPIO) && defined CONFIG_DMI
0120 #include <linux/gpio/machine.h>
0121 #include <linux/platform_data/i2c-mux-gpio.h>
0122 #endif
0123
0124
0125 #define SMBHSTSTS(p) (0 + (p)->smba)
0126 #define SMBHSTCNT(p) (2 + (p)->smba)
0127 #define SMBHSTCMD(p) (3 + (p)->smba)
0128 #define SMBHSTADD(p) (4 + (p)->smba)
0129 #define SMBHSTDAT0(p) (5 + (p)->smba)
0130 #define SMBHSTDAT1(p) (6 + (p)->smba)
0131 #define SMBBLKDAT(p) (7 + (p)->smba)
0132 #define SMBPEC(p) (8 + (p)->smba)
0133 #define SMBAUXSTS(p) (12 + (p)->smba)
0134 #define SMBAUXCTL(p) (13 + (p)->smba)
0135 #define SMBSLVSTS(p) (16 + (p)->smba)
0136 #define SMBSLVCMD(p) (17 + (p)->smba)
0137 #define SMBNTFDADD(p) (20 + (p)->smba)
0138
0139
0140 #define SMBBAR 4
0141 #define SMBHSTCFG 0x040
0142 #define TCOBASE 0x050
0143 #define TCOCTL 0x054
0144
0145 #define SBREG_SMBCTRL 0xc6000c
0146 #define SBREG_SMBCTRL_DNV 0xcf000c
0147
0148
0149 #define SMBHSTCFG_HST_EN BIT(0)
0150 #define SMBHSTCFG_SMB_SMI_EN BIT(1)
0151 #define SMBHSTCFG_I2C_EN BIT(2)
0152 #define SMBHSTCFG_SPD_WD BIT(4)
0153
0154
0155 #define TCOCTL_EN BIT(8)
0156
0157
0158 #define SMBAUXSTS_CRCE BIT(0)
0159 #define SMBAUXSTS_STCO BIT(1)
0160
0161
0162 #define SMBAUXCTL_CRC BIT(0)
0163 #define SMBAUXCTL_E32B BIT(1)
0164
0165
0166 #define I801_QUICK 0x00
0167 #define I801_BYTE 0x04
0168 #define I801_BYTE_DATA 0x08
0169 #define I801_WORD_DATA 0x0C
0170 #define I801_PROC_CALL 0x10
0171 #define I801_BLOCK_DATA 0x14
0172 #define I801_I2C_BLOCK_DATA 0x18
0173 #define I801_BLOCK_PROC_CALL 0x1C
0174
0175
0176 #define SMBHSTCNT_INTREN BIT(0)
0177 #define SMBHSTCNT_KILL BIT(1)
0178 #define SMBHSTCNT_LAST_BYTE BIT(5)
0179 #define SMBHSTCNT_START BIT(6)
0180 #define SMBHSTCNT_PEC_EN BIT(7)
0181
0182
0183 #define SMBHSTSTS_BYTE_DONE BIT(7)
0184 #define SMBHSTSTS_INUSE_STS BIT(6)
0185 #define SMBHSTSTS_SMBALERT_STS BIT(5)
0186 #define SMBHSTSTS_FAILED BIT(4)
0187 #define SMBHSTSTS_BUS_ERR BIT(3)
0188 #define SMBHSTSTS_DEV_ERR BIT(2)
0189 #define SMBHSTSTS_INTR BIT(1)
0190 #define SMBHSTSTS_HOST_BUSY BIT(0)
0191
0192
0193 #define SMBSLVSTS_HST_NTFY_STS BIT(0)
0194
0195
0196 #define SMBSLVCMD_SMBALERT_DISABLE BIT(2)
0197 #define SMBSLVCMD_HST_NTFY_INTREN BIT(0)
0198
0199 #define STATUS_ERROR_FLAGS (SMBHSTSTS_FAILED | SMBHSTSTS_BUS_ERR | \
0200 SMBHSTSTS_DEV_ERR)
0201
0202 #define STATUS_FLAGS (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR | \
0203 STATUS_ERROR_FLAGS)
0204
0205
0206 #define PCI_DEVICE_ID_INTEL_COMETLAKE_SMBUS 0x02a3
0207 #define PCI_DEVICE_ID_INTEL_COMETLAKE_H_SMBUS 0x06a3
0208 #define PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS 0x0f12
0209 #define PCI_DEVICE_ID_INTEL_CDF_SMBUS 0x18df
0210 #define PCI_DEVICE_ID_INTEL_DNV_SMBUS 0x19df
0211 #define PCI_DEVICE_ID_INTEL_EBG_SMBUS 0x1bc9
0212 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
0213 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
0214
0215 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0 0x1d70
0216 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1 0x1d71
0217 #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2 0x1d72
0218 #define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS 0x1e22
0219 #define PCI_DEVICE_ID_INTEL_AVOTON_SMBUS 0x1f3c
0220 #define PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS 0x2292
0221 #define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330
0222 #define PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS 0x23b0
0223 #define PCI_DEVICE_ID_INTEL_GEMINILAKE_SMBUS 0x31d4
0224 #define PCI_DEVICE_ID_INTEL_ICELAKE_LP_SMBUS 0x34a3
0225 #define PCI_DEVICE_ID_INTEL_ICELAKE_N_SMBUS 0x38a3
0226 #define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
0227 #define PCI_DEVICE_ID_INTEL_TIGERLAKE_H_SMBUS 0x43a3
0228 #define PCI_DEVICE_ID_INTEL_ELKHART_LAKE_SMBUS 0x4b23
0229 #define PCI_DEVICE_ID_INTEL_JASPER_LAKE_SMBUS 0x4da3
0230 #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_P_SMBUS 0x51a3
0231 #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_M_SMBUS 0x54a3
0232 #define PCI_DEVICE_ID_INTEL_BROXTON_SMBUS 0x5ad4
0233 #define PCI_DEVICE_ID_INTEL_RAPTOR_LAKE_S_SMBUS 0x7a23
0234 #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_S_SMBUS 0x7aa3
0235 #define PCI_DEVICE_ID_INTEL_METEOR_LAKE_P_SMBUS 0x7e22
0236 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22
0237 #define PCI_DEVICE_ID_INTEL_WILDCATPOINT_SMBUS 0x8ca2
0238 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS 0x8d22
0239 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0 0x8d7d
0240 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1 0x8d7e
0241 #define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2 0x8d7f
0242 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS 0x9c22
0243 #define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS 0x9ca2
0244 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS 0x9d23
0245 #define PCI_DEVICE_ID_INTEL_CANNONLAKE_LP_SMBUS 0x9da3
0246 #define PCI_DEVICE_ID_INTEL_TIGERLAKE_LP_SMBUS 0xa0a3
0247 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS 0xa123
0248 #define PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS 0xa1a3
0249 #define PCI_DEVICE_ID_INTEL_LEWISBURG_SSKU_SMBUS 0xa223
0250 #define PCI_DEVICE_ID_INTEL_KABYLAKE_PCH_H_SMBUS 0xa2a3
0251 #define PCI_DEVICE_ID_INTEL_CANNONLAKE_H_SMBUS 0xa323
0252 #define PCI_DEVICE_ID_INTEL_COMETLAKE_V_SMBUS 0xa3a3
0253
0254 struct i801_mux_config {
0255 char *gpio_chip;
0256 unsigned values[3];
0257 int n_values;
0258 unsigned classes[3];
0259 unsigned gpios[2];
0260 int n_gpios;
0261 };
0262
0263 struct i801_priv {
0264 struct i2c_adapter adapter;
0265 unsigned long smba;
0266 unsigned char original_hstcfg;
0267 unsigned char original_hstcnt;
0268 unsigned char original_slvcmd;
0269 struct pci_dev *pci_dev;
0270 unsigned int features;
0271
0272
0273 struct completion done;
0274 u8 status;
0275
0276
0277 u8 cmd;
0278 bool is_read;
0279 int count;
0280 int len;
0281 u8 *data;
0282
0283 #if IS_ENABLED(CONFIG_I2C_MUX_GPIO) && defined CONFIG_DMI
0284 const struct i801_mux_config *mux_drvdata;
0285 struct platform_device *mux_pdev;
0286 struct gpiod_lookup_table *lookup;
0287 #endif
0288 struct platform_device *tco_pdev;
0289
0290
0291
0292
0293
0294 bool acpi_reserved;
0295 struct mutex acpi_lock;
0296 };
0297
0298 #define FEATURE_SMBUS_PEC BIT(0)
0299 #define FEATURE_BLOCK_BUFFER BIT(1)
0300 #define FEATURE_BLOCK_PROC BIT(2)
0301 #define FEATURE_I2C_BLOCK_READ BIT(3)
0302 #define FEATURE_IRQ BIT(4)
0303 #define FEATURE_HOST_NOTIFY BIT(5)
0304
0305 #define FEATURE_IDF BIT(15)
0306 #define FEATURE_TCO_SPT BIT(16)
0307 #define FEATURE_TCO_CNL BIT(17)
0308
0309 static const char *i801_feature_names[] = {
0310 "SMBus PEC",
0311 "Block buffer",
0312 "Block process call",
0313 "I2C block read",
0314 "Interrupt",
0315 "SMBus Host Notify",
0316 };
0317
0318 static unsigned int disable_features;
0319 module_param(disable_features, uint, S_IRUGO | S_IWUSR);
0320 MODULE_PARM_DESC(disable_features, "Disable selected driver features:\n"
0321 "\t\t 0x01 disable SMBus PEC\n"
0322 "\t\t 0x02 disable the block buffer\n"
0323 "\t\t 0x08 disable the I2C block read functionality\n"
0324 "\t\t 0x10 don't use interrupts\n"
0325 "\t\t 0x20 disable SMBus Host Notify ");
0326
0327
0328
0329 static int i801_check_pre(struct i801_priv *priv)
0330 {
0331 int status;
0332
0333 status = inb_p(SMBHSTSTS(priv));
0334 if (status & SMBHSTSTS_HOST_BUSY) {
0335 pci_err(priv->pci_dev, "SMBus is busy, can't use it!\n");
0336 return -EBUSY;
0337 }
0338
0339 status &= STATUS_FLAGS;
0340 if (status) {
0341 pci_dbg(priv->pci_dev, "Clearing status flags (%02x)\n", status);
0342 outb_p(status, SMBHSTSTS(priv));
0343 }
0344
0345
0346
0347
0348
0349
0350
0351
0352 if (priv->features & FEATURE_SMBUS_PEC) {
0353 status = inb_p(SMBAUXSTS(priv)) & SMBAUXSTS_CRCE;
0354 if (status) {
0355 pci_dbg(priv->pci_dev, "Clearing aux status flags (%02x)\n", status);
0356 outb_p(status, SMBAUXSTS(priv));
0357 }
0358 }
0359
0360 return 0;
0361 }
0362
0363 static int i801_check_post(struct i801_priv *priv, int status)
0364 {
0365 int result = 0;
0366
0367
0368
0369
0370 if (unlikely(status < 0)) {
0371 dev_err(&priv->pci_dev->dev, "Transaction timeout\n");
0372
0373 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");
0374 outb_p(SMBHSTCNT_KILL, SMBHSTCNT(priv));
0375 usleep_range(1000, 2000);
0376 outb_p(0, SMBHSTCNT(priv));
0377
0378
0379 status = inb_p(SMBHSTSTS(priv));
0380 if ((status & SMBHSTSTS_HOST_BUSY) ||
0381 !(status & SMBHSTSTS_FAILED))
0382 dev_err(&priv->pci_dev->dev,
0383 "Failed terminating the transaction\n");
0384 return -ETIMEDOUT;
0385 }
0386
0387 if (status & SMBHSTSTS_FAILED) {
0388 result = -EIO;
0389 dev_err(&priv->pci_dev->dev, "Transaction failed\n");
0390 }
0391 if (status & SMBHSTSTS_DEV_ERR) {
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407 if ((priv->features & FEATURE_SMBUS_PEC) &&
0408 (inb_p(SMBAUXSTS(priv)) & SMBAUXSTS_CRCE)) {
0409 outb_p(SMBAUXSTS_CRCE, SMBAUXSTS(priv));
0410 result = -EBADMSG;
0411 dev_dbg(&priv->pci_dev->dev, "PEC error\n");
0412 } else {
0413 result = -ENXIO;
0414 dev_dbg(&priv->pci_dev->dev, "No response\n");
0415 }
0416 }
0417 if (status & SMBHSTSTS_BUS_ERR) {
0418 result = -EAGAIN;
0419 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
0420 }
0421
0422 return result;
0423 }
0424
0425
0426 static int i801_wait_intr(struct i801_priv *priv)
0427 {
0428 unsigned long timeout = jiffies + priv->adapter.timeout;
0429 int status, busy;
0430
0431 do {
0432 usleep_range(250, 500);
0433 status = inb_p(SMBHSTSTS(priv));
0434 busy = status & SMBHSTSTS_HOST_BUSY;
0435 status &= STATUS_ERROR_FLAGS | SMBHSTSTS_INTR;
0436 if (!busy && status)
0437 return status;
0438 } while (time_is_after_eq_jiffies(timeout));
0439
0440 return -ETIMEDOUT;
0441 }
0442
0443
0444 static int i801_wait_byte_done(struct i801_priv *priv)
0445 {
0446 unsigned long timeout = jiffies + priv->adapter.timeout;
0447 int status;
0448
0449 do {
0450 usleep_range(250, 500);
0451 status = inb_p(SMBHSTSTS(priv));
0452 if (status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE))
0453 return status & STATUS_ERROR_FLAGS;
0454 } while (time_is_after_eq_jiffies(timeout));
0455
0456 return -ETIMEDOUT;
0457 }
0458
0459 static int i801_transaction(struct i801_priv *priv, int xact)
0460 {
0461 int status;
0462 unsigned long result;
0463 const struct i2c_adapter *adap = &priv->adapter;
0464
0465 status = i801_check_pre(priv);
0466 if (status < 0)
0467 return status;
0468
0469 if (priv->features & FEATURE_IRQ) {
0470 reinit_completion(&priv->done);
0471 outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START,
0472 SMBHSTCNT(priv));
0473 result = wait_for_completion_timeout(&priv->done, adap->timeout);
0474 return i801_check_post(priv, result ? priv->status : -ETIMEDOUT);
0475 }
0476
0477 outb_p(xact | SMBHSTCNT_START, SMBHSTCNT(priv));
0478
0479 status = i801_wait_intr(priv);
0480 return i801_check_post(priv, status);
0481 }
0482
0483 static int i801_block_transaction_by_block(struct i801_priv *priv,
0484 union i2c_smbus_data *data,
0485 char read_write, int command)
0486 {
0487 int i, len, status, xact;
0488
0489 switch (command) {
0490 case I2C_SMBUS_BLOCK_PROC_CALL:
0491 xact = I801_BLOCK_PROC_CALL;
0492 break;
0493 case I2C_SMBUS_BLOCK_DATA:
0494 xact = I801_BLOCK_DATA;
0495 break;
0496 default:
0497 return -EOPNOTSUPP;
0498 }
0499
0500
0501 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_E32B, SMBAUXCTL(priv));
0502
0503 inb_p(SMBHSTCNT(priv));
0504
0505 if (read_write == I2C_SMBUS_WRITE) {
0506 len = data->block[0];
0507 outb_p(len, SMBHSTDAT0(priv));
0508 for (i = 0; i < len; i++)
0509 outb_p(data->block[i+1], SMBBLKDAT(priv));
0510 }
0511
0512 status = i801_transaction(priv, xact);
0513 if (status)
0514 return status;
0515
0516 if (read_write == I2C_SMBUS_READ ||
0517 command == I2C_SMBUS_BLOCK_PROC_CALL) {
0518 len = inb_p(SMBHSTDAT0(priv));
0519 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
0520 return -EPROTO;
0521
0522 data->block[0] = len;
0523 for (i = 0; i < len; i++)
0524 data->block[i + 1] = inb_p(SMBBLKDAT(priv));
0525 }
0526 return 0;
0527 }
0528
0529 static void i801_isr_byte_done(struct i801_priv *priv)
0530 {
0531 if (priv->is_read) {
0532
0533 if (((priv->cmd & 0x1c) == I801_BLOCK_DATA) &&
0534 (priv->count == 0)) {
0535 priv->len = inb_p(SMBHSTDAT0(priv));
0536 if (priv->len < 1 || priv->len > I2C_SMBUS_BLOCK_MAX) {
0537 dev_err(&priv->pci_dev->dev,
0538 "Illegal SMBus block read size %d\n",
0539 priv->len);
0540
0541 priv->len = I2C_SMBUS_BLOCK_MAX;
0542 }
0543 priv->data[-1] = priv->len;
0544 }
0545
0546
0547 if (priv->count < priv->len)
0548 priv->data[priv->count++] = inb(SMBBLKDAT(priv));
0549 else
0550 dev_dbg(&priv->pci_dev->dev,
0551 "Discarding extra byte on block read\n");
0552
0553
0554 if (priv->count == priv->len - 1)
0555 outb_p(priv->cmd | SMBHSTCNT_LAST_BYTE,
0556 SMBHSTCNT(priv));
0557 } else if (priv->count < priv->len - 1) {
0558
0559 outb_p(priv->data[++priv->count], SMBBLKDAT(priv));
0560 }
0561
0562
0563 outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
0564 }
0565
0566 static irqreturn_t i801_host_notify_isr(struct i801_priv *priv)
0567 {
0568 unsigned short addr;
0569
0570 addr = inb_p(SMBNTFDADD(priv)) >> 1;
0571
0572
0573
0574
0575
0576
0577 i2c_handle_smbus_host_notify(&priv->adapter, addr);
0578
0579
0580 outb_p(SMBSLVSTS_HST_NTFY_STS, SMBSLVSTS(priv));
0581 return IRQ_HANDLED;
0582 }
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600 static irqreturn_t i801_isr(int irq, void *dev_id)
0601 {
0602 struct i801_priv *priv = dev_id;
0603 u16 pcists;
0604 u8 status;
0605
0606
0607 pci_read_config_word(priv->pci_dev, PCI_STATUS, &pcists);
0608 if (!(pcists & PCI_STATUS_INTERRUPT))
0609 return IRQ_NONE;
0610
0611 if (priv->features & FEATURE_HOST_NOTIFY) {
0612 status = inb_p(SMBSLVSTS(priv));
0613 if (status & SMBSLVSTS_HST_NTFY_STS)
0614 return i801_host_notify_isr(priv);
0615 }
0616
0617 status = inb_p(SMBHSTSTS(priv));
0618 if (status & SMBHSTSTS_BYTE_DONE)
0619 i801_isr_byte_done(priv);
0620
0621
0622
0623
0624
0625
0626
0627 status &= SMBHSTSTS_INTR | STATUS_ERROR_FLAGS | SMBHSTSTS_SMBALERT_STS;
0628 if (status)
0629 outb_p(status, SMBHSTSTS(priv));
0630 status &= ~SMBHSTSTS_SMBALERT_STS;
0631
0632
0633
0634
0635 if (status) {
0636 priv->status = status;
0637 complete(&priv->done);
0638 }
0639
0640 return IRQ_HANDLED;
0641 }
0642
0643
0644
0645
0646
0647
0648 static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
0649 union i2c_smbus_data *data,
0650 char read_write, int command)
0651 {
0652 int i, len;
0653 int smbcmd;
0654 int status;
0655 unsigned long result;
0656 const struct i2c_adapter *adap = &priv->adapter;
0657
0658 if (command == I2C_SMBUS_BLOCK_PROC_CALL)
0659 return -EOPNOTSUPP;
0660
0661 status = i801_check_pre(priv);
0662 if (status < 0)
0663 return status;
0664
0665 len = data->block[0];
0666
0667 if (read_write == I2C_SMBUS_WRITE) {
0668 outb_p(len, SMBHSTDAT0(priv));
0669 outb_p(data->block[1], SMBBLKDAT(priv));
0670 }
0671
0672 if (command == I2C_SMBUS_I2C_BLOCK_DATA &&
0673 read_write == I2C_SMBUS_READ)
0674 smbcmd = I801_I2C_BLOCK_DATA;
0675 else
0676 smbcmd = I801_BLOCK_DATA;
0677
0678 if (priv->features & FEATURE_IRQ) {
0679 priv->is_read = (read_write == I2C_SMBUS_READ);
0680 if (len == 1 && priv->is_read)
0681 smbcmd |= SMBHSTCNT_LAST_BYTE;
0682 priv->cmd = smbcmd | SMBHSTCNT_INTREN;
0683 priv->len = len;
0684 priv->count = 0;
0685 priv->data = &data->block[1];
0686
0687 reinit_completion(&priv->done);
0688 outb_p(priv->cmd | SMBHSTCNT_START, SMBHSTCNT(priv));
0689 result = wait_for_completion_timeout(&priv->done, adap->timeout);
0690 return i801_check_post(priv, result ? priv->status : -ETIMEDOUT);
0691 }
0692
0693 for (i = 1; i <= len; i++) {
0694 if (i == len && read_write == I2C_SMBUS_READ)
0695 smbcmd |= SMBHSTCNT_LAST_BYTE;
0696 outb_p(smbcmd, SMBHSTCNT(priv));
0697
0698 if (i == 1)
0699 outb_p(inb(SMBHSTCNT(priv)) | SMBHSTCNT_START,
0700 SMBHSTCNT(priv));
0701
0702 status = i801_wait_byte_done(priv);
0703 if (status)
0704 goto exit;
0705
0706 if (i == 1 && read_write == I2C_SMBUS_READ
0707 && command != I2C_SMBUS_I2C_BLOCK_DATA) {
0708 len = inb_p(SMBHSTDAT0(priv));
0709 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
0710 dev_err(&priv->pci_dev->dev,
0711 "Illegal SMBus block read size %d\n",
0712 len);
0713
0714 while (inb_p(SMBHSTSTS(priv)) &
0715 SMBHSTSTS_HOST_BUSY)
0716 outb_p(SMBHSTSTS_BYTE_DONE,
0717 SMBHSTSTS(priv));
0718 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
0719 return -EPROTO;
0720 }
0721 data->block[0] = len;
0722 }
0723
0724
0725 if (read_write == I2C_SMBUS_READ)
0726 data->block[i] = inb_p(SMBBLKDAT(priv));
0727 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
0728 outb_p(data->block[i+1], SMBBLKDAT(priv));
0729
0730
0731 outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
0732 }
0733
0734 status = i801_wait_intr(priv);
0735 exit:
0736 return i801_check_post(priv, status);
0737 }
0738
0739
0740 static int i801_block_transaction(struct i801_priv *priv, union i2c_smbus_data *data,
0741 char read_write, int command)
0742 {
0743 int result = 0;
0744 unsigned char hostc;
0745
0746 if (read_write == I2C_SMBUS_READ && command == I2C_SMBUS_BLOCK_DATA)
0747 data->block[0] = I2C_SMBUS_BLOCK_MAX;
0748 else if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX)
0749 return -EPROTO;
0750
0751 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
0752 if (read_write == I2C_SMBUS_WRITE) {
0753
0754 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc);
0755 pci_write_config_byte(priv->pci_dev, SMBHSTCFG,
0756 hostc | SMBHSTCFG_I2C_EN);
0757 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) {
0758 dev_err(&priv->pci_dev->dev,
0759 "I2C block read is unsupported!\n");
0760 return -EOPNOTSUPP;
0761 }
0762 }
0763
0764
0765
0766
0767 if ((priv->features & FEATURE_BLOCK_BUFFER) &&
0768 command != I2C_SMBUS_I2C_BLOCK_DATA)
0769 result = i801_block_transaction_by_block(priv, data,
0770 read_write,
0771 command);
0772 else
0773 result = i801_block_transaction_byte_by_byte(priv, data,
0774 read_write,
0775 command);
0776
0777 if (command == I2C_SMBUS_I2C_BLOCK_DATA
0778 && read_write == I2C_SMBUS_WRITE) {
0779
0780 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc);
0781 }
0782 return result;
0783 }
0784
0785
0786 static s32 i801_access(struct i2c_adapter *adap, u16 addr,
0787 unsigned short flags, char read_write, u8 command,
0788 int size, union i2c_smbus_data *data)
0789 {
0790 int hwpec;
0791 int block = 0;
0792 int ret, xact;
0793 struct i801_priv *priv = i2c_get_adapdata(adap);
0794
0795 mutex_lock(&priv->acpi_lock);
0796 if (priv->acpi_reserved) {
0797 mutex_unlock(&priv->acpi_lock);
0798 return -EBUSY;
0799 }
0800
0801 pm_runtime_get_sync(&priv->pci_dev->dev);
0802
0803 hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
0804 && size != I2C_SMBUS_QUICK
0805 && size != I2C_SMBUS_I2C_BLOCK_DATA;
0806
0807 switch (size) {
0808 case I2C_SMBUS_QUICK:
0809 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0810 SMBHSTADD(priv));
0811 xact = I801_QUICK;
0812 break;
0813 case I2C_SMBUS_BYTE:
0814 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0815 SMBHSTADD(priv));
0816 if (read_write == I2C_SMBUS_WRITE)
0817 outb_p(command, SMBHSTCMD(priv));
0818 xact = I801_BYTE;
0819 break;
0820 case I2C_SMBUS_BYTE_DATA:
0821 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0822 SMBHSTADD(priv));
0823 outb_p(command, SMBHSTCMD(priv));
0824 if (read_write == I2C_SMBUS_WRITE)
0825 outb_p(data->byte, SMBHSTDAT0(priv));
0826 xact = I801_BYTE_DATA;
0827 break;
0828 case I2C_SMBUS_WORD_DATA:
0829 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0830 SMBHSTADD(priv));
0831 outb_p(command, SMBHSTCMD(priv));
0832 if (read_write == I2C_SMBUS_WRITE) {
0833 outb_p(data->word & 0xff, SMBHSTDAT0(priv));
0834 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
0835 }
0836 xact = I801_WORD_DATA;
0837 break;
0838 case I2C_SMBUS_PROC_CALL:
0839 outb_p((addr & 0x7f) << 1, SMBHSTADD(priv));
0840 outb_p(command, SMBHSTCMD(priv));
0841 outb_p(data->word & 0xff, SMBHSTDAT0(priv));
0842 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
0843 xact = I801_PROC_CALL;
0844 read_write = I2C_SMBUS_READ;
0845 break;
0846 case I2C_SMBUS_BLOCK_DATA:
0847 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0848 SMBHSTADD(priv));
0849 outb_p(command, SMBHSTCMD(priv));
0850 block = 1;
0851 break;
0852 case I2C_SMBUS_I2C_BLOCK_DATA:
0853
0854
0855
0856
0857
0858
0859 outb_p(((addr & 0x7f) << 1) |
0860 ((priv->original_hstcfg & SMBHSTCFG_SPD_WD) ?
0861 (read_write & 0x01) : 0),
0862 SMBHSTADD(priv));
0863 if (read_write == I2C_SMBUS_READ) {
0864
0865
0866 outb_p(command, SMBHSTDAT1(priv));
0867 } else
0868 outb_p(command, SMBHSTCMD(priv));
0869 block = 1;
0870 break;
0871 case I2C_SMBUS_BLOCK_PROC_CALL:
0872
0873
0874
0875
0876 outb_p((addr & 0x7f) << 1, SMBHSTADD(priv));
0877 outb_p(command, SMBHSTCMD(priv));
0878 block = 1;
0879 break;
0880 default:
0881 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n",
0882 size);
0883 ret = -EOPNOTSUPP;
0884 goto out;
0885 }
0886
0887 if (hwpec)
0888 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv));
0889 else
0890 outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC),
0891 SMBAUXCTL(priv));
0892
0893 if (block)
0894 ret = i801_block_transaction(priv, data, read_write, size);
0895 else
0896 ret = i801_transaction(priv, xact);
0897
0898
0899
0900
0901 if (hwpec || block)
0902 outb_p(inb_p(SMBAUXCTL(priv)) &
0903 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
0904
0905 if (block)
0906 goto out;
0907 if (ret)
0908 goto out;
0909 if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
0910 goto out;
0911
0912 switch (xact) {
0913 case I801_BYTE:
0914 case I801_BYTE_DATA:
0915 data->byte = inb_p(SMBHSTDAT0(priv));
0916 break;
0917 case I801_WORD_DATA:
0918 case I801_PROC_CALL:
0919 data->word = inb_p(SMBHSTDAT0(priv)) +
0920 (inb_p(SMBHSTDAT1(priv)) << 8);
0921 break;
0922 }
0923
0924 out:
0925
0926
0927
0928
0929 outb_p(SMBHSTSTS_INUSE_STS | STATUS_FLAGS, SMBHSTSTS(priv));
0930
0931 pm_runtime_mark_last_busy(&priv->pci_dev->dev);
0932 pm_runtime_put_autosuspend(&priv->pci_dev->dev);
0933 mutex_unlock(&priv->acpi_lock);
0934 return ret;
0935 }
0936
0937
0938 static u32 i801_func(struct i2c_adapter *adapter)
0939 {
0940 struct i801_priv *priv = i2c_get_adapdata(adapter);
0941
0942 return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
0943 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
0944 I2C_FUNC_SMBUS_PROC_CALL |
0945 I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
0946 ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
0947 ((priv->features & FEATURE_BLOCK_PROC) ?
0948 I2C_FUNC_SMBUS_BLOCK_PROC_CALL : 0) |
0949 ((priv->features & FEATURE_I2C_BLOCK_READ) ?
0950 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0) |
0951 ((priv->features & FEATURE_HOST_NOTIFY) ?
0952 I2C_FUNC_SMBUS_HOST_NOTIFY : 0);
0953 }
0954
0955 static void i801_enable_host_notify(struct i2c_adapter *adapter)
0956 {
0957 struct i801_priv *priv = i2c_get_adapdata(adapter);
0958
0959 if (!(priv->features & FEATURE_HOST_NOTIFY))
0960 return;
0961
0962
0963
0964
0965
0966
0967 outb_p(SMBSLVCMD_HST_NTFY_INTREN | SMBSLVCMD_SMBALERT_DISABLE |
0968 priv->original_slvcmd, SMBSLVCMD(priv));
0969
0970
0971 outb_p(SMBSLVSTS_HST_NTFY_STS, SMBSLVSTS(priv));
0972 }
0973
0974 static void i801_disable_host_notify(struct i801_priv *priv)
0975 {
0976 if (!(priv->features & FEATURE_HOST_NOTIFY))
0977 return;
0978
0979 outb_p(priv->original_slvcmd, SMBSLVCMD(priv));
0980 }
0981
0982 static const struct i2c_algorithm smbus_algorithm = {
0983 .smbus_xfer = i801_access,
0984 .functionality = i801_func,
0985 };
0986
0987 #define FEATURES_ICH5 (FEATURE_BLOCK_PROC | FEATURE_I2C_BLOCK_READ | \
0988 FEATURE_IRQ | FEATURE_SMBUS_PEC | \
0989 FEATURE_BLOCK_BUFFER | FEATURE_HOST_NOTIFY)
0990 #define FEATURES_ICH4 (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER | \
0991 FEATURE_HOST_NOTIFY)
0992
0993 static const struct pci_device_id i801_ids[] = {
0994 { PCI_DEVICE_DATA(INTEL, 82801AA_3, 0) },
0995 { PCI_DEVICE_DATA(INTEL, 82801AB_3, 0) },
0996 { PCI_DEVICE_DATA(INTEL, 82801BA_2, 0) },
0997 { PCI_DEVICE_DATA(INTEL, 82801CA_3, FEATURE_HOST_NOTIFY) },
0998 { PCI_DEVICE_DATA(INTEL, 82801DB_3, FEATURES_ICH4) },
0999 { PCI_DEVICE_DATA(INTEL, 82801EB_3, FEATURES_ICH5) },
1000 { PCI_DEVICE_DATA(INTEL, ESB_4, FEATURES_ICH5) },
1001 { PCI_DEVICE_DATA(INTEL, ICH6_16, FEATURES_ICH5) },
1002 { PCI_DEVICE_DATA(INTEL, ICH7_17, FEATURES_ICH5) },
1003 { PCI_DEVICE_DATA(INTEL, ESB2_17, FEATURES_ICH5) },
1004 { PCI_DEVICE_DATA(INTEL, ICH8_5, FEATURES_ICH5) },
1005 { PCI_DEVICE_DATA(INTEL, ICH9_6, FEATURES_ICH5) },
1006 { PCI_DEVICE_DATA(INTEL, EP80579_1, FEATURES_ICH5) },
1007 { PCI_DEVICE_DATA(INTEL, ICH10_4, FEATURES_ICH5) },
1008 { PCI_DEVICE_DATA(INTEL, ICH10_5, FEATURES_ICH5) },
1009 { PCI_DEVICE_DATA(INTEL, 5_3400_SERIES_SMBUS, FEATURES_ICH5) },
1010 { PCI_DEVICE_DATA(INTEL, COUGARPOINT_SMBUS, FEATURES_ICH5) },
1011 { PCI_DEVICE_DATA(INTEL, PATSBURG_SMBUS, FEATURES_ICH5) },
1012 { PCI_DEVICE_DATA(INTEL, PATSBURG_SMBUS_IDF0, FEATURES_ICH5 | FEATURE_IDF) },
1013 { PCI_DEVICE_DATA(INTEL, PATSBURG_SMBUS_IDF1, FEATURES_ICH5 | FEATURE_IDF) },
1014 { PCI_DEVICE_DATA(INTEL, PATSBURG_SMBUS_IDF2, FEATURES_ICH5 | FEATURE_IDF) },
1015 { PCI_DEVICE_DATA(INTEL, DH89XXCC_SMBUS, FEATURES_ICH5) },
1016 { PCI_DEVICE_DATA(INTEL, PANTHERPOINT_SMBUS, FEATURES_ICH5) },
1017 { PCI_DEVICE_DATA(INTEL, LYNXPOINT_SMBUS, FEATURES_ICH5) },
1018 { PCI_DEVICE_DATA(INTEL, LYNXPOINT_LP_SMBUS, FEATURES_ICH5) },
1019 { PCI_DEVICE_DATA(INTEL, AVOTON_SMBUS, FEATURES_ICH5) },
1020 { PCI_DEVICE_DATA(INTEL, WELLSBURG_SMBUS, FEATURES_ICH5) },
1021 { PCI_DEVICE_DATA(INTEL, WELLSBURG_SMBUS_MS0, FEATURES_ICH5 | FEATURE_IDF) },
1022 { PCI_DEVICE_DATA(INTEL, WELLSBURG_SMBUS_MS1, FEATURES_ICH5 | FEATURE_IDF) },
1023 { PCI_DEVICE_DATA(INTEL, WELLSBURG_SMBUS_MS2, FEATURES_ICH5 | FEATURE_IDF) },
1024 { PCI_DEVICE_DATA(INTEL, COLETOCREEK_SMBUS, FEATURES_ICH5) },
1025 { PCI_DEVICE_DATA(INTEL, GEMINILAKE_SMBUS, FEATURES_ICH5) },
1026 { PCI_DEVICE_DATA(INTEL, WILDCATPOINT_SMBUS, FEATURES_ICH5) },
1027 { PCI_DEVICE_DATA(INTEL, WILDCATPOINT_LP_SMBUS, FEATURES_ICH5) },
1028 { PCI_DEVICE_DATA(INTEL, BAYTRAIL_SMBUS, FEATURES_ICH5) },
1029 { PCI_DEVICE_DATA(INTEL, BRASWELL_SMBUS, FEATURES_ICH5) },
1030 { PCI_DEVICE_DATA(INTEL, SUNRISEPOINT_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1031 { PCI_DEVICE_DATA(INTEL, SUNRISEPOINT_LP_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1032 { PCI_DEVICE_DATA(INTEL, CDF_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1033 { PCI_DEVICE_DATA(INTEL, DNV_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1034 { PCI_DEVICE_DATA(INTEL, EBG_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1035 { PCI_DEVICE_DATA(INTEL, BROXTON_SMBUS, FEATURES_ICH5) },
1036 { PCI_DEVICE_DATA(INTEL, LEWISBURG_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1037 { PCI_DEVICE_DATA(INTEL, LEWISBURG_SSKU_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1038 { PCI_DEVICE_DATA(INTEL, KABYLAKE_PCH_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1039 { PCI_DEVICE_DATA(INTEL, CANNONLAKE_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1040 { PCI_DEVICE_DATA(INTEL, CANNONLAKE_LP_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1041 { PCI_DEVICE_DATA(INTEL, ICELAKE_LP_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1042 { PCI_DEVICE_DATA(INTEL, ICELAKE_N_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1043 { PCI_DEVICE_DATA(INTEL, COMETLAKE_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1044 { PCI_DEVICE_DATA(INTEL, COMETLAKE_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1045 { PCI_DEVICE_DATA(INTEL, COMETLAKE_V_SMBUS, FEATURES_ICH5 | FEATURE_TCO_SPT) },
1046 { PCI_DEVICE_DATA(INTEL, ELKHART_LAKE_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1047 { PCI_DEVICE_DATA(INTEL, TIGERLAKE_LP_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1048 { PCI_DEVICE_DATA(INTEL, TIGERLAKE_H_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1049 { PCI_DEVICE_DATA(INTEL, JASPER_LAKE_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1050 { PCI_DEVICE_DATA(INTEL, ALDER_LAKE_S_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1051 { PCI_DEVICE_DATA(INTEL, ALDER_LAKE_P_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1052 { PCI_DEVICE_DATA(INTEL, ALDER_LAKE_M_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1053 { PCI_DEVICE_DATA(INTEL, RAPTOR_LAKE_S_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1054 { PCI_DEVICE_DATA(INTEL, METEOR_LAKE_P_SMBUS, FEATURES_ICH5 | FEATURE_TCO_CNL) },
1055 { 0, }
1056 };
1057
1058 MODULE_DEVICE_TABLE(pci, i801_ids);
1059
1060 #if defined CONFIG_X86 && defined CONFIG_DMI
1061 static unsigned char apanel_addr;
1062
1063
1064 static __init const void __iomem *bios_signature(const void __iomem *bios)
1065 {
1066 ssize_t offset;
1067 const unsigned char signature[] = "FJKEYINF";
1068
1069 for (offset = 0; offset < 0x10000; offset += 0x10) {
1070 if (check_signature(bios + offset, signature,
1071 sizeof(signature)-1))
1072 return bios + offset;
1073 }
1074 return NULL;
1075 }
1076
1077 static void __init input_apanel_init(void)
1078 {
1079 void __iomem *bios;
1080 const void __iomem *p;
1081
1082 bios = ioremap(0xF0000, 0x10000);
1083 p = bios_signature(bios);
1084 if (p) {
1085
1086 apanel_addr = readb(p + 8 + 3) >> 1;
1087 }
1088 iounmap(bios);
1089 }
1090
1091 struct dmi_onboard_device_info {
1092 const char *name;
1093 u8 type;
1094 unsigned short i2c_addr;
1095 const char *i2c_type;
1096 };
1097
1098 static const struct dmi_onboard_device_info dmi_devices[] = {
1099 { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
1100 { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
1101 { "Hades", DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
1102 };
1103
1104 static void dmi_check_onboard_device(u8 type, const char *name,
1105 struct i2c_adapter *adap)
1106 {
1107 int i;
1108 struct i2c_board_info info;
1109
1110 for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
1111
1112 if ((type & ~0x80) != dmi_devices[i].type)
1113 continue;
1114 if (strcasecmp(name, dmi_devices[i].name))
1115 continue;
1116
1117 memset(&info, 0, sizeof(struct i2c_board_info));
1118 info.addr = dmi_devices[i].i2c_addr;
1119 strscpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
1120 i2c_new_client_device(adap, &info);
1121 break;
1122 }
1123 }
1124
1125
1126
1127
1128 static void dmi_check_onboard_devices(const struct dmi_header *dm, void *adap)
1129 {
1130 int i, count;
1131
1132 if (dm->type != 10)
1133 return;
1134
1135 count = (dm->length - sizeof(struct dmi_header)) / 2;
1136 for (i = 0; i < count; i++) {
1137 const u8 *d = (char *)(dm + 1) + (i * 2);
1138 const char *name = ((char *) dm) + dm->length;
1139 u8 type = d[0];
1140 u8 s = d[1];
1141
1142 if (!s)
1143 continue;
1144 s--;
1145 while (s > 0 && name[0]) {
1146 name += strlen(name) + 1;
1147 s--;
1148 }
1149 if (name[0] == 0)
1150 continue;
1151
1152 dmi_check_onboard_device(type, name, adap);
1153 }
1154 }
1155
1156
1157 static const char *const acpi_smo8800_ids[] = {
1158 "SMO8800",
1159 "SMO8801",
1160 "SMO8810",
1161 "SMO8811",
1162 "SMO8820",
1163 "SMO8821",
1164 "SMO8830",
1165 "SMO8831",
1166 };
1167
1168 static acpi_status check_acpi_smo88xx_device(acpi_handle obj_handle,
1169 u32 nesting_level,
1170 void *context,
1171 void **return_value)
1172 {
1173 struct acpi_device_info *info;
1174 acpi_status status;
1175 char *hid;
1176 int i;
1177
1178 status = acpi_get_object_info(obj_handle, &info);
1179 if (ACPI_FAILURE(status))
1180 return AE_OK;
1181
1182 if (!(info->valid & ACPI_VALID_HID))
1183 goto smo88xx_not_found;
1184
1185 hid = info->hardware_id.string;
1186 if (!hid)
1187 goto smo88xx_not_found;
1188
1189 i = match_string(acpi_smo8800_ids, ARRAY_SIZE(acpi_smo8800_ids), hid);
1190 if (i < 0)
1191 goto smo88xx_not_found;
1192
1193 kfree(info);
1194
1195 *return_value = NULL;
1196 return AE_CTRL_TERMINATE;
1197
1198 smo88xx_not_found:
1199 kfree(info);
1200 return AE_OK;
1201 }
1202
1203 static bool is_dell_system_with_lis3lv02d(void)
1204 {
1205 void *err = ERR_PTR(-ENOENT);
1206
1207 if (!dmi_match(DMI_SYS_VENDOR, "Dell Inc."))
1208 return false;
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218 acpi_get_devices(NULL, check_acpi_smo88xx_device, NULL, &err);
1219
1220 return !IS_ERR(err);
1221 }
1222
1223
1224
1225
1226
1227 static const struct {
1228 const char *dmi_product_name;
1229 unsigned short i2c_addr;
1230 } dell_lis3lv02d_devices[] = {
1231
1232
1233
1234
1235 { "Latitude E5250", 0x29 },
1236 { "Latitude E5450", 0x29 },
1237 { "Latitude E5550", 0x29 },
1238 { "Latitude E6440", 0x29 },
1239 { "Latitude E6440 ATG", 0x29 },
1240 { "Latitude E6540", 0x29 },
1241
1242
1243
1244 { "Latitude 5480", 0x29 },
1245 { "Vostro V131", 0x1d },
1246 };
1247
1248 static void register_dell_lis3lv02d_i2c_device(struct i801_priv *priv)
1249 {
1250 struct i2c_board_info info;
1251 const char *dmi_product_name;
1252 int i;
1253
1254 dmi_product_name = dmi_get_system_info(DMI_PRODUCT_NAME);
1255 for (i = 0; i < ARRAY_SIZE(dell_lis3lv02d_devices); ++i) {
1256 if (strcmp(dmi_product_name,
1257 dell_lis3lv02d_devices[i].dmi_product_name) == 0)
1258 break;
1259 }
1260
1261 if (i == ARRAY_SIZE(dell_lis3lv02d_devices)) {
1262 dev_warn(&priv->pci_dev->dev,
1263 "Accelerometer lis3lv02d is present on SMBus but its"
1264 " address is unknown, skipping registration\n");
1265 return;
1266 }
1267
1268 memset(&info, 0, sizeof(struct i2c_board_info));
1269 info.addr = dell_lis3lv02d_devices[i].i2c_addr;
1270 strscpy(info.type, "lis3lv02d", I2C_NAME_SIZE);
1271 i2c_new_client_device(&priv->adapter, &info);
1272 }
1273
1274
1275 static void i801_probe_optional_slaves(struct i801_priv *priv)
1276 {
1277
1278 if (priv->features & FEATURE_IDF)
1279 return;
1280
1281 if (apanel_addr) {
1282 struct i2c_board_info info = {
1283 .addr = apanel_addr,
1284 .type = "fujitsu_apanel",
1285 };
1286
1287 i2c_new_client_device(&priv->adapter, &info);
1288 }
1289
1290 if (dmi_name_in_vendors("FUJITSU"))
1291 dmi_walk(dmi_check_onboard_devices, &priv->adapter);
1292
1293 if (is_dell_system_with_lis3lv02d())
1294 register_dell_lis3lv02d_i2c_device(priv);
1295
1296
1297 #if IS_ENABLED(CONFIG_I2C_MUX_GPIO)
1298 if (!priv->mux_drvdata)
1299 #endif
1300 i2c_register_spd(&priv->adapter);
1301 }
1302 #else
1303 static void __init input_apanel_init(void) {}
1304 static void i801_probe_optional_slaves(struct i801_priv *priv) {}
1305 #endif
1306
1307 #if IS_ENABLED(CONFIG_I2C_MUX_GPIO) && defined CONFIG_DMI
1308 static struct i801_mux_config i801_mux_config_asus_z8_d12 = {
1309 .gpio_chip = "gpio_ich",
1310 .values = { 0x02, 0x03 },
1311 .n_values = 2,
1312 .classes = { I2C_CLASS_SPD, I2C_CLASS_SPD },
1313 .gpios = { 52, 53 },
1314 .n_gpios = 2,
1315 };
1316
1317 static struct i801_mux_config i801_mux_config_asus_z8_d18 = {
1318 .gpio_chip = "gpio_ich",
1319 .values = { 0x02, 0x03, 0x01 },
1320 .n_values = 3,
1321 .classes = { I2C_CLASS_SPD, I2C_CLASS_SPD, I2C_CLASS_SPD },
1322 .gpios = { 52, 53 },
1323 .n_gpios = 2,
1324 };
1325
1326 static const struct dmi_system_id mux_dmi_table[] = {
1327 {
1328 .matches = {
1329 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1330 DMI_MATCH(DMI_BOARD_NAME, "Z8NA-D6(C)"),
1331 },
1332 .driver_data = &i801_mux_config_asus_z8_d12,
1333 },
1334 {
1335 .matches = {
1336 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1337 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)E-D12(X)"),
1338 },
1339 .driver_data = &i801_mux_config_asus_z8_d12,
1340 },
1341 {
1342 .matches = {
1343 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1344 DMI_MATCH(DMI_BOARD_NAME, "Z8NH-D12"),
1345 },
1346 .driver_data = &i801_mux_config_asus_z8_d12,
1347 },
1348 {
1349 .matches = {
1350 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1351 DMI_MATCH(DMI_BOARD_NAME, "Z8PH-D12/IFB"),
1352 },
1353 .driver_data = &i801_mux_config_asus_z8_d12,
1354 },
1355 {
1356 .matches = {
1357 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1358 DMI_MATCH(DMI_BOARD_NAME, "Z8NR-D12"),
1359 },
1360 .driver_data = &i801_mux_config_asus_z8_d12,
1361 },
1362 {
1363 .matches = {
1364 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1365 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)H-D12"),
1366 },
1367 .driver_data = &i801_mux_config_asus_z8_d12,
1368 },
1369 {
1370 .matches = {
1371 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1372 DMI_MATCH(DMI_BOARD_NAME, "Z8PG-D18"),
1373 },
1374 .driver_data = &i801_mux_config_asus_z8_d18,
1375 },
1376 {
1377 .matches = {
1378 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1379 DMI_MATCH(DMI_BOARD_NAME, "Z8PE-D18"),
1380 },
1381 .driver_data = &i801_mux_config_asus_z8_d18,
1382 },
1383 {
1384 .matches = {
1385 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1386 DMI_MATCH(DMI_BOARD_NAME, "Z8PS-D12"),
1387 },
1388 .driver_data = &i801_mux_config_asus_z8_d12,
1389 },
1390 { }
1391 };
1392
1393
1394 static void i801_add_mux(struct i801_priv *priv)
1395 {
1396 struct device *dev = &priv->adapter.dev;
1397 const struct i801_mux_config *mux_config;
1398 struct i2c_mux_gpio_platform_data gpio_data;
1399 struct gpiod_lookup_table *lookup;
1400 int i;
1401
1402 if (!priv->mux_drvdata)
1403 return;
1404 mux_config = priv->mux_drvdata;
1405
1406
1407 memset(&gpio_data, 0, sizeof(struct i2c_mux_gpio_platform_data));
1408 gpio_data.parent = priv->adapter.nr;
1409 gpio_data.values = mux_config->values;
1410 gpio_data.n_values = mux_config->n_values;
1411 gpio_data.classes = mux_config->classes;
1412 gpio_data.idle = I2C_MUX_GPIO_NO_IDLE;
1413
1414
1415 lookup = devm_kzalloc(dev,
1416 struct_size(lookup, table, mux_config->n_gpios + 1),
1417 GFP_KERNEL);
1418 if (!lookup)
1419 return;
1420 lookup->dev_id = "i2c-mux-gpio";
1421 for (i = 0; i < mux_config->n_gpios; i++)
1422 lookup->table[i] = GPIO_LOOKUP(mux_config->gpio_chip,
1423 mux_config->gpios[i], "mux", 0);
1424 gpiod_add_lookup_table(lookup);
1425 priv->lookup = lookup;
1426
1427
1428
1429
1430
1431
1432
1433
1434 priv->mux_pdev = platform_device_register_data(dev, "i2c-mux-gpio",
1435 PLATFORM_DEVID_NONE, &gpio_data,
1436 sizeof(struct i2c_mux_gpio_platform_data));
1437 if (IS_ERR(priv->mux_pdev)) {
1438 gpiod_remove_lookup_table(lookup);
1439 dev_err(dev, "Failed to register i2c-mux-gpio device\n");
1440 }
1441 }
1442
1443 static void i801_del_mux(struct i801_priv *priv)
1444 {
1445 platform_device_unregister(priv->mux_pdev);
1446 gpiod_remove_lookup_table(priv->lookup);
1447 }
1448
1449 static unsigned int i801_get_adapter_class(struct i801_priv *priv)
1450 {
1451 const struct dmi_system_id *id;
1452 const struct i801_mux_config *mux_config;
1453 unsigned int class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
1454 int i;
1455
1456 id = dmi_first_match(mux_dmi_table);
1457 if (id) {
1458
1459 mux_config = id->driver_data;
1460 for (i = 0; i < mux_config->n_values; i++)
1461 class &= ~mux_config->classes[i];
1462
1463
1464 priv->mux_drvdata = mux_config;
1465 }
1466
1467 return class;
1468 }
1469 #else
1470 static inline void i801_add_mux(struct i801_priv *priv) { }
1471 static inline void i801_del_mux(struct i801_priv *priv) { }
1472
1473 static inline unsigned int i801_get_adapter_class(struct i801_priv *priv)
1474 {
1475 return I2C_CLASS_HWMON | I2C_CLASS_SPD;
1476 }
1477 #endif
1478
1479 static struct platform_device *
1480 i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev,
1481 struct resource *tco_res)
1482 {
1483 static const struct itco_wdt_platform_data pldata = {
1484 .name = "Intel PCH",
1485 .version = 4,
1486 };
1487 struct resource *res;
1488 int ret;
1489
1490
1491
1492
1493
1494
1495 res = &tco_res[1];
1496 ret = p2sb_bar(pci_dev->bus, 0, res);
1497 if (ret)
1498 return ERR_PTR(ret);
1499
1500 if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS)
1501 res->start += SBREG_SMBCTRL_DNV;
1502 else
1503 res->start += SBREG_SMBCTRL;
1504
1505 res->end = res->start + 3;
1506
1507 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1508 tco_res, 2, &pldata, sizeof(pldata));
1509 }
1510
1511 static struct platform_device *
1512 i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev,
1513 struct resource *tco_res)
1514 {
1515 static const struct itco_wdt_platform_data pldata = {
1516 .name = "Intel PCH",
1517 .version = 6,
1518 };
1519
1520 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1521 tco_res, 1, &pldata, sizeof(pldata));
1522 }
1523
1524 static void i801_add_tco(struct i801_priv *priv)
1525 {
1526 struct pci_dev *pci_dev = priv->pci_dev;
1527 struct resource tco_res[2], *res;
1528 u32 tco_base, tco_ctl;
1529
1530
1531 if (acpi_has_watchdog())
1532 return;
1533
1534 if (!(priv->features & (FEATURE_TCO_SPT | FEATURE_TCO_CNL)))
1535 return;
1536
1537 pci_read_config_dword(pci_dev, TCOBASE, &tco_base);
1538 pci_read_config_dword(pci_dev, TCOCTL, &tco_ctl);
1539 if (!(tco_ctl & TCOCTL_EN))
1540 return;
1541
1542 memset(tco_res, 0, sizeof(tco_res));
1543
1544
1545
1546
1547 res = &tco_res[0];
1548 res->start = tco_base & ~1;
1549 res->end = res->start + 32 - 1;
1550 res->flags = IORESOURCE_IO;
1551
1552 if (priv->features & FEATURE_TCO_CNL)
1553 priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res);
1554 else
1555 priv->tco_pdev = i801_add_tco_spt(priv, pci_dev, tco_res);
1556
1557 if (IS_ERR(priv->tco_pdev))
1558 dev_warn(&pci_dev->dev, "failed to create iTCO device\n");
1559 }
1560
1561 #ifdef CONFIG_ACPI
1562 static bool i801_acpi_is_smbus_ioport(const struct i801_priv *priv,
1563 acpi_physical_address address)
1564 {
1565 return address >= priv->smba &&
1566 address <= pci_resource_end(priv->pci_dev, SMBBAR);
1567 }
1568
1569 static acpi_status
1570 i801_acpi_io_handler(u32 function, acpi_physical_address address, u32 bits,
1571 u64 *value, void *handler_context, void *region_context)
1572 {
1573 struct i801_priv *priv = handler_context;
1574 struct pci_dev *pdev = priv->pci_dev;
1575 acpi_status status;
1576
1577
1578
1579
1580
1581
1582 mutex_lock(&priv->acpi_lock);
1583
1584 if (!priv->acpi_reserved && i801_acpi_is_smbus_ioport(priv, address)) {
1585 priv->acpi_reserved = true;
1586
1587 dev_warn(&pdev->dev, "BIOS is accessing SMBus registers\n");
1588 dev_warn(&pdev->dev, "Driver SMBus register access inhibited\n");
1589
1590
1591
1592
1593
1594 pm_runtime_get_sync(&pdev->dev);
1595 }
1596
1597 if ((function & ACPI_IO_MASK) == ACPI_READ)
1598 status = acpi_os_read_port(address, (u32 *)value, bits);
1599 else
1600 status = acpi_os_write_port(address, (u32)*value, bits);
1601
1602 mutex_unlock(&priv->acpi_lock);
1603
1604 return status;
1605 }
1606
1607 static int i801_acpi_probe(struct i801_priv *priv)
1608 {
1609 acpi_handle ah = ACPI_HANDLE(&priv->pci_dev->dev);
1610 acpi_status status;
1611
1612 status = acpi_install_address_space_handler(ah, ACPI_ADR_SPACE_SYSTEM_IO,
1613 i801_acpi_io_handler, NULL, priv);
1614 if (ACPI_SUCCESS(status))
1615 return 0;
1616
1617 return acpi_check_resource_conflict(&priv->pci_dev->resource[SMBBAR]);
1618 }
1619
1620 static void i801_acpi_remove(struct i801_priv *priv)
1621 {
1622 acpi_handle ah = ACPI_HANDLE(&priv->pci_dev->dev);
1623
1624 acpi_remove_address_space_handler(ah, ACPI_ADR_SPACE_SYSTEM_IO, i801_acpi_io_handler);
1625 }
1626 #else
1627 static inline int i801_acpi_probe(struct i801_priv *priv) { return 0; }
1628 static inline void i801_acpi_remove(struct i801_priv *priv) { }
1629 #endif
1630
1631 static void i801_setup_hstcfg(struct i801_priv *priv)
1632 {
1633 unsigned char hstcfg = priv->original_hstcfg;
1634
1635 hstcfg &= ~SMBHSTCFG_I2C_EN;
1636 hstcfg |= SMBHSTCFG_HST_EN;
1637 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hstcfg);
1638 }
1639
1640 static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
1641 {
1642 int err, i;
1643 struct i801_priv *priv;
1644
1645 priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL);
1646 if (!priv)
1647 return -ENOMEM;
1648
1649 i2c_set_adapdata(&priv->adapter, priv);
1650 priv->adapter.owner = THIS_MODULE;
1651 priv->adapter.class = i801_get_adapter_class(priv);
1652 priv->adapter.algo = &smbus_algorithm;
1653 priv->adapter.dev.parent = &dev->dev;
1654 ACPI_COMPANION_SET(&priv->adapter.dev, ACPI_COMPANION(&dev->dev));
1655 priv->adapter.retries = 3;
1656 mutex_init(&priv->acpi_lock);
1657
1658 priv->pci_dev = dev;
1659 priv->features = id->driver_data;
1660
1661
1662 for (i = 0; i < ARRAY_SIZE(i801_feature_names); i++) {
1663 if (priv->features & disable_features & (1 << i))
1664 dev_notice(&dev->dev, "%s disabled by user\n",
1665 i801_feature_names[i]);
1666 }
1667 priv->features &= ~disable_features;
1668
1669 err = pcim_enable_device(dev);
1670 if (err) {
1671 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
1672 err);
1673 return err;
1674 }
1675 pcim_pin_device(dev);
1676
1677
1678 priv->smba = pci_resource_start(dev, SMBBAR);
1679 if (!priv->smba) {
1680 dev_err(&dev->dev,
1681 "SMBus base address uninitialized, upgrade BIOS\n");
1682 return -ENODEV;
1683 }
1684
1685 if (i801_acpi_probe(priv))
1686 return -ENODEV;
1687
1688 err = pcim_iomap_regions(dev, 1 << SMBBAR, DRV_NAME);
1689 if (err) {
1690 dev_err(&dev->dev,
1691 "Failed to request SMBus region 0x%lx-0x%Lx\n",
1692 priv->smba,
1693 (unsigned long long)pci_resource_end(dev, SMBBAR));
1694 i801_acpi_remove(priv);
1695 return err;
1696 }
1697
1698 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &priv->original_hstcfg);
1699 i801_setup_hstcfg(priv);
1700 if (!(priv->original_hstcfg & SMBHSTCFG_HST_EN))
1701 dev_info(&dev->dev, "Enabling SMBus device\n");
1702
1703 if (priv->original_hstcfg & SMBHSTCFG_SMB_SMI_EN) {
1704 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
1705
1706 priv->features &= ~FEATURE_IRQ;
1707 }
1708 if (priv->original_hstcfg & SMBHSTCFG_SPD_WD)
1709 dev_info(&dev->dev, "SPD Write Disable is set\n");
1710
1711
1712 if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
1713 outb_p(inb_p(SMBAUXCTL(priv)) &
1714 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
1715
1716
1717 priv->original_hstcnt = inb_p(SMBHSTCNT(priv)) & ~SMBHSTCNT_KILL;
1718 if (priv->features & FEATURE_HOST_NOTIFY)
1719 priv->original_slvcmd = inb_p(SMBSLVCMD(priv));
1720
1721
1722 priv->adapter.timeout = HZ / 5;
1723
1724 if (dev->irq == IRQ_NOTCONNECTED)
1725 priv->features &= ~FEATURE_IRQ;
1726
1727 if (priv->features & FEATURE_IRQ) {
1728 u16 pcists;
1729
1730
1731 pci_read_config_word(priv->pci_dev, PCI_STATUS, &pcists);
1732 if (pcists & PCI_STATUS_INTERRUPT)
1733 dev_warn(&dev->dev, "An interrupt is pending!\n");
1734 }
1735
1736 if (priv->features & FEATURE_IRQ) {
1737 init_completion(&priv->done);
1738
1739 err = devm_request_irq(&dev->dev, dev->irq, i801_isr,
1740 IRQF_SHARED, DRV_NAME, priv);
1741 if (err) {
1742 dev_err(&dev->dev, "Failed to allocate irq %d: %d\n",
1743 dev->irq, err);
1744 priv->features &= ~FEATURE_IRQ;
1745 }
1746 }
1747 dev_info(&dev->dev, "SMBus using %s\n",
1748 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling");
1749
1750 i801_add_tco(priv);
1751
1752 snprintf(priv->adapter.name, sizeof(priv->adapter.name),
1753 "SMBus I801 adapter at %04lx", priv->smba);
1754 err = i2c_add_adapter(&priv->adapter);
1755 if (err) {
1756 i801_acpi_remove(priv);
1757 return err;
1758 }
1759
1760 i801_enable_host_notify(&priv->adapter);
1761
1762 i801_probe_optional_slaves(priv);
1763
1764 i801_add_mux(priv);
1765
1766 pci_set_drvdata(dev, priv);
1767
1768 dev_pm_set_driver_flags(&dev->dev, DPM_FLAG_NO_DIRECT_COMPLETE);
1769 pm_runtime_set_autosuspend_delay(&dev->dev, 1000);
1770 pm_runtime_use_autosuspend(&dev->dev);
1771 pm_runtime_put_autosuspend(&dev->dev);
1772 pm_runtime_allow(&dev->dev);
1773
1774 return 0;
1775 }
1776
1777 static void i801_remove(struct pci_dev *dev)
1778 {
1779 struct i801_priv *priv = pci_get_drvdata(dev);
1780
1781 outb_p(priv->original_hstcnt, SMBHSTCNT(priv));
1782 i801_disable_host_notify(priv);
1783 i801_del_mux(priv);
1784 i2c_del_adapter(&priv->adapter);
1785 i801_acpi_remove(priv);
1786 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1787
1788 platform_device_unregister(priv->tco_pdev);
1789
1790
1791 if (!priv->acpi_reserved)
1792 pm_runtime_get_noresume(&dev->dev);
1793
1794
1795
1796
1797
1798 }
1799
1800 static void i801_shutdown(struct pci_dev *dev)
1801 {
1802 struct i801_priv *priv = pci_get_drvdata(dev);
1803
1804
1805 outb_p(priv->original_hstcnt, SMBHSTCNT(priv));
1806 i801_disable_host_notify(priv);
1807 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1808 }
1809
1810 #ifdef CONFIG_PM_SLEEP
1811 static int i801_suspend(struct device *dev)
1812 {
1813 struct i801_priv *priv = dev_get_drvdata(dev);
1814
1815 outb_p(priv->original_hstcnt, SMBHSTCNT(priv));
1816 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, priv->original_hstcfg);
1817 return 0;
1818 }
1819
1820 static int i801_resume(struct device *dev)
1821 {
1822 struct i801_priv *priv = dev_get_drvdata(dev);
1823
1824 i801_setup_hstcfg(priv);
1825 i801_enable_host_notify(&priv->adapter);
1826
1827 return 0;
1828 }
1829 #endif
1830
1831 static SIMPLE_DEV_PM_OPS(i801_pm_ops, i801_suspend, i801_resume);
1832
1833 static struct pci_driver i801_driver = {
1834 .name = DRV_NAME,
1835 .id_table = i801_ids,
1836 .probe = i801_probe,
1837 .remove = i801_remove,
1838 .shutdown = i801_shutdown,
1839 .driver = {
1840 .pm = &i801_pm_ops,
1841 },
1842 };
1843
1844 static int __init i2c_i801_init(void)
1845 {
1846 if (dmi_name_in_vendors("FUJITSU"))
1847 input_apanel_init();
1848 return pci_register_driver(&i801_driver);
1849 }
1850
1851 static void __exit i2c_i801_exit(void)
1852 {
1853 pci_unregister_driver(&i801_driver);
1854 }
1855
1856 MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>");
1857 MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>");
1858 MODULE_DESCRIPTION("I801 SMBus driver");
1859 MODULE_LICENSE("GPL");
1860
1861 module_init(i2c_i801_init);
1862 module_exit(i2c_i801_exit);