On Mon, 17 Oct 2022 20:12:43 +0300 Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > Cleaning up the driver to use pm_ptr() macro instead of ifdeffery > that makes it simpler and allows the compiler to remove those functions > if built without CONFIG_PM and CONFIG_PM_SLEEP support. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> FWIW I like these - so drive by review. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> I think you could change the handling of !pm_runtime_suspended() to use pm_runtime_force_suspend() and equivalent for resume path. I haven't checked that closely though - just looks like a typical usecase for those functions that are hardened against some of the corner cases that can occur in interactions between different forms of pm. > --- > drivers/spi/spi-pxa2xx.c | 11 +++-------- > 1 file changed, 3 insertions(+), 8 deletions(-) > > diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c > index 76046612466d..60cab241200b 100644 > --- a/drivers/spi/spi-pxa2xx.c > +++ b/drivers/spi/spi-pxa2xx.c > @@ -1680,7 +1680,6 @@ static int pxa2xx_spi_remove(struct platform_device *pdev) > return 0; > } > > -#ifdef CONFIG_PM_SLEEP > static int pxa2xx_spi_suspend(struct device *dev) > { > struct driver_data *drv_data = dev_get_drvdata(dev); > @@ -1715,9 +1714,7 @@ static int pxa2xx_spi_resume(struct device *dev) > /* Start the queue running */ > return spi_controller_resume(drv_data->controller); > } > -#endif > > -#ifdef CONFIG_PM > static int pxa2xx_spi_runtime_suspend(struct device *dev) > { > struct driver_data *drv_data = dev_get_drvdata(dev); > @@ -1732,12 +1729,10 @@ static int pxa2xx_spi_runtime_resume(struct device *dev) > > return clk_prepare_enable(drv_data->ssp->clk); > } > -#endif > > static const struct dev_pm_ops pxa2xx_spi_pm_ops = { > - SET_SYSTEM_SLEEP_PM_OPS(pxa2xx_spi_suspend, pxa2xx_spi_resume) > - SET_RUNTIME_PM_OPS(pxa2xx_spi_runtime_suspend, > - pxa2xx_spi_runtime_resume, NULL) > + SYSTEM_SLEEP_PM_OPS(pxa2xx_spi_suspend, pxa2xx_spi_resume) > + RUNTIME_PM_OPS(pxa2xx_spi_runtime_suspend, pxa2xx_spi_runtime_resume, NULL) > }; > > #ifdef CONFIG_ACPI > @@ -1762,7 +1757,7 @@ MODULE_DEVICE_TABLE(of, pxa2xx_spi_of_match); > static struct platform_driver driver = { > .driver = { > .name = "pxa2xx-spi", > - .pm = &pxa2xx_spi_pm_ops, > + .pm = pm_ptr(&pxa2xx_spi_pm_ops), > .acpi_match_table = ACPI_PTR(pxa2xx_spi_acpi_match), > .of_match_table = of_match_ptr(pxa2xx_spi_of_match), > },