Commit | Line | Data |
---|---|---|
2159ad93 MB |
1 | /* |
2 | * wm_adsp.h -- Wolfson ADSP support | |
3 | * | |
4 | * Copyright 2012 Wolfson Microelectronics plc | |
5 | * | |
6 | * 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. | |
11 | */ | |
12 | ||
13 | #ifndef __WM_ADSP_H | |
14 | #define __WM_ADSP_H | |
15 | ||
16 | #include <sound/soc.h> | |
17 | #include <sound/soc-dapm.h> | |
18 | ||
19 | #include "wmfw.h" | |
20 | ||
21 | struct wm_adsp_region { | |
22 | int type; | |
23 | unsigned int base; | |
24 | }; | |
25 | ||
471f4885 MB |
26 | struct wm_adsp_alg_region { |
27 | struct list_head list; | |
28 | unsigned int alg; | |
29 | int type; | |
30 | unsigned int base; | |
31 | }; | |
32 | ||
2159ad93 MB |
33 | struct wm_adsp { |
34 | const char *part; | |
35 | int num; | |
36 | int type; | |
37 | struct device *dev; | |
38 | struct regmap *regmap; | |
92bb4c32 | 39 | struct snd_soc_card *card; |
2159ad93 MB |
40 | |
41 | int base; | |
94e205bf CR |
42 | int sysclk_reg; |
43 | int sysclk_mask; | |
44 | int sysclk_shift; | |
2159ad93 | 45 | |
471f4885 MB |
46 | struct list_head alg_regions; |
47 | ||
f395a218 MB |
48 | int fw_id; |
49 | ||
2159ad93 MB |
50 | const struct wm_adsp_region *mem; |
51 | int num_mems; | |
973838a0 | 52 | |
1023dbd9 | 53 | int fw; |
2323736d | 54 | int fw_ver; |
1023dbd9 MB |
55 | bool running; |
56 | ||
81ad93ec | 57 | struct list_head ctl_list; |
d8a64d6a CK |
58 | |
59 | struct work_struct boot_work; | |
2159ad93 MB |
60 | }; |
61 | ||
62 | #define WM_ADSP1(wname, num) \ | |
f9eeae9f LPC |
63 | SND_SOC_DAPM_PGA_E(wname, SND_SOC_NOPM, num, 0, NULL, 0, \ |
64 | wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD) | |
2159ad93 | 65 | |
81ac58b1 | 66 | #define WM_ADSP2_E(wname, num, event_fn) \ |
12db5edd | 67 | { .id = snd_soc_dapm_dai_link, .name = wname " Preloader", \ |
81ac58b1 RF |
68 | .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \ |
69 | .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }, \ | |
12db5edd CK |
70 | { .id = snd_soc_dapm_out_drv, .name = wname, \ |
71 | .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \ | |
72 | .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD } | |
2159ad93 | 73 | |
81ac58b1 RF |
74 | #define WM_ADSP2(wname, num) \ |
75 | WM_ADSP2_E(wname, num, wm_adsp2_early_event) | |
76 | ||
b6ed61cf | 77 | extern const struct snd_kcontrol_new wm_adsp1_fw_controls[]; |
1023dbd9 | 78 | |
3809f001 | 79 | int wm_adsp1_init(struct wm_adsp *dsp); |
81ac58b1 | 80 | int wm_adsp2_init(struct wm_adsp *dsp); |
f5e2ce92 RF |
81 | int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec); |
82 | int wm_adsp2_codec_remove(struct wm_adsp *dsp, struct snd_soc_codec *codec); | |
2159ad93 MB |
83 | int wm_adsp1_event(struct snd_soc_dapm_widget *w, |
84 | struct snd_kcontrol *kcontrol, int event); | |
12db5edd CK |
85 | int wm_adsp2_early_event(struct snd_soc_dapm_widget *w, |
86 | struct snd_kcontrol *kcontrol, int event); | |
2159ad93 MB |
87 | int wm_adsp2_event(struct snd_soc_dapm_widget *w, |
88 | struct snd_kcontrol *kcontrol, int event); | |
89 | ||
90 | #endif |