18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
28c2ecf20Sopenharmony_ci/* Copyright(c) 2015-17 Intel Corporation. */
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#ifndef __SDW_INTEL_LOCAL_H
58c2ecf20Sopenharmony_ci#define __SDW_INTEL_LOCAL_H
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci/**
88c2ecf20Sopenharmony_ci * struct sdw_intel_link_res - Soundwire Intel link resource structure,
98c2ecf20Sopenharmony_ci * typically populated by the controller driver.
108c2ecf20Sopenharmony_ci * @pdev: platform_device
118c2ecf20Sopenharmony_ci * @mmio_base: mmio base of SoundWire registers
128c2ecf20Sopenharmony_ci * @registers: Link IO registers base
138c2ecf20Sopenharmony_ci * @shim: Audio shim pointer
148c2ecf20Sopenharmony_ci * @alh: ALH (Audio Link Hub) pointer
158c2ecf20Sopenharmony_ci * @irq: Interrupt line
168c2ecf20Sopenharmony_ci * @ops: Shim callback ops
178c2ecf20Sopenharmony_ci * @dev: device implementing hw_params and free callbacks
188c2ecf20Sopenharmony_ci * @shim_lock: mutex to handle access to shared SHIM registers
198c2ecf20Sopenharmony_ci * @shim_mask: global pointer to check SHIM register initialization
208c2ecf20Sopenharmony_ci * @clock_stop_quirks: mask defining requested behavior on pm_suspend
218c2ecf20Sopenharmony_ci * @link_mask: global mask needed for power-up/down sequences
228c2ecf20Sopenharmony_ci * @cdns: Cadence master descriptor
238c2ecf20Sopenharmony_ci * @list: used to walk-through all masters exposed by the same controller
248c2ecf20Sopenharmony_ci */
258c2ecf20Sopenharmony_cistruct sdw_intel_link_res {
268c2ecf20Sopenharmony_ci	struct platform_device *pdev;
278c2ecf20Sopenharmony_ci	void __iomem *mmio_base; /* not strictly needed, useful for debug */
288c2ecf20Sopenharmony_ci	void __iomem *registers;
298c2ecf20Sopenharmony_ci	void __iomem *shim;
308c2ecf20Sopenharmony_ci	void __iomem *alh;
318c2ecf20Sopenharmony_ci	int irq;
328c2ecf20Sopenharmony_ci	const struct sdw_intel_ops *ops;
338c2ecf20Sopenharmony_ci	struct device *dev;
348c2ecf20Sopenharmony_ci	struct mutex *shim_lock; /* protect shared registers */
358c2ecf20Sopenharmony_ci	u32 *shim_mask;
368c2ecf20Sopenharmony_ci	u32 clock_stop_quirks;
378c2ecf20Sopenharmony_ci	u32 link_mask;
388c2ecf20Sopenharmony_ci	struct sdw_cdns *cdns;
398c2ecf20Sopenharmony_ci	struct list_head list;
408c2ecf20Sopenharmony_ci};
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistruct sdw_intel {
438c2ecf20Sopenharmony_ci	struct sdw_cdns cdns;
448c2ecf20Sopenharmony_ci	int instance;
458c2ecf20Sopenharmony_ci	struct sdw_intel_link_res *link_res;
468c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_FS
478c2ecf20Sopenharmony_ci	struct dentry *debugfs;
488c2ecf20Sopenharmony_ci#endif
498c2ecf20Sopenharmony_ci};
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci#define SDW_INTEL_QUIRK_MASK_BUS_DISABLE      BIT(1)
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ciint intel_master_startup(struct platform_device *pdev);
548c2ecf20Sopenharmony_ciint intel_master_process_wakeen_event(struct platform_device *pdev);
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci#endif /* __SDW_INTEL_LOCAL_H */
57