162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Intel LPSS core support.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2015, Intel Corporation
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
862306a36Sopenharmony_ci *          Mika Westerberg <mika.westerberg@linux.intel.com>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifndef __MFD_INTEL_LPSS_H
1262306a36Sopenharmony_ci#define __MFD_INTEL_LPSS_H
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <linux/pm.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistruct device;
1762306a36Sopenharmony_cistruct resource;
1862306a36Sopenharmony_cistruct software_node;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistruct intel_lpss_platform_info {
2162306a36Sopenharmony_ci	struct resource *mem;
2262306a36Sopenharmony_ci	bool ignore_resource_conflicts;
2362306a36Sopenharmony_ci	int irq;
2462306a36Sopenharmony_ci	unsigned long clk_rate;
2562306a36Sopenharmony_ci	const char *clk_con_id;
2662306a36Sopenharmony_ci	const struct software_node *swnode;
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciint intel_lpss_probe(struct device *dev,
3062306a36Sopenharmony_ci		     const struct intel_lpss_platform_info *info);
3162306a36Sopenharmony_civoid intel_lpss_remove(struct device *dev);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci#ifdef CONFIG_PM
3462306a36Sopenharmony_ciint intel_lpss_prepare(struct device *dev);
3562306a36Sopenharmony_ciint intel_lpss_suspend(struct device *dev);
3662306a36Sopenharmony_ciint intel_lpss_resume(struct device *dev);
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#ifdef CONFIG_PM_SLEEP
3962306a36Sopenharmony_ci#define INTEL_LPSS_SLEEP_PM_OPS			\
4062306a36Sopenharmony_ci	.prepare = intel_lpss_prepare,		\
4162306a36Sopenharmony_ci	SET_LATE_SYSTEM_SLEEP_PM_OPS(intel_lpss_suspend, intel_lpss_resume)
4262306a36Sopenharmony_ci#else
4362306a36Sopenharmony_ci#define INTEL_LPSS_SLEEP_PM_OPS
4462306a36Sopenharmony_ci#endif
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#define INTEL_LPSS_RUNTIME_PM_OPS		\
4762306a36Sopenharmony_ci	.runtime_suspend = intel_lpss_suspend,	\
4862306a36Sopenharmony_ci	.runtime_resume = intel_lpss_resume,
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#else /* !CONFIG_PM */
5162306a36Sopenharmony_ci#define INTEL_LPSS_SLEEP_PM_OPS
5262306a36Sopenharmony_ci#define INTEL_LPSS_RUNTIME_PM_OPS
5362306a36Sopenharmony_ci#endif /* CONFIG_PM */
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci#define INTEL_LPSS_PM_OPS(name)			\
5662306a36Sopenharmony_ciconst struct dev_pm_ops name = {		\
5762306a36Sopenharmony_ci	INTEL_LPSS_SLEEP_PM_OPS			\
5862306a36Sopenharmony_ci	INTEL_LPSS_RUNTIME_PM_OPS		\
5962306a36Sopenharmony_ci}
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci#endif /* __MFD_INTEL_LPSS_H */
62