Lines Matching +full:smbus +full:- +full:timeout +full:- +full:disable
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
6 Copyright (C) 2007 - 2014 Jean Delvare <jdelvare@suse.de>
16 * region SMBus Block proc. block
18 * ---------------------------------------------------------------------------
43 * Lynx Point-LP (PCH) 0x9c22 32 hard yes yes yes
51 * Wildcat Point-LP (PCH) 0x9ca2 32 hard yes yes yes
54 * Sunrise Point-H (PCH) 0xa123 32 hard yes yes yes
55 * Sunrise Point-LP (PCH) 0x9d23 32 hard yes yes yes
61 * Kaby Lake PCH-H (PCH) 0xa2a3 32 hard yes yes yes
63 * Cannon Lake-H (PCH) 0xa323 32 hard yes yes yes
64 * Cannon Lake-LP (PCH) 0x9da3 32 hard yes yes yes
66 * Ice Lake-LP (PCH) 0x34a3 32 hard yes yes yes
68 * Comet Lake-H (PCH) 0x06a3 32 hard yes yes yes
70 * Tiger Lake-LP (PCH) 0xa0a3 32 hard yes yes yes
71 * Tiger Lake-H (PCH) 0x43a3 32 hard yes yes yes
73 * Comet Lake-V (PCH) 0xa3a3 32 hard yes yes yes
74 * Alder Lake-S (PCH) 0x7aa3 32 hard yes yes yes
83 * SMBus Host Notify yes
86 * See the file Documentation/i2c/busses/i2c-i801.rst for details.
98 #include <linux/i2c-smbus.h>
112 #include <linux/platform_data/i2c-mux-gpio.h>
115 /* I801 SMBus address offsets */
116 #define SMBHSTSTS(p) (0 + (p)->smba)
117 #define SMBHSTCNT(p) (2 + (p)->smba)
118 #define SMBHSTCMD(p) (3 + (p)->smba)
119 #define SMBHSTADD(p) (4 + (p)->smba)
120 #define SMBHSTDAT0(p) (5 + (p)->smba)
121 #define SMBHSTDAT1(p) (6 + (p)->smba)
122 #define SMBBLKDAT(p) (7 + (p)->smba)
123 #define SMBPEC(p) (8 + (p)->smba) /* ICH3 and later */
124 #define SMBAUXSTS(p) (12 + (p)->smba) /* ICH4 and later */
125 #define SMBAUXCTL(p) (13 + (p)->smba) /* ICH4 and later */
126 #define SMBSLVSTS(p) (16 + (p)->smba) /* ICH3 and later */
127 #define SMBSLVCMD(p) (17 + (p)->smba) /* ICH3 and later */
128 #define SMBNTFDADD(p) (20 + (p)->smba) /* ICH3 and later */
216 /* Patsburg also has three 'Integrated Device Function' SMBus controllers */
256 unsigned gpios[2]; /* Relative to gpio_chip->base */
272 /* Command state used by isr for byte-by-byte block transactions */
306 "SMBus PEC",
311 "SMBus Host Notify",
316 MODULE_PARM_DESC(disable_features, "Disable selected driver features:\n"
317 "\t\t 0x01 disable SMBus PEC\n"
318 "\t\t 0x02 disable the block buffer\n"
319 "\t\t 0x08 disable the I2C block read functionality\n"
321 "\t\t 0x20 disable SMBus Host Notify ");
323 /* Make sure the SMBus host is ready to start transmitting.
324 Return 0 if it is, -EBUSY if it is not. */
331 dev_err(&priv->pci_dev->dev, "SMBus is busy, can't use it!\n"); in i801_check_pre()
332 return -EBUSY; in i801_check_pre()
337 dev_dbg(&priv->pci_dev->dev, "Clearing status flags (%02x)\n", in i801_check_pre()
342 dev_err(&priv->pci_dev->dev, in i801_check_pre()
345 return -EBUSY; in i801_check_pre()
356 if (priv->features & FEATURE_SMBUS_PEC) { in i801_check_pre()
359 dev_dbg(&priv->pci_dev->dev, in i801_check_pre()
364 dev_err(&priv->pci_dev->dev, in i801_check_pre()
367 return -EBUSY; in i801_check_pre()
385 * If the SMBus is still busy, we give up in i801_check_post()
386 * Note: This timeout condition only happens when using polling in i801_check_post()
387 * transactions. For interrupt operation, NAK/timeout is indicated by in i801_check_post()
391 dev_err(&priv->pci_dev->dev, "Transaction timeout\n"); in i801_check_post()
393 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n"); in i801_check_post()
402 dev_err(&priv->pci_dev->dev, in i801_check_post()
405 return -ETIMEDOUT; in i801_check_post()
409 result = -EIO; in i801_check_post()
410 dev_err(&priv->pci_dev->dev, "Transaction failed\n"); in i801_check_post()
428 if ((priv->features & FEATURE_SMBUS_PEC) && in i801_check_post()
431 result = -EBADMSG; in i801_check_post()
432 dev_dbg(&priv->pci_dev->dev, "PEC error\n"); in i801_check_post()
434 result = -ENXIO; in i801_check_post()
435 dev_dbg(&priv->pci_dev->dev, "No response\n"); in i801_check_post()
439 result = -EAGAIN; in i801_check_post()
440 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n"); in i801_check_post()
452 int timeout = 0; in i801_wait_intr() local
461 (timeout++ < MAX_RETRIES)); in i801_wait_intr()
463 if (timeout > MAX_RETRIES) { in i801_wait_intr()
464 dev_dbg(&priv->pci_dev->dev, "INTR Timeout!\n"); in i801_wait_intr()
465 return -ETIMEDOUT; in i801_wait_intr()
473 int timeout = 0; in i801_wait_byte_done() local
481 (timeout++ < MAX_RETRIES)); in i801_wait_byte_done()
483 if (timeout > MAX_RETRIES) { in i801_wait_byte_done()
484 dev_dbg(&priv->pci_dev->dev, "BYTE_DONE Timeout!\n"); in i801_wait_byte_done()
485 return -ETIMEDOUT; in i801_wait_byte_done()
494 const struct i2c_adapter *adap = &priv->adapter; in i801_transaction()
500 if (priv->features & FEATURE_IRQ) { in i801_transaction()
503 result = wait_event_timeout(priv->waitq, in i801_transaction()
504 (status = priv->status), in i801_transaction()
505 adap->timeout); in i801_transaction()
507 status = -ETIMEDOUT; in i801_transaction()
508 dev_warn(&priv->pci_dev->dev, in i801_transaction()
509 "Timeout waiting for interrupt!\n"); in i801_transaction()
511 priv->status = 0; in i801_transaction()
540 return -EOPNOTSUPP; in i801_block_transaction_by_block()
547 len = data->block[0]; in i801_block_transaction_by_block()
551 outb_p(data->block[i+1], SMBBLKDAT(priv)); in i801_block_transaction_by_block()
562 return -EPROTO; in i801_block_transaction_by_block()
564 data->block[0] = len; in i801_block_transaction_by_block()
567 data->block[i + 1] = inb_p(SMBBLKDAT(priv)); in i801_block_transaction_by_block()
574 if (priv->is_read) { in i801_isr_byte_done()
575 /* For SMBus block reads, length is received with first byte */ in i801_isr_byte_done()
576 if (((priv->cmd & 0x1c) == I801_BLOCK_DATA) && in i801_isr_byte_done()
577 (priv->count == 0)) { in i801_isr_byte_done()
578 priv->len = inb_p(SMBHSTDAT0(priv)); in i801_isr_byte_done()
579 if (priv->len < 1 || priv->len > I2C_SMBUS_BLOCK_MAX) { in i801_isr_byte_done()
580 dev_err(&priv->pci_dev->dev, in i801_isr_byte_done()
581 "Illegal SMBus block read size %d\n", in i801_isr_byte_done()
582 priv->len); in i801_isr_byte_done()
584 priv->len = I2C_SMBUS_BLOCK_MAX; in i801_isr_byte_done()
586 dev_dbg(&priv->pci_dev->dev, in i801_isr_byte_done()
587 "SMBus block read size is %d\n", in i801_isr_byte_done()
588 priv->len); in i801_isr_byte_done()
590 priv->data[-1] = priv->len; in i801_isr_byte_done()
594 if (priv->count < priv->len) in i801_isr_byte_done()
595 priv->data[priv->count++] = inb(SMBBLKDAT(priv)); in i801_isr_byte_done()
597 dev_dbg(&priv->pci_dev->dev, in i801_isr_byte_done()
601 if (priv->count == priv->len - 1) in i801_isr_byte_done()
602 outb_p(priv->cmd | SMBHSTCNT_LAST_BYTE, in i801_isr_byte_done()
604 } else if (priv->count < priv->len - 1) { in i801_isr_byte_done()
606 outb_p(priv->data[++priv->count], SMBBLKDAT(priv)); in i801_isr_byte_done()
620 * With the tested platforms, reading SMBNTFDDAT (22 + (p)->smba) in i801_host_notify_isr()
624 i2c_handle_smbus_host_notify(&priv->adapter, addr); in i801_host_notify_isr()
635 * INTR - Success
636 * DEV_ERR - Invalid command, NAK or communication timeout
637 * BUS_ERR - SMI# transaction collision
638 * FAILED - transaction was canceled due to a KILL request
639 * When any of these occur, update ->status and wake up the waitq.
640 * ->status must be cleared before kicking off the next transaction.
642 * 2) For byte-by-byte (I2C read/write) transactions, one BYTE_DONE interrupt
643 * occurs for each byte of a byte-by-byte to prepare the next byte.
654 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists); in i801_isr()
658 if (priv->features & FEATURE_HOST_NOTIFY) { in i801_isr()
670 * ->status must be cleared before the next transaction is started. in i801_isr()
675 priv->status = status; in i801_isr()
676 wake_up(&priv->waitq); in i801_isr()
683 * For "byte-by-byte" block transactions:
696 const struct i2c_adapter *adap = &priv->adapter; in i801_block_transaction_byte_by_byte()
699 return -EOPNOTSUPP; in i801_block_transaction_byte_by_byte()
705 len = data->block[0]; in i801_block_transaction_byte_by_byte()
709 outb_p(data->block[1], SMBBLKDAT(priv)); in i801_block_transaction_byte_by_byte()
718 if (priv->features & FEATURE_IRQ) { in i801_block_transaction_byte_by_byte()
719 priv->is_read = (read_write == I2C_SMBUS_READ); in i801_block_transaction_byte_by_byte()
720 if (len == 1 && priv->is_read) in i801_block_transaction_byte_by_byte()
722 priv->cmd = smbcmd | SMBHSTCNT_INTREN; in i801_block_transaction_byte_by_byte()
723 priv->len = len; in i801_block_transaction_byte_by_byte()
724 priv->count = 0; in i801_block_transaction_byte_by_byte()
725 priv->data = &data->block[1]; in i801_block_transaction_byte_by_byte()
727 outb_p(priv->cmd | SMBHSTCNT_START, SMBHSTCNT(priv)); in i801_block_transaction_byte_by_byte()
728 result = wait_event_timeout(priv->waitq, in i801_block_transaction_byte_by_byte()
729 (status = priv->status), in i801_block_transaction_byte_by_byte()
730 adap->timeout); in i801_block_transaction_byte_by_byte()
732 status = -ETIMEDOUT; in i801_block_transaction_byte_by_byte()
733 dev_warn(&priv->pci_dev->dev, in i801_block_transaction_byte_by_byte()
734 "Timeout waiting for interrupt!\n"); in i801_block_transaction_byte_by_byte()
736 priv->status = 0; in i801_block_transaction_byte_by_byte()
753 dev_err(&priv->pci_dev->dev, in i801_block_transaction_byte_by_byte()
754 "Illegal SMBus block read size %d\n", in i801_block_transaction_byte_by_byte()
762 return -EPROTO; in i801_block_transaction_byte_by_byte()
764 data->block[0] = len; in i801_block_transaction_byte_by_byte()
768 data->block[i] = inb_p(SMBBLKDAT(priv)); in i801_block_transaction_byte_by_byte()
769 if (i == len - 1) in i801_block_transaction_byte_by_byte()
774 outb_p(data->block[i+1], SMBBLKDAT(priv)); in i801_block_transaction_byte_by_byte()
794 data->block[0] = I2C_SMBUS_BLOCK_MAX; in i801_block_transaction()
795 else if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX) in i801_block_transaction()
796 return -EPROTO; in i801_block_transaction()
801 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc); in i801_block_transaction()
802 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, in i801_block_transaction()
804 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) { in i801_block_transaction()
805 dev_err(&priv->pci_dev->dev, in i801_block_transaction()
807 return -EOPNOTSUPP; in i801_block_transaction()
812 SMBus (not I2C) block transactions, even though the datasheet in i801_block_transaction()
814 if ((priv->features & FEATURE_BLOCK_BUFFER) && in i801_block_transaction()
827 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc); in i801_block_transaction()
842 mutex_lock(&priv->acpi_lock); in i801_access()
843 if (priv->acpi_reserved) { in i801_access()
844 mutex_unlock(&priv->acpi_lock); in i801_access()
845 return -EBUSY; in i801_access()
848 pm_runtime_get_sync(&priv->pci_dev->dev); in i801_access()
850 hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC) in i801_access()
872 outb_p(data->byte, SMBHSTDAT0(priv)); in i801_access()
880 outb_p(data->word & 0xff, SMBHSTDAT0(priv)); in i801_access()
881 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv)); in i801_access()
895 * However if SPD Write Disable is set (Lynx Point and later), in i801_access()
899 ((priv->original_hstcfg & SMBHSTCFG_SPD_WD) ? in i801_access()
920 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n", in i801_access()
922 ret = -EOPNOTSUPP; in i801_access()
926 if (hwpec) /* enable/disable hardware PEC */ in i801_access()
939 time, so we forcibly disable it after every transaction. Turn off in i801_access()
955 data->byte = inb_p(SMBHSTDAT0(priv)); in i801_access()
958 data->word = inb_p(SMBHSTDAT0(priv)) + in i801_access()
964 /* Unlock the SMBus device for use by BIOS/ACPI */ in i801_access()
967 pm_runtime_mark_last_busy(&priv->pci_dev->dev); in i801_access()
968 pm_runtime_put_autosuspend(&priv->pci_dev->dev); in i801_access()
969 mutex_unlock(&priv->acpi_lock); in i801_access()
981 ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) | in i801_func()
982 ((priv->features & FEATURE_BLOCK_PROC) ? in i801_func()
984 ((priv->features & FEATURE_I2C_BLOCK_READ) ? in i801_func()
986 ((priv->features & FEATURE_HOST_NOTIFY) ? in i801_func()
994 if (!(priv->features & FEATURE_HOST_NOTIFY)) in i801_enable_host_notify()
997 if (!(SMBSLVCMD_HST_NTFY_INTREN & priv->original_slvcmd)) in i801_enable_host_notify()
998 outb_p(SMBSLVCMD_HST_NTFY_INTREN | priv->original_slvcmd, in i801_enable_host_notify()
1007 if (!(priv->features & FEATURE_HOST_NOTIFY)) in i801_disable_host_notify()
1010 outb_p(priv->original_slvcmd, SMBSLVCMD(priv)); in i801_disable_host_notify()
1091 sizeof(signature)-1)) in bios_signature()
1152 if (dm->type != 10) in dmi_check_onboard_devices()
1155 count = (dm->length - sizeof(struct dmi_header)) / 2; in dmi_check_onboard_devices()
1158 const char *name = ((char *) dm) + dm->length; in dmi_check_onboard_devices()
1164 s--; in dmi_check_onboard_devices()
1167 s--; in dmi_check_onboard_devices()
1176 /* NOTE: Keep this list in sync with drivers/platform/x86/dell-smo8800.c */
1202 if (!(info->valid & ACPI_VALID_HID)) in check_acpi_smo88xx_device()
1205 hid = info->hardware_id.string; in check_acpi_smo88xx_device()
1287 dev_warn(&priv->pci_dev->dev, in register_dell_lis3lv02d_i2c_device()
1288 "Accelerometer lis3lv02d is present on SMBus but its" in register_dell_lis3lv02d_i2c_device()
1296 i2c_new_client_device(&priv->adapter, &info); in register_dell_lis3lv02d_i2c_device()
1302 /* Only register slaves on main SMBus channel */ in i801_probe_optional_slaves()
1303 if (priv->features & FEATURE_IDF) in i801_probe_optional_slaves()
1312 i2c_new_client_device(&priv->adapter, &info); in i801_probe_optional_slaves()
1316 dmi_walk(dmi_check_onboard_devices, &priv->adapter); in i801_probe_optional_slaves()
1321 /* Instantiate SPD EEPROMs unless the SMBus is multiplexed */ in i801_probe_optional_slaves()
1323 if (!priv->mux_drvdata) in i801_probe_optional_slaves()
1325 i2c_register_spd(&priv->adapter); in i801_probe_optional_slaves()
1355 DMI_MATCH(DMI_BOARD_NAME, "Z8NA-D6(C)"),
1362 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)E-D12(X)"),
1369 DMI_MATCH(DMI_BOARD_NAME, "Z8NH-D12"),
1376 DMI_MATCH(DMI_BOARD_NAME, "Z8PH-D12/IFB"),
1383 DMI_MATCH(DMI_BOARD_NAME, "Z8NR-D12"),
1390 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)H-D12"),
1397 DMI_MATCH(DMI_BOARD_NAME, "Z8PG-D18"),
1404 DMI_MATCH(DMI_BOARD_NAME, "Z8PE-D18"),
1411 DMI_MATCH(DMI_BOARD_NAME, "Z8PS-D12"),
1421 struct device *dev = &priv->adapter.dev; in i801_add_mux()
1427 if (!priv->mux_drvdata) in i801_add_mux()
1429 mux_config = priv->mux_drvdata; in i801_add_mux()
1433 gpio_data.parent = priv->adapter.nr; in i801_add_mux()
1434 gpio_data.values = mux_config->values; in i801_add_mux()
1435 gpio_data.n_values = mux_config->n_values; in i801_add_mux()
1436 gpio_data.classes = mux_config->classes; in i801_add_mux()
1441 struct_size(lookup, table, mux_config->n_gpios + 1), in i801_add_mux()
1444 return -ENOMEM; in i801_add_mux()
1445 lookup->dev_id = "i2c-mux-gpio"; in i801_add_mux()
1446 for (i = 0; i < mux_config->n_gpios; i++) { in i801_add_mux()
1447 lookup->table[i] = (struct gpiod_lookup) in i801_add_mux()
1448 GPIO_LOOKUP(mux_config->gpio_chip, in i801_add_mux()
1449 mux_config->gpios[i], "mux", 0); in i801_add_mux()
1452 priv->lookup = lookup; in i801_add_mux()
1461 priv->mux_pdev = platform_device_register_data(dev, "i2c-mux-gpio", in i801_add_mux()
1464 if (IS_ERR(priv->mux_pdev)) { in i801_add_mux()
1465 err = PTR_ERR(priv->mux_pdev); in i801_add_mux()
1467 priv->mux_pdev = NULL; in i801_add_mux()
1468 dev_err(dev, "Failed to register i2c-mux-gpio device\n"); in i801_add_mux()
1477 if (priv->mux_pdev) in i801_del_mux()
1478 platform_device_unregister(priv->mux_pdev); in i801_del_mux()
1479 if (priv->lookup) in i801_del_mux()
1480 gpiod_remove_lookup_table(priv->lookup); in i801_del_mux()
1493 mux_config = id->driver_data; in i801_get_adapter_class()
1494 for (i = 0; i < mux_config->n_values; i++) in i801_get_adapter_class()
1495 class &= ~mux_config->classes[i]; in i801_get_adapter_class()
1498 priv->mux_drvdata = mux_config; in i801_get_adapter_class()
1538 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 1); in i801_add_tco_spt()
1541 pci_bus_read_config_byte(pci_dev->bus, devfn, 0xe1, &hidden); in i801_add_tco_spt()
1543 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x0); in i801_add_tco_spt()
1545 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR, &base_addr); in i801_add_tco_spt()
1548 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR + 0x4, &base_addr); in i801_add_tco_spt()
1553 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden); in i801_add_tco_spt()
1557 if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS) in i801_add_tco_spt()
1558 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV; in i801_add_tco_spt()
1560 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL; in i801_add_tco_spt()
1562 res->end = res->start + 3; in i801_add_tco_spt()
1563 res->flags = IORESOURCE_MEM; in i801_add_tco_spt()
1565 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, in i801_add_tco_spt()
1579 return platform_device_register_resndata(&pci_dev->dev, in i801_add_tco_cnl()
1580 "iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data, in i801_add_tco_cnl()
1586 struct pci_dev *pci_dev = priv->pci_dev; in i801_add_tco()
1594 if (!(priv->features & (FEATURE_TCO_SPT | FEATURE_TCO_CNL))) in i801_add_tco()
1608 res->start = tco_base & ~1; in i801_add_tco()
1609 res->end = res->start + 32 - 1; in i801_add_tco()
1610 res->flags = IORESOURCE_IO; in i801_add_tco()
1612 if (priv->features & FEATURE_TCO_CNL) in i801_add_tco()
1613 priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res); in i801_add_tco()
1615 priv->tco_pdev = i801_add_tco_spt(priv, pci_dev, tco_res); in i801_add_tco()
1617 if (IS_ERR(priv->tco_pdev)) in i801_add_tco()
1618 dev_warn(&pci_dev->dev, "failed to create iTCO device\n"); in i801_add_tco()
1625 return address >= priv->smba && in i801_acpi_is_smbus_ioport()
1626 address <= pci_resource_end(priv->pci_dev, SMBBAR); in i801_acpi_is_smbus_ioport()
1634 struct pci_dev *pdev = priv->pci_dev; in i801_acpi_io_handler()
1642 mutex_lock(&priv->acpi_lock); in i801_acpi_io_handler()
1644 if (!priv->acpi_reserved && i801_acpi_is_smbus_ioport(priv, address)) { in i801_acpi_io_handler()
1645 priv->acpi_reserved = true; in i801_acpi_io_handler()
1647 dev_warn(&pdev->dev, "BIOS is accessing SMBus registers\n"); in i801_acpi_io_handler()
1648 dev_warn(&pdev->dev, "Driver SMBus register access inhibited\n"); in i801_acpi_io_handler()
1654 pm_runtime_get_sync(&pdev->dev); in i801_acpi_io_handler()
1662 mutex_unlock(&priv->acpi_lock); in i801_acpi_io_handler()
1672 adev = ACPI_COMPANION(&priv->pci_dev->dev); in i801_acpi_probe()
1674 status = acpi_install_address_space_handler(adev->handle, in i801_acpi_probe()
1681 return acpi_check_resource_conflict(&priv->pci_dev->resource[SMBBAR]); in i801_acpi_probe()
1688 adev = ACPI_COMPANION(&priv->pci_dev->dev); in i801_acpi_remove()
1692 acpi_remove_address_space_handler(adev->handle, in i801_acpi_remove()
1695 mutex_lock(&priv->acpi_lock); in i801_acpi_remove()
1696 if (priv->acpi_reserved) in i801_acpi_remove()
1697 pm_runtime_put(&priv->pci_dev->dev); in i801_acpi_remove()
1698 mutex_unlock(&priv->acpi_lock); in i801_acpi_remove()
1707 unsigned char hstcfg = priv->original_hstcfg; in i801_setup_hstcfg()
1709 hstcfg &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */ in i801_setup_hstcfg()
1711 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hstcfg); in i801_setup_hstcfg()
1721 priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL); in i801_probe()
1723 return -ENOMEM; in i801_probe()
1725 i2c_set_adapdata(&priv->adapter, priv); in i801_probe()
1726 priv->adapter.owner = THIS_MODULE; in i801_probe()
1727 priv->adapter.class = i801_get_adapter_class(priv); in i801_probe()
1728 priv->adapter.algo = &smbus_algorithm; in i801_probe()
1729 priv->adapter.dev.parent = &dev->dev; in i801_probe()
1730 ACPI_COMPANION_SET(&priv->adapter.dev, ACPI_COMPANION(&dev->dev)); in i801_probe()
1731 priv->adapter.retries = 3; in i801_probe()
1732 mutex_init(&priv->acpi_lock); in i801_probe()
1734 priv->pci_dev = dev; in i801_probe()
1735 switch (dev->device) { in i801_probe()
1743 priv->features |= FEATURE_BLOCK_PROC; in i801_probe()
1744 priv->features |= FEATURE_I2C_BLOCK_READ; in i801_probe()
1745 priv->features |= FEATURE_IRQ; in i801_probe()
1746 priv->features |= FEATURE_SMBUS_PEC; in i801_probe()
1747 priv->features |= FEATURE_BLOCK_BUFFER; in i801_probe()
1748 priv->features |= FEATURE_TCO_SPT; in i801_probe()
1749 priv->features |= FEATURE_HOST_NOTIFY; in i801_probe()
1764 priv->features |= FEATURE_BLOCK_PROC; in i801_probe()
1765 priv->features |= FEATURE_I2C_BLOCK_READ; in i801_probe()
1766 priv->features |= FEATURE_IRQ; in i801_probe()
1767 priv->features |= FEATURE_SMBUS_PEC; in i801_probe()
1768 priv->features |= FEATURE_BLOCK_BUFFER; in i801_probe()
1769 priv->features |= FEATURE_TCO_CNL; in i801_probe()
1770 priv->features |= FEATURE_HOST_NOTIFY; in i801_probe()
1779 priv->features |= FEATURE_IDF; in i801_probe()
1782 priv->features |= FEATURE_BLOCK_PROC; in i801_probe()
1783 priv->features |= FEATURE_I2C_BLOCK_READ; in i801_probe()
1784 priv->features |= FEATURE_IRQ; in i801_probe()
1787 priv->features |= FEATURE_SMBUS_PEC; in i801_probe()
1788 priv->features |= FEATURE_BLOCK_BUFFER; in i801_probe()
1791 priv->features |= FEATURE_HOST_NOTIFY; in i801_probe()
1799 /* Disable features on user request */ in i801_probe()
1801 if (priv->features & disable_features & (1 << i)) in i801_probe()
1802 dev_notice(&dev->dev, "%s disabled by user\n", in i801_probe()
1805 priv->features &= ~disable_features; in i801_probe()
1809 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n", in i801_probe()
1815 /* Determine the address of the SMBus area */ in i801_probe()
1816 priv->smba = pci_resource_start(dev, SMBBAR); in i801_probe()
1817 if (!priv->smba) { in i801_probe()
1818 dev_err(&dev->dev, in i801_probe()
1819 "SMBus base address uninitialized, upgrade BIOS\n"); in i801_probe()
1820 return -ENODEV; in i801_probe()
1824 return -ENODEV; in i801_probe()
1827 dev_driver_string(&dev->dev)); in i801_probe()
1829 dev_err(&dev->dev, in i801_probe()
1830 "Failed to request SMBus region 0x%lx-0x%Lx\n", in i801_probe()
1831 priv->smba, in i801_probe()
1837 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &priv->original_hstcfg); in i801_probe()
1839 if (!(priv->original_hstcfg & SMBHSTCFG_HST_EN)) in i801_probe()
1840 dev_info(&dev->dev, "Enabling SMBus device\n"); in i801_probe()
1843 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n"); in i801_probe()
1844 /* Disable SMBus interrupt feature if SMBus using SMI# */ in i801_probe()
1845 priv->features &= ~FEATURE_IRQ; in i801_probe()
1848 dev_info(&dev->dev, "SPD Write Disable is set\n"); in i801_probe()
1851 if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER)) in i801_probe()
1856 if (priv->features & FEATURE_HOST_NOTIFY) in i801_probe()
1857 priv->original_slvcmd = inb_p(SMBSLVCMD(priv)); in i801_probe()
1859 /* Default timeout in interrupt mode: 200 ms */ in i801_probe()
1860 priv->adapter.timeout = HZ / 5; in i801_probe()
1862 if (dev->irq == IRQ_NOTCONNECTED) in i801_probe()
1863 priv->features &= ~FEATURE_IRQ; in i801_probe()
1865 if (priv->features & FEATURE_IRQ) { in i801_probe()
1869 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists); in i801_probe()
1871 dev_warn(&dev->dev, "An interrupt is pending!\n"); in i801_probe()
1874 pci_read_config_word(priv->pci_dev, SMBPCICTL, &pcictl); in i801_probe()
1876 dev_info(&dev->dev, "Interrupts are disabled\n"); in i801_probe()
1877 priv->features &= ~FEATURE_IRQ; in i801_probe()
1881 if (priv->features & FEATURE_IRQ) { in i801_probe()
1882 init_waitqueue_head(&priv->waitq); in i801_probe()
1884 err = devm_request_irq(&dev->dev, dev->irq, i801_isr, in i801_probe()
1886 dev_driver_string(&dev->dev), priv); in i801_probe()
1888 dev_err(&dev->dev, "Failed to allocate irq %d: %d\n", in i801_probe()
1889 dev->irq, err); in i801_probe()
1890 priv->features &= ~FEATURE_IRQ; in i801_probe()
1893 dev_info(&dev->dev, "SMBus using %s\n", in i801_probe()
1894 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling"); in i801_probe()
1898 snprintf(priv->adapter.name, sizeof(priv->adapter.name), in i801_probe()
1899 "SMBus I801 adapter at %04lx", priv->smba); in i801_probe()
1900 err = i2c_add_adapter(&priv->adapter); in i801_probe()
1902 platform_device_unregister(priv->tco_pdev); in i801_probe()
1907 i801_enable_host_notify(&priv->adapter); in i801_probe()
1910 /* We ignore errors - multiplexing is optional */ in i801_probe()
1915 dev_pm_set_driver_flags(&dev->dev, DPM_FLAG_NO_DIRECT_COMPLETE); in i801_probe()
1916 pm_runtime_set_autosuspend_delay(&dev->dev, 1000); in i801_probe()
1917 pm_runtime_use_autosuspend(&dev->dev); in i801_probe()
1918 pm_runtime_put_autosuspend(&dev->dev); in i801_probe()
1919 pm_runtime_allow(&dev->dev); in i801_probe()
1928 pm_runtime_forbid(&dev->dev); in i801_remove()
1929 pm_runtime_get_noresume(&dev->dev); in i801_remove()
1933 i2c_del_adapter(&priv->adapter); in i801_remove()
1935 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg); in i801_remove()
1937 platform_device_unregister(priv->tco_pdev); in i801_remove()
1941 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010) in i801_remove()
1951 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg); in i801_shutdown()
1959 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, priv->original_hstcfg); in i801_suspend()
1968 i801_enable_host_notify(&priv->adapter); in i801_resume()
2001 MODULE_DESCRIPTION("I801 SMBus driver");