Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2/*
3 * This file is provided under a dual BSD/GPLv2 license. When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * Copyright(c) 2022-2023 Intel Corporation. All rights reserved.
7 */
8
9struct hdac_bus;
10struct hdac_ext_link;
11
12#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK)
13
14int hda_bus_ml_init(struct hdac_bus *bus);
15void hda_bus_ml_free(struct hdac_bus *bus);
16
17int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid);
18void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable);
19bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid);
20
21int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd);
22int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd);
23
24int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid);
25int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus);
26
27void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
28void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink);
29
30int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid);
31int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus);
32
33bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid);
34bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus);
35
36int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink);
37int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
38
39int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink);
40int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
41
42int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink);
43int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink);
44
45int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num);
46
47void hda_bus_ml_put_all(struct hdac_bus *bus);
48void hda_bus_ml_reset_losidv(struct hdac_bus *bus);
49int hda_bus_ml_resume(struct hdac_bus *bus);
50int hda_bus_ml_suspend(struct hdac_bus *bus);
51
52struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus);
53struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus);
54
55struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid);
56
57int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);
58
59#else
60
61static inline int
62hda_bus_ml_init(struct hdac_bus *bus) { return 0; }
63
64static inline void hda_bus_ml_free(struct hdac_bus *bus) { }
65
66static inline int
67hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; }
68
69static inline void
70hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
71
72static inline bool
73hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; }
74
75static inline int
76hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
77{
78 return 0;
79}
80
81static inline int
82hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
83{
84 return 0;
85}
86
87static inline int
88hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
89{
90 return 0;
91}
92
93static inline int
94hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; }
95
96static inline void
97hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { }
98
99static inline void
100hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { }
101
102static inline int
103hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; }
104
105static inline int
106hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; }
107
108static inline bool
109hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; }
110
111static inline bool
112hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; }
113
114static inline int
115hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
116{
117 return 0;
118}
119
120static inline int
121hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
122{
123 return 0;
124}
125
126static inline int
127hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
128{
129 return 0;
130}
131
132static inline int
133hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
134{
135 return 0;
136}
137
138static inline int
139hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
140
141static inline int
142hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
143
144static inline int
145hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
146
147static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
148static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { }
149static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; }
150static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; }
151
152static inline struct hdac_ext_link *
153hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; }
154
155static inline struct hdac_ext_link *
156hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; }
157
158static inline struct mutex *
159hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; }
160
161static inline int
162hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
163{
164 return 0;
165}
166#endif /* CONFIG_SND_SOC_SOF_HDA */