]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
i2c: designware: Convert PCI driver to use shutdown hook
authorWilliam A. Kennington III <william@wkennington.com>
Wed, 27 May 2026 20:09:50 +0000 (20:09 +0000)
committerAndi Shyti <andi.shyti@kernel.org>
Thu, 28 May 2026 22:39:05 +0000 (00:39 +0200)
Convert the PCI driver to use the new i2c_dw_shutdown() hook, allowing
the controller to gracefully NACK controller requests during system
shutdown.

Signed-off-by: William A. Kennington III <william@wkennington.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/20260527-dw-i2c-v5-2-3483057f8d67@wkennington.com
drivers/i2c/busses/i2c-designware-pcidrv.c

index f21f9877c04047949ff3937fe955e6ffdfabbbc0..ab21d44146813100e801b3427a0ab98366420c1a 100644 (file)
@@ -356,10 +356,24 @@ static const struct pci_device_id i2c_designware_pci_ids[] = {
 };
 MODULE_DEVICE_TABLE(pci, i2c_designware_pci_ids);
 
+static void i2c_dw_pci_shutdown(struct pci_dev *pdev)
+{
+       struct dw_i2c_dev *i_dev;
+
+       i_dev = pci_get_drvdata(pdev);
+       if (!i_dev)
+               return;
+
+       pm_runtime_disable(&pdev->dev);
+       if (!pm_runtime_status_suspended(&pdev->dev))
+               i2c_dw_shutdown(i_dev);
+}
+
 static struct pci_driver dw_i2c_driver = {
        .name           = DRIVER_NAME,
        .probe          = i2c_dw_pci_probe,
        .remove         = i2c_dw_pci_remove,
+       .shutdown       = i2c_dw_pci_shutdown,
        .driver         = {
                .pm     = pm_ptr(&i2c_dw_dev_pm_ops),
        },