mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-15 17:43:12 -04:00
pinctrl: pinctrl-single: move suspend()/resume() callbacks to noirq
The goal is to extend the active period of pinctrl. Some devices may need active pinctrl after suspend() and/or before resume(). So move suspend()/resume() to suspend_noirq()/resume_noirq() in order to have active pinctrl until suspend_noirq() (included), and from resume_noirq() (included). The deprecated API has been removed to use the new one (dev_pm_ops struct). No need to check the pointer returned by dev_get_drvdata(), as platform_set_drvdata() is called during the probe. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Thomas Richard <thomas.richard@bootlin.com> Reviewed-by: Tony Lindgren <tony@atomide.com> Reviewed-by: Dhruva Gole <d-gole@ti.com> Message-ID: <20240102-j7200-pcie-s2r-v4-2-6f1f53390c85@bootlin.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
committed by
Linus Walleij
parent
b5658c7ab9
commit
85dfe45837
@@ -1625,7 +1625,6 @@ static int pcs_irq_init_chained_handler(struct pcs_device *pcs,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int pcs_save_context(struct pcs_device *pcs)
|
||||
{
|
||||
int i, mux_bytes;
|
||||
@@ -1690,14 +1689,9 @@ static void pcs_restore_context(struct pcs_device *pcs)
|
||||
}
|
||||
}
|
||||
|
||||
static int pinctrl_single_suspend(struct platform_device *pdev,
|
||||
pm_message_t state)
|
||||
static int pinctrl_single_suspend_noirq(struct device *dev)
|
||||
{
|
||||
struct pcs_device *pcs;
|
||||
|
||||
pcs = platform_get_drvdata(pdev);
|
||||
if (!pcs)
|
||||
return -EINVAL;
|
||||
struct pcs_device *pcs = dev_get_drvdata(dev);
|
||||
|
||||
if (pcs->flags & PCS_CONTEXT_LOSS_OFF) {
|
||||
int ret;
|
||||
@@ -1710,20 +1704,19 @@ static int pinctrl_single_suspend(struct platform_device *pdev,
|
||||
return pinctrl_force_sleep(pcs->pctl);
|
||||
}
|
||||
|
||||
static int pinctrl_single_resume(struct platform_device *pdev)
|
||||
static int pinctrl_single_resume_noirq(struct device *dev)
|
||||
{
|
||||
struct pcs_device *pcs;
|
||||
|
||||
pcs = platform_get_drvdata(pdev);
|
||||
if (!pcs)
|
||||
return -EINVAL;
|
||||
struct pcs_device *pcs = dev_get_drvdata(dev);
|
||||
|
||||
if (pcs->flags & PCS_CONTEXT_LOSS_OFF)
|
||||
pcs_restore_context(pcs);
|
||||
|
||||
return pinctrl_force_default(pcs->pctl);
|
||||
}
|
||||
#endif
|
||||
|
||||
static DEFINE_NOIRQ_DEV_PM_OPS(pinctrl_single_pm_ops,
|
||||
pinctrl_single_suspend_noirq,
|
||||
pinctrl_single_resume_noirq);
|
||||
|
||||
/**
|
||||
* pcs_quirk_missing_pinctrl_cells - handle legacy binding
|
||||
@@ -1986,11 +1979,8 @@ static struct platform_driver pcs_driver = {
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.of_match_table = pcs_of_match,
|
||||
.pm = pm_sleep_ptr(&pinctrl_single_pm_ops),
|
||||
},
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = pinctrl_single_suspend,
|
||||
.resume = pinctrl_single_resume,
|
||||
#endif
|
||||
};
|
||||
|
||||
module_platform_driver(pcs_driver);
|
||||
|
||||
Reference in New Issue
Block a user