diff options
| author | Heiner Kallweit <hkallweit1@gmail.com> | 2025-03-12 22:08:18 +0300 |
|---|---|---|
| committer | Andi Shyti <andi.shyti@kernel.org> | 2025-03-21 00:31:31 +0300 |
| commit | d50f2f5d51ea609194439e6e3f470d1a4fad761b (patch) | |
| tree | 700e10a7ecf8d9e8672089f73acd46785557bc03 | |
| parent | 4a3f77ea77013d8d0178503a8abff33d8c4ba5c5 (diff) | |
| download | linux-d50f2f5d51ea609194439e6e3f470d1a4fad761b.tar.xz | |
i2c: i801: Use MMIO if available
Newer versions of supported chips support MMIO in addition to legacy
PMIO register access. Probe the MMIO PCI BAR and use faster MMIO
register access if available.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/b4748b7a-aac5-445c-b813-20c4d2c23ec3@gmail.com
| -rw-r--r-- | drivers/i2c/busses/i2c-i801.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index bf5702ccb93a..48e1af544b75 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -144,6 +144,7 @@ #define SMBNTFDADD(p) (20 + (p)->smba) /* ICH3 and later */ /* PCI Address Constants */ +#define SMBBAR_MMIO 0 #define SMBBAR 4 #define SMBHSTCFG 0x040 #define TCOBASE 0x050 @@ -1522,7 +1523,7 @@ static void i801_restore_regs(struct i801_priv *priv) static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) { - int err, i; + int err, i, bar = SMBBAR; struct i801_priv *priv; priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL); @@ -1570,10 +1571,13 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) if (i801_acpi_probe(priv)) return -ENODEV; - priv->smba = pcim_iomap_region(dev, SMBBAR, DRV_NAME); + if (pci_resource_flags(dev, SMBBAR_MMIO) & IORESOURCE_MEM) + bar = SMBBAR_MMIO; + + priv->smba = pcim_iomap_region(dev, bar, DRV_NAME); if (IS_ERR(priv->smba)) { pci_err(dev, "Failed to request SMBus region %pr\n", - pci_resource_n(dev, SMBBAR)); + pci_resource_n(dev, bar)); i801_acpi_remove(priv); return PTR_ERR(priv->smba); } |
