Commit d5376026 authored by Vaibhav Gupta's avatar Vaibhav Gupta Committed by Bartosz Golaszewski
Browse files

gpio: bt8xx: use generic power management



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: default avatarVaibhav Gupta <vaibhavgupta40@gmail.com>
Reviewed-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/r/20251016163618.1355923-1-vaibhavgupta40@gmail.com


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent 03ac8183
Loading
Loading
Loading
Loading
+8 −22
Original line number Diff line number Diff line
@@ -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);