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