• Home
  • Raw
  • Download

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()
545 /* Use 32-byte buffer to process this transaction */ in i801_block_transaction_by_block()
547 len = data->block[0]; in i801_block_transaction_by_block()
550 outb_p(data->block[i+1], SMBBLKDAT(priv)); in i801_block_transaction_by_block()
561 return -EPROTO; in i801_block_transaction_by_block()
563 data->block[0] = len; in i801_block_transaction_by_block()
565 data->block[i + 1] = inb_p(SMBBLKDAT(priv)); in i801_block_transaction_by_block()
572 if (priv->is_read) { in i801_isr_byte_done()
573 /* For SMBus block reads, length is received with first byte */ in i801_isr_byte_done()
574 if (((priv->cmd & 0x1c) == I801_BLOCK_DATA) && in i801_isr_byte_done()
575 (priv->count == 0)) { in i801_isr_byte_done()
576 priv->len = inb_p(SMBHSTDAT0(priv)); in i801_isr_byte_done()
577 if (priv->len < 1 || priv->len > I2C_SMBUS_BLOCK_MAX) { in i801_isr_byte_done()
578 dev_err(&priv->pci_dev->dev, in i801_isr_byte_done()
579 "Illegal SMBus block read size %d\n", in i801_isr_byte_done()
580 priv->len); in i801_isr_byte_done()
582 priv->len = I2C_SMBUS_BLOCK_MAX; in i801_isr_byte_done()
584 dev_dbg(&priv->pci_dev->dev, in i801_isr_byte_done()
585 "SMBus block read size is %d\n", in i801_isr_byte_done()
586 priv->len); in i801_isr_byte_done()
588 priv->data[-1] = priv->len; in i801_isr_byte_done()
592 if (priv->count < priv->len) in i801_isr_byte_done()
593 priv->data[priv->count++] = inb(SMBBLKDAT(priv)); in i801_isr_byte_done()
595 dev_dbg(&priv->pci_dev->dev, in i801_isr_byte_done()
599 if (priv->count == priv->len - 1) in i801_isr_byte_done()
600 outb_p(priv->cmd | SMBHSTCNT_LAST_BYTE, in i801_isr_byte_done()
602 } else if (priv->count < priv->len - 1) { in i801_isr_byte_done()
604 outb_p(priv->data[++priv->count], SMBBLKDAT(priv)); in i801_isr_byte_done()
618 * With the tested platforms, reading SMBNTFDDAT (22 + (p)->smba) in i801_host_notify_isr()
622 i2c_handle_smbus_host_notify(&priv->adapter, addr); in i801_host_notify_isr()
633 * INTR - Success
634 * DEV_ERR - Invalid command, NAK or communication timeout
635 * BUS_ERR - SMI# transaction collision
636 * FAILED - transaction was canceled due to a KILL request
637 * When any of these occur, update ->status and wake up the waitq.
638 * ->status must be cleared before kicking off the next transaction.
640 * 2) For byte-by-byte (I2C read/write) transactions, one BYTE_DONE interrupt
641 * occurs for each byte of a byte-by-byte to prepare the next byte.
652 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists); in i801_isr()
656 if (priv->features & FEATURE_HOST_NOTIFY) { in i801_isr()
668 * ->status must be cleared before the next transaction is started. in i801_isr()
673 priv->status = status; in i801_isr()
674 wake_up(&priv->waitq); in i801_isr()
681 * For "byte-by-byte" block transactions:
694 const struct i2c_adapter *adap = &priv->adapter; in i801_block_transaction_byte_by_byte()
697 return -EOPNOTSUPP; in i801_block_transaction_byte_by_byte()
703 len = data->block[0]; in i801_block_transaction_byte_by_byte()
707 outb_p(data->block[1], SMBBLKDAT(priv)); in i801_block_transaction_byte_by_byte()
716 if (priv->features & FEATURE_IRQ) { in i801_block_transaction_byte_by_byte()
717 priv->is_read = (read_write == I2C_SMBUS_READ); in i801_block_transaction_byte_by_byte()
718 if (len == 1 && priv->is_read) in i801_block_transaction_byte_by_byte()
720 priv->cmd = smbcmd | SMBHSTCNT_INTREN; in i801_block_transaction_byte_by_byte()
721 priv->len = len; in i801_block_transaction_byte_by_byte()
722 priv->count = 0; in i801_block_transaction_byte_by_byte()
723 priv->data = &data->block[1]; in i801_block_transaction_byte_by_byte()
725 outb_p(priv->cmd | SMBHSTCNT_START, SMBHSTCNT(priv)); in i801_block_transaction_byte_by_byte()
726 result = wait_event_timeout(priv->waitq, in i801_block_transaction_byte_by_byte()
727 (status = priv->status), in i801_block_transaction_byte_by_byte()
728 adap->timeout); in i801_block_transaction_byte_by_byte()
730 status = -ETIMEDOUT; in i801_block_transaction_byte_by_byte()
731 dev_warn(&priv->pci_dev->dev, in i801_block_transaction_byte_by_byte()
732 "Timeout waiting for interrupt!\n"); in i801_block_transaction_byte_by_byte()
734 priv->status = 0; in i801_block_transaction_byte_by_byte()
751 dev_err(&priv->pci_dev->dev, in i801_block_transaction_byte_by_byte()
752 "Illegal SMBus block read size %d\n", in i801_block_transaction_byte_by_byte()
760 return -EPROTO; in i801_block_transaction_byte_by_byte()
762 data->block[0] = len; in i801_block_transaction_byte_by_byte()
766 data->block[i] = inb_p(SMBBLKDAT(priv)); in i801_block_transaction_byte_by_byte()
767 if (i == len - 1) in i801_block_transaction_byte_by_byte()
772 outb_p(data->block[i+1], SMBBLKDAT(priv)); in i801_block_transaction_byte_by_byte()
787 return -EIO; in i801_set_block_buffer_mode()
800 data->block[0] = I2C_SMBUS_BLOCK_MAX; in i801_block_transaction()
801 else if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX) in i801_block_transaction()
802 return -EPROTO; in i801_block_transaction()
807 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc); in i801_block_transaction()
808 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, in i801_block_transaction()
810 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) { in i801_block_transaction()
811 dev_err(&priv->pci_dev->dev, in i801_block_transaction()
813 return -EOPNOTSUPP; in i801_block_transaction()
818 SMBus (not I2C) block transactions, even though the datasheet in i801_block_transaction()
820 if ((priv->features & FEATURE_BLOCK_BUFFER) in i801_block_transaction()
834 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc); in i801_block_transaction()
849 mutex_lock(&priv->acpi_lock); in i801_access()
850 if (priv->acpi_reserved) { in i801_access()
851 mutex_unlock(&priv->acpi_lock); in i801_access()
852 return -EBUSY; in i801_access()
855 pm_runtime_get_sync(&priv->pci_dev->dev); in i801_access()
857 hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC) in i801_access()
879 outb_p(data->byte, SMBHSTDAT0(priv)); in i801_access()
887 outb_p(data->word & 0xff, SMBHSTDAT0(priv)); in i801_access()
888 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv)); in i801_access()
902 * However if SPD Write Disable is set (Lynx Point and later), in i801_access()
906 ((priv->original_hstcfg & SMBHSTCFG_SPD_WD) ? in i801_access()
927 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n", in i801_access()
929 ret = -EOPNOTSUPP; in i801_access()
933 if (hwpec) /* enable/disable hardware PEC */ in i801_access()
946 time, so we forcibly disable it after every transaction. Turn off in i801_access()
962 data->byte = inb_p(SMBHSTDAT0(priv)); in i801_access()
965 data->word = inb_p(SMBHSTDAT0(priv)) + in i801_access()
971 /* Unlock the SMBus device for use by BIOS/ACPI */ in i801_access()
974 pm_runtime_mark_last_busy(&priv->pci_dev->dev); in i801_access()
975 pm_runtime_put_autosuspend(&priv->pci_dev->dev); in i801_access()
976 mutex_unlock(&priv->acpi_lock); in i801_access()
988 ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) | in i801_func()
989 ((priv->features & FEATURE_BLOCK_PROC) ? in i801_func()
991 ((priv->features & FEATURE_I2C_BLOCK_READ) ? in i801_func()
993 ((priv->features & FEATURE_HOST_NOTIFY) ? in i801_func()
1001 if (!(priv->features & FEATURE_HOST_NOTIFY)) in i801_enable_host_notify()
1004 if (!(SMBSLVCMD_HST_NTFY_INTREN & priv->original_slvcmd)) in i801_enable_host_notify()
1005 outb_p(SMBSLVCMD_HST_NTFY_INTREN | priv->original_slvcmd, in i801_enable_host_notify()
1014 if (!(priv->features & FEATURE_HOST_NOTIFY)) in i801_disable_host_notify()
1017 outb_p(priv->original_slvcmd, SMBSLVCMD(priv)); in i801_disable_host_notify()
1098 sizeof(signature)-1)) in bios_signature()
1159 if (dm->type != 10) in dmi_check_onboard_devices()
1162 count = (dm->length - sizeof(struct dmi_header)) / 2; in dmi_check_onboard_devices()
1165 const char *name = ((char *) dm) + dm->length; in dmi_check_onboard_devices()
1171 s--; in dmi_check_onboard_devices()
1174 s--; in dmi_check_onboard_devices()
1183 /* NOTE: Keep this list in sync with drivers/platform/x86/dell-smo8800.c */
1209 if (!(info->valid & ACPI_VALID_HID)) in check_acpi_smo88xx_device()
1212 hid = info->hardware_id.string; in check_acpi_smo88xx_device()
1294 dev_warn(&priv->pci_dev->dev, in register_dell_lis3lv02d_i2c_device()
1295 "Accelerometer lis3lv02d is present on SMBus but its" in register_dell_lis3lv02d_i2c_device()
1303 i2c_new_client_device(&priv->adapter, &info); in register_dell_lis3lv02d_i2c_device()
1309 /* Only register slaves on main SMBus channel */ in i801_probe_optional_slaves()
1310 if (priv->features & FEATURE_IDF) in i801_probe_optional_slaves()
1319 i2c_new_client_device(&priv->adapter, &info); in i801_probe_optional_slaves()
1323 dmi_walk(dmi_check_onboard_devices, &priv->adapter); in i801_probe_optional_slaves()
1328 /* Instantiate SPD EEPROMs unless the SMBus is multiplexed */ in i801_probe_optional_slaves()
1330 if (!priv->mux_drvdata) in i801_probe_optional_slaves()
1332 i2c_register_spd(&priv->adapter); in i801_probe_optional_slaves()
1362 DMI_MATCH(DMI_BOARD_NAME, "Z8NA-D6(C)"),
1369 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)E-D12(X)"),
1376 DMI_MATCH(DMI_BOARD_NAME, "Z8NH-D12"),
1383 DMI_MATCH(DMI_BOARD_NAME, "Z8PH-D12/IFB"),
1390 DMI_MATCH(DMI_BOARD_NAME, "Z8NR-D12"),
1397 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)H-D12"),
1404 DMI_MATCH(DMI_BOARD_NAME, "Z8PG-D18"),
1411 DMI_MATCH(DMI_BOARD_NAME, "Z8PE-D18"),
1418 DMI_MATCH(DMI_BOARD_NAME, "Z8PS-D12"),
1428 struct device *dev = &priv->adapter.dev; in i801_add_mux()
1434 if (!priv->mux_drvdata) in i801_add_mux()
1436 mux_config = priv->mux_drvdata; in i801_add_mux()
1440 gpio_data.parent = priv->adapter.nr; in i801_add_mux()
1441 gpio_data.values = mux_config->values; in i801_add_mux()
1442 gpio_data.n_values = mux_config->n_values; in i801_add_mux()
1443 gpio_data.classes = mux_config->classes; in i801_add_mux()
1448 struct_size(lookup, table, mux_config->n_gpios + 1), in i801_add_mux()
1451 return -ENOMEM; in i801_add_mux()
1452 lookup->dev_id = "i2c-mux-gpio"; in i801_add_mux()
1453 for (i = 0; i < mux_config->n_gpios; i++) { in i801_add_mux()
1454 lookup->table[i] = (struct gpiod_lookup) in i801_add_mux()
1455 GPIO_LOOKUP(mux_config->gpio_chip, in i801_add_mux()
1456 mux_config->gpios[i], "mux", 0); in i801_add_mux()
1459 priv->lookup = lookup; in i801_add_mux()
1468 priv->mux_pdev = platform_device_register_data(dev, "i2c-mux-gpio", in i801_add_mux()
1471 if (IS_ERR(priv->mux_pdev)) { in i801_add_mux()
1472 err = PTR_ERR(priv->mux_pdev); in i801_add_mux()
1474 priv->mux_pdev = NULL; in i801_add_mux()
1475 dev_err(dev, "Failed to register i2c-mux-gpio device\n"); in i801_add_mux()
1484 if (priv->mux_pdev) in i801_del_mux()
1485 platform_device_unregister(priv->mux_pdev); in i801_del_mux()
1486 if (priv->lookup) in i801_del_mux()
1487 gpiod_remove_lookup_table(priv->lookup); in i801_del_mux()
1500 mux_config = id->driver_data; in i801_get_adapter_class()
1501 for (i = 0; i < mux_config->n_values; i++) in i801_get_adapter_class()
1502 class &= ~mux_config->classes[i]; in i801_get_adapter_class()
1505 priv->mux_drvdata = mux_config; in i801_get_adapter_class()
1545 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 1); in i801_add_tco_spt()
1548 pci_bus_read_config_byte(pci_dev->bus, devfn, 0xe1, &hidden); in i801_add_tco_spt()
1550 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x0); in i801_add_tco_spt()
1552 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR, &base_addr); in i801_add_tco_spt()
1555 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR + 0x4, &base_addr); in i801_add_tco_spt()
1560 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden); in i801_add_tco_spt()
1564 if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS) in i801_add_tco_spt()
1565 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV; in i801_add_tco_spt()
1567 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL; in i801_add_tco_spt()
1569 res->end = res->start + 3; in i801_add_tco_spt()
1570 res->flags = IORESOURCE_MEM; in i801_add_tco_spt()
1572 return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, in i801_add_tco_spt()
1586 return platform_device_register_resndata(&pci_dev->dev, in i801_add_tco_cnl()
1587 "iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data, in i801_add_tco_cnl()
1593 struct pci_dev *pci_dev = priv->pci_dev; in i801_add_tco()
1601 if (!(priv->features & (FEATURE_TCO_SPT | FEATURE_TCO_CNL))) in i801_add_tco()
1615 res->start = tco_base & ~1; in i801_add_tco()
1616 res->end = res->start + 32 - 1; in i801_add_tco()
1617 res->flags = IORESOURCE_IO; in i801_add_tco()
1619 if (priv->features & FEATURE_TCO_CNL) in i801_add_tco()
1620 priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res); in i801_add_tco()
1622 priv->tco_pdev = i801_add_tco_spt(priv, pci_dev, tco_res); in i801_add_tco()
1624 if (IS_ERR(priv->tco_pdev)) in i801_add_tco()
1625 dev_warn(&pci_dev->dev, "failed to create iTCO device\n"); in i801_add_tco()
1632 return address >= priv->smba && in i801_acpi_is_smbus_ioport()
1633 address <= pci_resource_end(priv->pci_dev, SMBBAR); in i801_acpi_is_smbus_ioport()
1641 struct pci_dev *pdev = priv->pci_dev; in i801_acpi_io_handler()
1649 mutex_lock(&priv->acpi_lock); in i801_acpi_io_handler()
1651 if (!priv->acpi_reserved && i801_acpi_is_smbus_ioport(priv, address)) { in i801_acpi_io_handler()
1652 priv->acpi_reserved = true; in i801_acpi_io_handler()
1654 dev_warn(&pdev->dev, "BIOS is accessing SMBus registers\n"); in i801_acpi_io_handler()
1655 dev_warn(&pdev->dev, "Driver SMBus register access inhibited\n"); in i801_acpi_io_handler()
1661 pm_runtime_get_sync(&pdev->dev); in i801_acpi_io_handler()
1669 mutex_unlock(&priv->acpi_lock); in i801_acpi_io_handler()
1679 adev = ACPI_COMPANION(&priv->pci_dev->dev); in i801_acpi_probe()
1681 status = acpi_install_address_space_handler(adev->handle, in i801_acpi_probe()
1688 return acpi_check_resource_conflict(&priv->pci_dev->resource[SMBBAR]); in i801_acpi_probe()
1695 adev = ACPI_COMPANION(&priv->pci_dev->dev); in i801_acpi_remove()
1699 acpi_remove_address_space_handler(adev->handle, in i801_acpi_remove()
1702 mutex_lock(&priv->acpi_lock); in i801_acpi_remove()
1703 if (priv->acpi_reserved) in i801_acpi_remove()
1704 pm_runtime_put(&priv->pci_dev->dev); in i801_acpi_remove()
1705 mutex_unlock(&priv->acpi_lock); in i801_acpi_remove()
1714 unsigned char hstcfg = priv->original_hstcfg; in i801_setup_hstcfg()
1716 hstcfg &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */ in i801_setup_hstcfg()
1718 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hstcfg); in i801_setup_hstcfg()
1728 priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL); in i801_probe()
1730 return -ENOMEM; in i801_probe()
1732 i2c_set_adapdata(&priv->adapter, priv); in i801_probe()
1733 priv->adapter.owner = THIS_MODULE; in i801_probe()
1734 priv->adapter.class = i801_get_adapter_class(priv); in i801_probe()
1735 priv->adapter.algo = &smbus_algorithm; in i801_probe()
1736 priv->adapter.dev.parent = &dev->dev; in i801_probe()
1737 ACPI_COMPANION_SET(&priv->adapter.dev, ACPI_COMPANION(&dev->dev)); in i801_probe()
1738 priv->adapter.retries = 3; in i801_probe()
1739 mutex_init(&priv->acpi_lock); in i801_probe()
1741 priv->pci_dev = dev; in i801_probe()
1742 switch (dev->device) { in i801_probe()
1750 priv->features |= FEATURE_BLOCK_PROC; in i801_probe()
1751 priv->features |= FEATURE_I2C_BLOCK_READ; in i801_probe()
1752 priv->features |= FEATURE_IRQ; in i801_probe()
1753 priv->features |= FEATURE_SMBUS_PEC; in i801_probe()
1754 priv->features |= FEATURE_BLOCK_BUFFER; in i801_probe()
1755 priv->features |= FEATURE_TCO_SPT; in i801_probe()
1756 priv->features |= FEATURE_HOST_NOTIFY; in i801_probe()
1771 priv->features |= FEATURE_BLOCK_PROC; in i801_probe()
1772 priv->features |= FEATURE_I2C_BLOCK_READ; in i801_probe()
1773 priv->features |= FEATURE_IRQ; in i801_probe()
1774 priv->features |= FEATURE_SMBUS_PEC; in i801_probe()
1775 priv->features |= FEATURE_BLOCK_BUFFER; in i801_probe()
1776 priv->features |= FEATURE_TCO_CNL; in i801_probe()
1777 priv->features |= FEATURE_HOST_NOTIFY; in i801_probe()
1786 priv->features |= FEATURE_IDF; in i801_probe()
1789 priv->features |= FEATURE_BLOCK_PROC; in i801_probe()
1790 priv->features |= FEATURE_I2C_BLOCK_READ; in i801_probe()
1791 priv->features |= FEATURE_IRQ; in i801_probe()
1794 priv->features |= FEATURE_SMBUS_PEC; in i801_probe()
1795 priv->features |= FEATURE_BLOCK_BUFFER; in i801_probe()
1798 priv->features |= FEATURE_HOST_NOTIFY; in i801_probe()
1806 /* Disable features on user request */ in i801_probe()
1808 if (priv->features & disable_features & (1 << i)) in i801_probe()
1809 dev_notice(&dev->dev, "%s disabled by user\n", in i801_probe()
1812 priv->features &= ~disable_features; in i801_probe()
1816 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n", in i801_probe()
1822 /* Determine the address of the SMBus area */ in i801_probe()
1823 priv->smba = pci_resource_start(dev, SMBBAR); in i801_probe()
1824 if (!priv->smba) { in i801_probe()
1825 dev_err(&dev->dev, in i801_probe()
1826 "SMBus base address uninitialized, upgrade BIOS\n"); in i801_probe()
1827 return -ENODEV; in i801_probe()
1831 return -ENODEV; in i801_probe()
1834 dev_driver_string(&dev->dev)); in i801_probe()
1836 dev_err(&dev->dev, in i801_probe()
1837 "Failed to request SMBus region 0x%lx-0x%Lx\n", in i801_probe()
1838 priv->smba, in i801_probe()
1844 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &priv->original_hstcfg); in i801_probe()
1846 if (!(priv->original_hstcfg & SMBHSTCFG_HST_EN)) in i801_probe()
1847 dev_info(&dev->dev, "Enabling SMBus device\n"); in i801_probe()
1850 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n"); in i801_probe()
1851 /* Disable SMBus interrupt feature if SMBus using SMI# */ in i801_probe()
1852 priv->features &= ~FEATURE_IRQ; in i801_probe()
1855 dev_info(&dev->dev, "SPD Write Disable is set\n"); in i801_probe()
1858 if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER)) in i801_probe()
1863 if (priv->features & FEATURE_HOST_NOTIFY) in i801_probe()
1864 priv->original_slvcmd = inb_p(SMBSLVCMD(priv)); in i801_probe()
1866 /* Default timeout in interrupt mode: 200 ms */ in i801_probe()
1867 priv->adapter.timeout = HZ / 5; in i801_probe()
1869 if (dev->irq == IRQ_NOTCONNECTED) in i801_probe()
1870 priv->features &= ~FEATURE_IRQ; in i801_probe()
1872 if (priv->features & FEATURE_IRQ) { in i801_probe()
1876 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists); in i801_probe()
1878 dev_warn(&dev->dev, "An interrupt is pending!\n"); in i801_probe()
1881 pci_read_config_word(priv->pci_dev, SMBPCICTL, &pcictl); in i801_probe()
1883 dev_info(&dev->dev, "Interrupts are disabled\n"); in i801_probe()
1884 priv->features &= ~FEATURE_IRQ; in i801_probe()
1888 if (priv->features & FEATURE_IRQ) { in i801_probe()
1889 init_waitqueue_head(&priv->waitq); in i801_probe()
1891 err = devm_request_irq(&dev->dev, dev->irq, i801_isr, in i801_probe()
1893 dev_driver_string(&dev->dev), priv); in i801_probe()
1895 dev_err(&dev->dev, "Failed to allocate irq %d: %d\n", in i801_probe()
1896 dev->irq, err); in i801_probe()
1897 priv->features &= ~FEATURE_IRQ; in i801_probe()
1900 dev_info(&dev->dev, "SMBus using %s\n", in i801_probe()
1901 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling"); in i801_probe()
1905 snprintf(priv->adapter.name, sizeof(priv->adapter.name), in i801_probe()
1906 "SMBus I801 adapter at %04lx", priv->smba); in i801_probe()
1907 err = i2c_add_adapter(&priv->adapter); in i801_probe()
1909 platform_device_unregister(priv->tco_pdev); in i801_probe()
1914 i801_enable_host_notify(&priv->adapter); in i801_probe()
1917 /* We ignore errors - multiplexing is optional */ in i801_probe()
1922 dev_pm_set_driver_flags(&dev->dev, DPM_FLAG_NO_DIRECT_COMPLETE); in i801_probe()
1923 pm_runtime_set_autosuspend_delay(&dev->dev, 1000); in i801_probe()
1924 pm_runtime_use_autosuspend(&dev->dev); in i801_probe()
1925 pm_runtime_put_autosuspend(&dev->dev); in i801_probe()
1926 pm_runtime_allow(&dev->dev); in i801_probe()
1935 pm_runtime_forbid(&dev->dev); in i801_remove()
1936 pm_runtime_get_noresume(&dev->dev); in i801_remove()
1940 i2c_del_adapter(&priv->adapter); in i801_remove()
1942 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg); in i801_remove()
1944 platform_device_unregister(priv->tco_pdev); in i801_remove()
1948 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010) in i801_remove()
1958 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg); in i801_shutdown()
1966 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, priv->original_hstcfg); in i801_suspend()
1975 i801_enable_host_notify(&priv->adapter); in i801_resume()
2008 MODULE_DESCRIPTION("I801 SMBus driver");