Skip to content

Commit a45822e

Browse files
committed
ASoC: wm_adsp: Declare firmware controls from codec driver
To allow for more flexibility in naming of DSP-type cores move the creation of the firmware controls to the codec drivers instead of having a hardcoded list in wm_adsp. Signed-off-by: Richard Fitzgerald <[email protected]> Signed-off-by: Mark Brown <[email protected]> (cherry picked from commit 0a047f0) Minor modification to remove the array of AO firmware controls. Change-Id: I1db4431ee934209344b4fe0beadb59928af372df Signed-off-by: Richard Fitzgerald <[email protected]>
1 parent 9a3fc0a commit a45822e

File tree

6 files changed

+32
-46
lines changed

6 files changed

+32
-46
lines changed

sound/soc/codecs/cs47l24.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ ARIZONA_MIXER_CONTROLS("AIF2TX6", ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE),
234234

235235
ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
236236
ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
237+
238+
WM_ADSP_FW_CONTROL("DSP2", 1),
239+
WM_ADSP_FW_CONTROL("DSP3", 2),
237240
};
238241

239242
ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);

sound/soc/codecs/wm2200.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,9 @@ SOC_DOUBLE_R_TLV("OUT2 Digital Volume", WM2200_DAC_DIGITAL_VOLUME_2L,
11781178
SOC_DOUBLE("OUT2 Switch", WM2200_PDM_1, WM2200_SPK1L_MUTE_SHIFT,
11791179
WM2200_SPK1R_MUTE_SHIFT, 1, 1),
11801180
SOC_ENUM("RxANC Src", wm2200_rxanc_input_sel),
1181+
1182+
WM_ADSP_FW_CONTROL("DSP1", 0),
1183+
WM_ADSP_FW_CONTROL("DSP2", 1),
11811184
};
11821185

11831186
WM2200_MIXER_ENUMS(OUT1L, WM2200_OUT1LMIX_INPUT_1_SOURCE);
@@ -1551,15 +1554,10 @@ static const struct snd_soc_dapm_route wm2200_dapm_routes[] = {
15511554
static int wm2200_probe(struct snd_soc_codec *codec)
15521555
{
15531556
struct wm2200_priv *wm2200 = dev_get_drvdata(codec->dev);
1554-
int ret;
15551557

15561558
wm2200->codec = codec;
15571559

1558-
ret = snd_soc_add_codec_controls(codec, wm_adsp_fw_controls, 2);
1559-
if (ret != 0)
1560-
return ret;
1561-
1562-
return ret;
1560+
return 0;
15631561
}
15641562

15651563
static int wm2200_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)

sound/soc/codecs/wm5102.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,8 @@ ARIZONA_MIXER_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE),
983983
ARIZONA_MIXER_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE),
984984
ARIZONA_MIXER_CONTROLS("SLIMTX7", ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE),
985985
ARIZONA_MIXER_CONTROLS("SLIMTX8", ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE),
986+
987+
WM_ADSP_FW_CONTROL("DSP1", 0),
986988
};
987989

988990
ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);

sound/soc/codecs/wm5110.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,11 @@ ARIZONA_MIXER_CONTROLS("SLIMTX5", ARIZONA_SLIMTX5MIX_INPUT_1_SOURCE),
919919
ARIZONA_MIXER_CONTROLS("SLIMTX6", ARIZONA_SLIMTX6MIX_INPUT_1_SOURCE),
920920
ARIZONA_MIXER_CONTROLS("SLIMTX7", ARIZONA_SLIMTX7MIX_INPUT_1_SOURCE),
921921
ARIZONA_MIXER_CONTROLS("SLIMTX8", ARIZONA_SLIMTX8MIX_INPUT_1_SOURCE),
922+
923+
WM_ADSP_FW_CONTROL("DSP1", 0),
924+
WM_ADSP_FW_CONTROL("DSP2", 1),
925+
WM_ADSP_FW_CONTROL("DSP3", 2),
926+
WM_ADSP_FW_CONTROL("DSP4", 3),
922927
};
923928

924929
ARIZONA_MIXER_ENUMS(EQ1, ARIZONA_EQ1MIX_INPUT_1_SOURCE);

sound/soc/codecs/wm_adsp.c

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -975,8 +975,8 @@ static inline void wm_adsp_debugfs_clear(struct wm_adsp *dsp)
975975
}
976976
#endif
977977

978-
static int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
979-
struct snd_ctl_elem_value *ucontrol)
978+
int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
979+
struct snd_ctl_elem_value *ucontrol)
980980
{
981981
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
982982
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
@@ -986,9 +986,10 @@ static int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
986986

987987
return 0;
988988
}
989+
EXPORT_SYMBOL_GPL(wm_adsp_fw_get);
989990

990-
static int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
991-
struct snd_ctl_elem_value *ucontrol)
991+
int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
992+
struct snd_ctl_elem_value *ucontrol)
992993
{
993994
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
994995
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
@@ -1012,8 +1013,9 @@ static int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
10121013

10131014
return ret;
10141015
}
1016+
EXPORT_SYMBOL_GPL(wm_adsp_fw_put);
10151017

1016-
static const struct soc_enum wm_adsp_fw_enum[] = {
1018+
const struct soc_enum wm_adsp_fw_enum[] = {
10171019
SOC_ENUM_SINGLE(0, 0, ARRAY_SIZE(wm_adsp_fw_text), wm_adsp_fw_text),
10181020
SOC_ENUM_SINGLE(0, 1, ARRAY_SIZE(wm_adsp_fw_text), wm_adsp_fw_text),
10191021
SOC_ENUM_SINGLE(0, 2, ARRAY_SIZE(wm_adsp_fw_text), wm_adsp_fw_text),
@@ -1022,29 +1024,7 @@ static const struct soc_enum wm_adsp_fw_enum[] = {
10221024
SOC_ENUM_SINGLE(0, 5, ARRAY_SIZE(wm_adsp_fw_text), wm_adsp_fw_text),
10231025
SOC_ENUM_SINGLE(0, 6, ARRAY_SIZE(wm_adsp_fw_text), wm_adsp_fw_text),
10241026
};
1025-
1026-
const struct snd_kcontrol_new wm_adsp_fw_controls[] = {
1027-
SOC_ENUM_EXT("DSP1 Firmware", wm_adsp_fw_enum[0],
1028-
wm_adsp_fw_get, wm_adsp_fw_put),
1029-
SOC_ENUM_EXT("DSP2 Firmware", wm_adsp_fw_enum[1],
1030-
wm_adsp_fw_get, wm_adsp_fw_put),
1031-
SOC_ENUM_EXT("DSP3 Firmware", wm_adsp_fw_enum[2],
1032-
wm_adsp_fw_get, wm_adsp_fw_put),
1033-
SOC_ENUM_EXT("DSP4 Firmware", wm_adsp_fw_enum[3],
1034-
wm_adsp_fw_get, wm_adsp_fw_put),
1035-
SOC_ENUM_EXT("DSP5 Firmware", wm_adsp_fw_enum[4],
1036-
wm_adsp_fw_get, wm_adsp_fw_put),
1037-
SOC_ENUM_EXT("DSP6 Firmware", wm_adsp_fw_enum[5],
1038-
wm_adsp_fw_get, wm_adsp_fw_put),
1039-
SOC_ENUM_EXT("DSP7 Firmware", wm_adsp_fw_enum[6],
1040-
wm_adsp_fw_get, wm_adsp_fw_put),
1041-
};
1042-
EXPORT_SYMBOL_GPL(wm_adsp_fw_controls);
1043-
1044-
static const struct snd_kcontrol_new wm_adsp_ao_fw_controls[] = {
1045-
SOC_ENUM_EXT("DSP1AO Firmware", wm_adsp_fw_enum[0],
1046-
wm_adsp_fw_get, wm_adsp_fw_put),
1047-
};
1027+
EXPORT_SYMBOL_GPL(wm_adsp_fw_enum);
10481028

10491029
static struct wm_adsp_region const *wm_adsp_find_region(struct wm_adsp *dsp,
10501030
int type)
@@ -3934,7 +3914,6 @@ EXPORT_SYMBOL_GPL(wm_halo_event);
39343914
int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec)
39353915
{
39363916
char preload[32];
3937-
int ret;
39383917

39393918
if (!dsp->suffix)
39403919
dsp->suffix = "";
@@ -3948,16 +3927,7 @@ int wm_adsp2_codec_probe(struct wm_adsp *dsp, struct snd_soc_codec *codec)
39483927

39493928
dsp->codec = codec;
39503929

3951-
if (dsp->ao_dsp)
3952-
ret = snd_soc_add_codec_controls(codec,
3953-
&wm_adsp_ao_fw_controls[dsp->num - 1],
3954-
1);
3955-
else
3956-
ret = snd_soc_add_codec_controls(codec,
3957-
&wm_adsp_fw_controls[dsp->num - 1],
3958-
1);
3959-
3960-
return ret;
3930+
return 0;
39613931
}
39623932
EXPORT_SYMBOL_GPL(wm_adsp2_codec_probe);
39633933

sound/soc/codecs/wm_adsp.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,11 @@ struct wm_adsp {
143143
.reg = SND_SOC_NOPM, .shift = num, .event = wm_halo_event, \
144144
.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD }
145145

146-
extern const struct snd_kcontrol_new wm_adsp_fw_controls[];
146+
#define WM_ADSP_FW_CONTROL(dspname, num) \
147+
SOC_ENUM_EXT(dspname " Firmware", wm_adsp_fw_enum[num], \
148+
wm_adsp_fw_get, wm_adsp_fw_put)
149+
150+
extern const struct soc_enum wm_adsp_fw_enum[];
147151

148152
int wm_adsp1_init(struct wm_adsp *dsp);
149153
int wm_adsp2_init(struct wm_adsp *dsp);
@@ -178,6 +182,10 @@ int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol,
178182
struct snd_ctl_elem_value *ucontrol);
179183
int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol,
180184
struct snd_ctl_elem_value *ucontrol);
185+
int wm_adsp_fw_get(struct snd_kcontrol *kcontrol,
186+
struct snd_ctl_elem_value *ucontrol);
187+
int wm_adsp_fw_put(struct snd_kcontrol *kcontrol,
188+
struct snd_ctl_elem_value *ucontrol);
181189

182190
int wm_adsp_compr_open(struct wm_adsp *dsp, struct snd_compr_stream *stream);
183191
int wm_adsp_compr_free(struct snd_compr_stream *stream);

0 commit comments

Comments
 (0)