hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/sound/soc/codecs/wm_adsp.h
....@@ -1,13 +1,10 @@
1
+/* SPDX-License-Identifier: GPL-2.0-only */
12 /*
23 * wm_adsp.h -- Wolfson ADSP support
34 *
45 * Copyright 2012 Wolfson Microelectronics plc
56 *
67 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License version 2 as
10
- * published by the Free Software Foundation.
118 */
129
1310 #ifndef __WM_ADSP_H
....@@ -54,6 +51,7 @@
5451
5552 struct wm_adsp_compr;
5653 struct wm_adsp_compr_buf;
54
+struct wm_adsp_ops;
5755
5856 struct wm_adsp {
5957 const char *part;
....@@ -66,7 +64,10 @@
6664 struct regmap *regmap;
6765 struct snd_soc_component *component;
6866
67
+ struct wm_adsp_ops *ops;
68
+
6969 unsigned int base;
70
+ unsigned int base_sysinfo;
7071 unsigned int sysclk_reg;
7172 unsigned int sysclk_mask;
7273 unsigned int sysclk_shift;
....@@ -75,6 +76,7 @@
7576
7677 unsigned int fw_id;
7778 unsigned int fw_id_version;
79
+ unsigned int fw_vendor_id;
7880
7981 const struct wm_adsp_region *mem;
8082 int num_mems;
....@@ -85,13 +87,14 @@
8587 bool preloaded;
8688 bool booted;
8789 bool running;
90
+ bool fatal_error;
8891
8992 struct list_head ctl_list;
9093
9194 struct work_struct boot_work;
9295
93
- struct wm_adsp_compr *compr;
94
- struct wm_adsp_compr_buf *buffer;
96
+ struct list_head compr_list;
97
+ struct list_head buffer_list;
9598
9699 struct mutex pwr_lock;
97100
....@@ -103,6 +106,32 @@
103106 char *bin_file_name;
104107 #endif
105108
109
+};
110
+
111
+struct wm_adsp_ops {
112
+ unsigned int sys_config_size;
113
+
114
+ bool (*validate_version)(struct wm_adsp *dsp, unsigned int version);
115
+ unsigned int (*parse_sizes)(struct wm_adsp *dsp,
116
+ const char * const file,
117
+ unsigned int pos,
118
+ const struct firmware *firmware);
119
+ int (*setup_algs)(struct wm_adsp *dsp);
120
+ unsigned int (*region_to_reg)(struct wm_adsp_region const *mem,
121
+ unsigned int offset);
122
+
123
+ void (*show_fw_status)(struct wm_adsp *dsp);
124
+ void (*stop_watchdog)(struct wm_adsp *dsp);
125
+
126
+ int (*enable_memory)(struct wm_adsp *dsp);
127
+ void (*disable_memory)(struct wm_adsp *dsp);
128
+ int (*lock_memory)(struct wm_adsp *dsp, unsigned int lock_regions);
129
+
130
+ int (*enable_core)(struct wm_adsp *dsp);
131
+ void (*disable_core)(struct wm_adsp *dsp);
132
+
133
+ int (*start_core)(struct wm_adsp *dsp);
134
+ void (*stop_core)(struct wm_adsp *dsp);
106135 };
107136
108137 #define WM_ADSP1(wname, num) \
....@@ -120,7 +149,7 @@
120149 .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD, \
121150 .subseq = 100, /* Ensure we run after SYSCLK supply widget */ }, \
122151 { .id = snd_soc_dapm_out_drv, .name = wname, \
123
- .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \
152
+ .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp_event, \
124153 .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
125154
126155 #define WM_ADSP_FW_CONTROL(dspname, num) \
....@@ -134,17 +163,22 @@
134163 void wm_adsp2_remove(struct wm_adsp *dsp);
135164 int wm_adsp2_component_probe(struct wm_adsp *dsp, struct snd_soc_component *component);
136165 int wm_adsp2_component_remove(struct wm_adsp *dsp, struct snd_soc_component *component);
166
+int wm_halo_init(struct wm_adsp *dsp);
167
+
137168 int wm_adsp1_event(struct snd_soc_dapm_widget *w,
138169 struct snd_kcontrol *kcontrol, int event);
139
-int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
140
- struct snd_kcontrol *kcontrol, int event,
141
- unsigned int freq);
142170
143
-int wm_adsp2_lock(struct wm_adsp *adsp, unsigned int regions);
144
-irqreturn_t wm_adsp2_bus_error(struct wm_adsp *adsp);
171
+int wm_adsp_early_event(struct snd_soc_dapm_widget *w,
172
+ struct snd_kcontrol *kcontrol, int event);
145173
146
-int wm_adsp2_event(struct snd_soc_dapm_widget *w,
147
- struct snd_kcontrol *kcontrol, int event);
174
+irqreturn_t wm_adsp2_bus_error(int irq, void *data);
175
+irqreturn_t wm_halo_bus_error(int irq, void *data);
176
+irqreturn_t wm_halo_wdt_expire(int irq, void *data);
177
+
178
+int wm_adsp_event(struct snd_soc_dapm_widget *w,
179
+ struct snd_kcontrol *kcontrol, int event);
180
+
181
+int wm_adsp2_set_dspclk(struct snd_soc_dapm_widget *w, unsigned int freq);
148182
149183 int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol,
150184 struct snd_ctl_elem_value *ucontrol);
....@@ -156,16 +190,26 @@
156190 struct snd_ctl_elem_value *ucontrol);
157191
158192 int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream);
159
-int wm_adsp_compr_free(struct snd_compr_stream *stream);
160
-int wm_adsp_compr_set_params(struct snd_compr_stream *stream,
193
+int wm_adsp_compr_free(struct snd_soc_component *component,
194
+ struct snd_compr_stream *stream);
195
+int wm_adsp_compr_set_params(struct snd_soc_component *component,
196
+ struct snd_compr_stream *stream,
161197 struct snd_compr_params *params);
162
-int wm_adsp_compr_get_caps(struct snd_compr_stream *stream,
198
+int wm_adsp_compr_get_caps(struct snd_soc_component *component,
199
+ struct snd_compr_stream *stream,
163200 struct snd_compr_caps *caps);
164
-int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd);
201
+int wm_adsp_compr_trigger(struct snd_soc_component *component,
202
+ struct snd_compr_stream *stream, int cmd);
165203 int wm_adsp_compr_handle_irq(struct wm_adsp *dsp);
166
-int wm_adsp_compr_pointer(struct snd_compr_stream *stream,
204
+int wm_adsp_compr_pointer(struct snd_soc_component *component,
205
+ struct snd_compr_stream *stream,
167206 struct snd_compr_tstamp *tstamp);
168
-int wm_adsp_compr_copy(struct snd_compr_stream *stream,
207
+int wm_adsp_compr_copy(struct snd_soc_component *component,
208
+ struct snd_compr_stream *stream,
169209 char __user *buf, size_t count);
210
+int wm_adsp_write_ctl(struct wm_adsp *dsp, const char *name, int type,
211
+ unsigned int alg, void *buf, size_t len);
212
+int wm_adsp_read_ctl(struct wm_adsp *dsp, const char *name, int type,
213
+ unsigned int alg, void *buf, size_t len);
170214
171215 #endif