]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gpio: bt8xx: use generic power management
authorVaibhav Gupta <vaibhavgupta40@gmail.com>
Thu, 16 Oct 2025 16:36:13 +0000 (16:36 +0000)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Thu, 23 Oct 2025 07:56:05 +0000 (09:56 +0200)
Switch to the generic PCI power management framework and remove legacy
callbacks like .suspend() and .resume(). With the generic framework, the
standard PCI related work like:
- pci_save/restore_state()
- pci_enable/disable_device()
- pci_set_power_state()
is handled by the PCI core and this driver should implement only gpio-bt8xx
specific operations in its respective callback functions.

Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
Reviewed-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/r/20251016163618.1355923-1-vaibhavgupta40@gmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-bt8xx.c

index 05401da03ca3a14dd37569a588d73e2a901b823e..324eeb77dbd52c5972284bed8ccc32be8782af03 100644 (file)
@@ -52,10 +52,8 @@ struct bt8xxgpio {
        struct pci_dev *pdev;
        struct gpio_chip gpio;
 
-#ifdef CONFIG_PM
        u32 saved_outen;
        u32 saved_data;
-#endif
 };
 
 #define bgwrite(dat, adr)      writel((dat), bg->mmio+(adr))
@@ -224,9 +222,10 @@ static void bt8xxgpio_remove(struct pci_dev *pdev)
        pci_disable_device(pdev);
 }
 
-#ifdef CONFIG_PM
-static int bt8xxgpio_suspend(struct pci_dev *pdev, pm_message_t state)
+
+static int bt8xxgpio_suspend(struct device *dev)
 {
+       struct pci_dev *pdev = to_pci_dev(dev);
        struct bt8xxgpio *bg = pci_get_drvdata(pdev);
 
        scoped_guard(spinlock_irqsave, &bg->lock) {
@@ -238,23 +237,13 @@ static int bt8xxgpio_suspend(struct pci_dev *pdev, pm_message_t state)
                bgwrite(0x0, BT848_GPIO_OUT_EN);
        }
 
-       pci_save_state(pdev);
-       pci_disable_device(pdev);
-       pci_set_power_state(pdev, pci_choose_state(pdev, state));
-
        return 0;
 }
 
-static int bt8xxgpio_resume(struct pci_dev *pdev)
+static int bt8xxgpio_resume(struct device *dev)
 {
+       struct pci_dev *pdev = to_pci_dev(dev);
        struct bt8xxgpio *bg = pci_get_drvdata(pdev);
-       int err;
-
-       pci_set_power_state(pdev, PCI_D0);
-       err = pci_enable_device(pdev);
-       if (err)
-               return err;
-       pci_restore_state(pdev);
 
        guard(spinlock_irqsave)(&bg->lock);
 
@@ -267,10 +256,8 @@ static int bt8xxgpio_resume(struct pci_dev *pdev)
 
        return 0;
 }
-#else
-#define bt8xxgpio_suspend NULL
-#define bt8xxgpio_resume NULL
-#endif /* CONFIG_PM */
+
+static DEFINE_SIMPLE_DEV_PM_OPS(bt8xxgpio_pm_ops, bt8xxgpio_suspend, bt8xxgpio_resume);
 
 static const struct pci_device_id bt8xxgpio_pci_tbl[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_BROOKTREE, PCI_DEVICE_ID_BT848) },
@@ -286,8 +273,7 @@ static struct pci_driver bt8xxgpio_pci_driver = {
        .id_table       = bt8xxgpio_pci_tbl,
        .probe          = bt8xxgpio_probe,
        .remove         = bt8xxgpio_remove,
-       .suspend        = bt8xxgpio_suspend,
-       .resume         = bt8xxgpio_resume,
+       .driver.pm      = &bt8xxgpio_pm_ops,
 };
 
 module_pci_driver(bt8xxgpio_pci_driver);