xref: /openbmc/linux/drivers/mfd/intel-lpss.h (revision 4b45efe8)
14b45efe8SAndy Shevchenko /*
24b45efe8SAndy Shevchenko  * Intel LPSS core support.
34b45efe8SAndy Shevchenko  *
44b45efe8SAndy Shevchenko  * Copyright (C) 2015, Intel Corporation
54b45efe8SAndy Shevchenko  *
64b45efe8SAndy Shevchenko  * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
74b45efe8SAndy Shevchenko  *          Mika Westerberg <mika.westerberg@linux.intel.com>
84b45efe8SAndy Shevchenko  *
94b45efe8SAndy Shevchenko  * This program is free software; you can redistribute it and/or modify
104b45efe8SAndy Shevchenko  * it under the terms of the GNU General Public License version 2 as
114b45efe8SAndy Shevchenko  * published by the Free Software Foundation.
124b45efe8SAndy Shevchenko  */
134b45efe8SAndy Shevchenko 
144b45efe8SAndy Shevchenko #ifndef __MFD_INTEL_LPSS_H
154b45efe8SAndy Shevchenko #define __MFD_INTEL_LPSS_H
164b45efe8SAndy Shevchenko 
174b45efe8SAndy Shevchenko struct device;
184b45efe8SAndy Shevchenko struct resource;
194b45efe8SAndy Shevchenko 
204b45efe8SAndy Shevchenko struct intel_lpss_platform_info {
214b45efe8SAndy Shevchenko 	struct resource *mem;
224b45efe8SAndy Shevchenko 	int irq;
234b45efe8SAndy Shevchenko 	unsigned long clk_rate;
244b45efe8SAndy Shevchenko 	const char *clk_con_id;
254b45efe8SAndy Shevchenko };
264b45efe8SAndy Shevchenko 
274b45efe8SAndy Shevchenko int intel_lpss_probe(struct device *dev,
284b45efe8SAndy Shevchenko 		     const struct intel_lpss_platform_info *info);
294b45efe8SAndy Shevchenko void intel_lpss_remove(struct device *dev);
304b45efe8SAndy Shevchenko 
314b45efe8SAndy Shevchenko #ifdef CONFIG_PM
324b45efe8SAndy Shevchenko int intel_lpss_prepare(struct device *dev);
334b45efe8SAndy Shevchenko int intel_lpss_suspend(struct device *dev);
344b45efe8SAndy Shevchenko int intel_lpss_resume(struct device *dev);
354b45efe8SAndy Shevchenko 
364b45efe8SAndy Shevchenko #ifdef CONFIG_PM_SLEEP
374b45efe8SAndy Shevchenko #define INTEL_LPSS_SLEEP_PM_OPS			\
384b45efe8SAndy Shevchenko 	.prepare = intel_lpss_prepare,		\
394b45efe8SAndy Shevchenko 	.suspend = intel_lpss_suspend,		\
404b45efe8SAndy Shevchenko 	.resume = intel_lpss_resume,		\
414b45efe8SAndy Shevchenko 	.freeze = intel_lpss_suspend,		\
424b45efe8SAndy Shevchenko 	.thaw = intel_lpss_resume,		\
434b45efe8SAndy Shevchenko 	.poweroff = intel_lpss_suspend,		\
444b45efe8SAndy Shevchenko 	.restore = intel_lpss_resume,
454b45efe8SAndy Shevchenko #endif
464b45efe8SAndy Shevchenko 
474b45efe8SAndy Shevchenko #define INTEL_LPSS_RUNTIME_PM_OPS		\
484b45efe8SAndy Shevchenko 	.runtime_suspend = intel_lpss_suspend,	\
494b45efe8SAndy Shevchenko 	.runtime_resume = intel_lpss_resume,
504b45efe8SAndy Shevchenko 
514b45efe8SAndy Shevchenko #else /* !CONFIG_PM */
524b45efe8SAndy Shevchenko #define INTEL_LPSS_SLEEP_PM_OPS
534b45efe8SAndy Shevchenko #define INTEL_LPSS_RUNTIME_PM_OPS
544b45efe8SAndy Shevchenko #endif /* CONFIG_PM */
554b45efe8SAndy Shevchenko 
564b45efe8SAndy Shevchenko #define INTEL_LPSS_PM_OPS(name)			\
574b45efe8SAndy Shevchenko const struct dev_pm_ops name = {		\
584b45efe8SAndy Shevchenko 	INTEL_LPSS_SLEEP_PM_OPS			\
594b45efe8SAndy Shevchenko 	INTEL_LPSS_RUNTIME_PM_OPS		\
604b45efe8SAndy Shevchenko }
614b45efe8SAndy Shevchenko 
624b45efe8SAndy Shevchenko #endif /* __MFD_INTEL_LPSS_H */
63