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