Commit fd58bb8c authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Lee Jones

mfd: intel-lpss: Provide Intel LPSS PM ops structure

With the help of EXPORT_NS_GPL_DEV_PM_OPS() and other *_PM_OPS() macros
we may convert PM ops functions to become static. This also takes into
account the PM configuration options such as CONFIG_PM and CONFIG_PM_SLEEP.
This all removes a lot of ugly macros and ifdeffery in the driver.
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20231124200258.3682979-6-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
parent 24ee97a9
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/mod_devicetable.h> #include <linux/mod_devicetable.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pm.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/property.h> #include <linux/property.h>
...@@ -205,15 +206,13 @@ static void intel_lpss_acpi_remove(struct platform_device *pdev) ...@@ -205,15 +206,13 @@ static void intel_lpss_acpi_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
} }
static INTEL_LPSS_PM_OPS(intel_lpss_acpi_pm_ops);
static struct platform_driver intel_lpss_acpi_driver = { static struct platform_driver intel_lpss_acpi_driver = {
.probe = intel_lpss_acpi_probe, .probe = intel_lpss_acpi_probe,
.remove_new = intel_lpss_acpi_remove, .remove_new = intel_lpss_acpi_remove,
.driver = { .driver = {
.name = "intel-lpss", .name = "intel-lpss",
.acpi_match_table = intel_lpss_acpi_ids, .acpi_match_table = intel_lpss_acpi_ids,
.pm = &intel_lpss_acpi_pm_ops, .pm = pm_ptr(&intel_lpss_pm_ops),
}, },
}; };
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/mod_devicetable.h> #include <linux/mod_devicetable.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/property.h> #include <linux/property.h>
...@@ -81,8 +82,6 @@ static void intel_lpss_pci_remove(struct pci_dev *pdev) ...@@ -81,8 +82,6 @@ static void intel_lpss_pci_remove(struct pci_dev *pdev)
intel_lpss_remove(&pdev->dev); intel_lpss_remove(&pdev->dev);
} }
static INTEL_LPSS_PM_OPS(intel_lpss_pci_pm_ops);
static const struct property_entry spt_spi_properties[] = { static const struct property_entry spt_spi_properties[] = {
PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_SPT_SSP), PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_SPT_SSP),
{ } { }
...@@ -593,7 +592,7 @@ static struct pci_driver intel_lpss_pci_driver = { ...@@ -593,7 +592,7 @@ static struct pci_driver intel_lpss_pci_driver = {
.probe = intel_lpss_pci_probe, .probe = intel_lpss_pci_probe,
.remove = intel_lpss_pci_remove, .remove = intel_lpss_pci_remove,
.driver = { .driver = {
.pm = &intel_lpss_pci_pm_ops, .pm = pm_ptr(&intel_lpss_pm_ops),
}, },
}; };
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/mfd/core.h> #include <linux/mfd/core.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/pm.h>
#include <linux/pm_qos.h> #include <linux/pm_qos.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/sprintf.h> #include <linux/sprintf.h>
...@@ -470,7 +471,6 @@ void intel_lpss_remove(struct device *dev) ...@@ -470,7 +471,6 @@ void intel_lpss_remove(struct device *dev)
} }
EXPORT_SYMBOL_NS_GPL(intel_lpss_remove, INTEL_LPSS); EXPORT_SYMBOL_NS_GPL(intel_lpss_remove, INTEL_LPSS);
#ifdef CONFIG_PM
static int resume_lpss_device(struct device *dev, void *data) static int resume_lpss_device(struct device *dev, void *data)
{ {
if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND)) if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND))
...@@ -479,7 +479,7 @@ static int resume_lpss_device(struct device *dev, void *data) ...@@ -479,7 +479,7 @@ static int resume_lpss_device(struct device *dev, void *data)
return 0; return 0;
} }
int intel_lpss_prepare(struct device *dev) static int intel_lpss_prepare(struct device *dev)
{ {
/* /*
* Resume both child devices before entering system sleep. This * Resume both child devices before entering system sleep. This
...@@ -488,9 +488,8 @@ int intel_lpss_prepare(struct device *dev) ...@@ -488,9 +488,8 @@ int intel_lpss_prepare(struct device *dev)
device_for_each_child_reverse(dev, NULL, resume_lpss_device); device_for_each_child_reverse(dev, NULL, resume_lpss_device);
return 0; return 0;
} }
EXPORT_SYMBOL_NS_GPL(intel_lpss_prepare, INTEL_LPSS);
int intel_lpss_suspend(struct device *dev) static int intel_lpss_suspend(struct device *dev)
{ {
struct intel_lpss *lpss = dev_get_drvdata(dev); struct intel_lpss *lpss = dev_get_drvdata(dev);
unsigned int i; unsigned int i;
...@@ -509,9 +508,8 @@ int intel_lpss_suspend(struct device *dev) ...@@ -509,9 +508,8 @@ int intel_lpss_suspend(struct device *dev)
return 0; return 0;
} }
EXPORT_SYMBOL_NS_GPL(intel_lpss_suspend, INTEL_LPSS);
int intel_lpss_resume(struct device *dev) static int intel_lpss_resume(struct device *dev)
{ {
struct intel_lpss *lpss = dev_get_drvdata(dev); struct intel_lpss *lpss = dev_get_drvdata(dev);
unsigned int i; unsigned int i;
...@@ -524,8 +522,12 @@ int intel_lpss_resume(struct device *dev) ...@@ -524,8 +522,12 @@ int intel_lpss_resume(struct device *dev)
return 0; return 0;
} }
EXPORT_SYMBOL_NS_GPL(intel_lpss_resume, INTEL_LPSS);
#endif EXPORT_NS_GPL_DEV_PM_OPS(intel_lpss_pm_ops, INTEL_LPSS) = {
.prepare = pm_sleep_ptr(&intel_lpss_prepare),
LATE_SYSTEM_SLEEP_PM_OPS(intel_lpss_suspend, intel_lpss_resume)
RUNTIME_PM_OPS(intel_lpss_suspend, intel_lpss_resume, NULL)
};
static int __init intel_lpss_init(void) static int __init intel_lpss_init(void)
{ {
......
...@@ -30,32 +30,6 @@ int intel_lpss_probe(struct device *dev, ...@@ -30,32 +30,6 @@ int intel_lpss_probe(struct device *dev,
const struct intel_lpss_platform_info *info); const struct intel_lpss_platform_info *info);
void intel_lpss_remove(struct device *dev); void intel_lpss_remove(struct device *dev);
#ifdef CONFIG_PM extern const struct dev_pm_ops intel_lpss_pm_ops;
int intel_lpss_prepare(struct device *dev);
int intel_lpss_suspend(struct device *dev);
int intel_lpss_resume(struct device *dev);
#ifdef CONFIG_PM_SLEEP
#define INTEL_LPSS_SLEEP_PM_OPS \
.prepare = intel_lpss_prepare, \
SET_LATE_SYSTEM_SLEEP_PM_OPS(intel_lpss_suspend, intel_lpss_resume)
#else
#define INTEL_LPSS_SLEEP_PM_OPS
#endif
#define INTEL_LPSS_RUNTIME_PM_OPS \
.runtime_suspend = intel_lpss_suspend, \
.runtime_resume = intel_lpss_resume,
#else /* !CONFIG_PM */
#define INTEL_LPSS_SLEEP_PM_OPS
#define INTEL_LPSS_RUNTIME_PM_OPS
#endif /* CONFIG_PM */
#define INTEL_LPSS_PM_OPS(name) \
const struct dev_pm_ops name = { \
INTEL_LPSS_SLEEP_PM_OPS \
INTEL_LPSS_RUNTIME_PM_OPS \
}
#endif /* __MFD_INTEL_LPSS_H */ #endif /* __MFD_INTEL_LPSS_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment