Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/sound/hda-mlink.h
121797 views
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
7
*/
8
9
struct hdac_bus;
10
struct hdac_ext_link;
11
12
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK)
13
14
int hda_bus_ml_init(struct hdac_bus *bus);
15
void hda_bus_ml_free(struct hdac_bus *bus);
16
17
int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid);
18
void hdac_bus_eml_enable_interrupt_unlocked(struct hdac_bus *bus, bool alt, int elid, bool enable);
19
void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable);
20
bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid);
21
22
int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd);
23
int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd);
24
25
int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid);
26
int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus);
27
28
void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
29
void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink);
30
31
int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid);
32
int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus);
33
34
bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid);
35
bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus);
36
37
int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink);
38
int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
39
40
int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink);
41
int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
42
43
int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink);
44
int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink);
45
46
int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid);
47
int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num);
48
49
int hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y,
50
int channel_mask, int stream_id, int dir);
51
52
void hda_bus_ml_put_all(struct hdac_bus *bus);
53
void hda_bus_ml_reset_losidv(struct hdac_bus *bus);
54
int hda_bus_ml_resume(struct hdac_bus *bus);
55
int hda_bus_ml_suspend(struct hdac_bus *bus);
56
57
struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus);
58
struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus);
59
struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus);
60
61
struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid);
62
63
int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);
64
65
/* microphone privacy specific function supported by ACE3+ architecture */
66
void hdac_bus_eml_set_mic_privacy_mask(struct hdac_bus *bus, bool alt, int elid,
67
unsigned long mask);
68
bool hdac_bus_eml_is_mic_privacy_changed(struct hdac_bus *bus, bool alt, int elid);
69
bool hdac_bus_eml_get_mic_privacy_state(struct hdac_bus *bus, bool alt, int elid);
70
71
#else
72
73
static inline int
74
hda_bus_ml_init(struct hdac_bus *bus) { return 0; }
75
76
static inline void hda_bus_ml_free(struct hdac_bus *bus) { }
77
78
static inline int
79
hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; }
80
81
static inline void
82
hdac_bus_eml_enable_interrupt_unlocked(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
83
84
static inline void
85
hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
86
87
static inline bool
88
hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; }
89
90
static inline int
91
hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
92
{
93
return 0;
94
}
95
96
static inline int
97
hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
98
{
99
return 0;
100
}
101
102
static inline int
103
hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
104
{
105
return 0;
106
}
107
108
static inline int
109
hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; }
110
111
static inline void
112
hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { }
113
114
static inline void
115
hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { }
116
117
static inline int
118
hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; }
119
120
static inline int
121
hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; }
122
123
static inline bool
124
hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; }
125
126
static inline bool
127
hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; }
128
129
static inline int
130
hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
131
{
132
return 0;
133
}
134
135
static inline int
136
hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
137
{
138
return 0;
139
}
140
141
static inline int
142
hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
143
{
144
return 0;
145
}
146
147
static inline int
148
hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
149
{
150
return 0;
151
}
152
153
static inline int
154
hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
155
156
static inline int
157
hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
158
159
static inline int
160
hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid) { return 0; }
161
162
static inline int
163
hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
164
165
static inline int
166
hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y,
167
int channel_mask, int stream_id, int dir)
168
{
169
return 0;
170
}
171
172
static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
173
static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { }
174
static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; }
175
static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; }
176
177
static inline struct hdac_ext_link *
178
hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; }
179
180
static inline struct hdac_ext_link *
181
hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; }
182
183
static inline struct hdac_ext_link *
184
hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus) { return NULL; }
185
186
static inline struct mutex *
187
hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; }
188
189
static inline int
190
hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
191
{
192
return 0;
193
}
194
195
static inline void
196
hdac_bus_eml_set_mic_privacy_mask(struct hdac_bus *bus, bool alt, int elid,
197
unsigned long mask)
198
{
199
}
200
201
static inline bool
202
hdac_bus_eml_is_mic_privacy_changed(struct hdac_bus *bus, bool alt, int elid)
203
{
204
return false;
205
}
206
207
static inline bool
208
hdac_bus_eml_get_mic_privacy_state(struct hdac_bus *bus, bool alt, int elid)
209
{
210
return false;
211
}
212
213
#endif /* CONFIG_SND_SOC_SOF_HDA_MLINK */
214
215