ASoC: wm_adsp: Move DSP Rate controls into the codec
Subsystems (3)
PATCH 1/1 ASoC: wm_adsp: Move DSP Rate controls into the codec
The rate controls are codec-specific, it's not possible to generically say what the range or the meaning of each control is (or even if they exist at all) - that depends on the particular codec.
This is currently being handled for Arizona codecs by putting an Arizona-specific table of controls inside the wm_adsp driver. This creates a dependency between wm_adsp and arizona.c, and is an awkward solution if the ADSP is used in another family of codecs
Fix this by moving the Arizona-specific rate controls into the Arizona codec drivers.
--- sound/soc/codecs/arizona.c | 27 ++++++++++++++++++++++ sound/soc/codecs/arizona.h | 2 + sound/soc/codecs/wm2200.c | 2 +- sound/soc/codecs/wm5102.c | 5 ++++ sound/soc/codecs/wm5110.c | 6 +++++ sound/soc/codecs/wm_adsp.c | 52 +++++-------------------------------------- sound/soc/codecs/wm_adsp.h | 2 +- 7 files changed, 48 insertions(+), 48 deletions(-)
sound/soc/codecs/arizona.c +27 -0
@@ -2286,6 +2286,33 @@ int arizona_set_output_mode(struct snd_soc_codec *codec, int output, bool diff) }EXPORT_SYMBOL_GPL (arizona_set_output_mode); +static const struct soc_enum arizona_adsp2_rate_enum[] = { +SOC_VALUE_ENUM_SINGLE (ARIZONA_DSP1_CONTROL_1 , +ARIZONA_DSP1_RATE_SHIFT ,0xf , +ARIZONA_RATE_ENUM_SIZE , + arizona_rate_text, arizona_rate_val), +SOC_VALUE_ENUM_SINGLE (ARIZONA_DSP2_CONTROL_1 , +ARIZONA_DSP1_RATE_SHIFT ,0xf , +ARIZONA_RATE_ENUM_SIZE , + arizona_rate_text, arizona_rate_val), +SOC_VALUE_ENUM_SINGLE (ARIZONA_DSP3_CONTROL_1 , +ARIZONA_DSP1_RATE_SHIFT ,0xf , +ARIZONA_RATE_ENUM_SIZE , + arizona_rate_text, arizona_rate_val), +SOC_VALUE_ENUM_SINGLE (ARIZONA_DSP4_CONTROL_1 , +ARIZONA_DSP1_RATE_SHIFT ,0xf , +ARIZONA_RATE_ENUM_SIZE , + arizona_rate_text, arizona_rate_val), +}; + +const struct snd_kcontrol_new arizona_adsp2_rate_controls[] = { +SOC_ENUM ("DSP1 Rate" , arizona_adsp2_rate_enum[0 ]), +SOC_ENUM ("DSP2 Rate" , arizona_adsp2_rate_enum[1 ]), +SOC_ENUM ("DSP3 Rate" , arizona_adsp2_rate_enum[2 ]), +SOC_ENUM ("DSP4 Rate" , arizona_adsp2_rate_enum[3 ]), +}; +EXPORT_SYMBOL_GPL (arizona_adsp2_rate_controls); +MODULE_DESCRIPTION ("ASoC Wolfson Arizona class device support" );MODULE_AUTHOR ("Mark Brown <[email protected]>" );MODULE_LICENSE ("GPL" );
sound/soc/codecs/arizona.h +2 -0
@@ -217,6 +217,8 @@ extern const struct soc_enum arizona_ng_hold;extern const struct soc_enum arizona_in_hpf_cut_enum;extern const struct soc_enum arizona_in_dmic_osr[]; +extern const struct snd_kcontrol_new arizona_adsp2_rate_controls[]; +extern int arizona_in_ev (struct snd_soc_dapm_widget *w,struct snd_kcontrol *kcontrol,int event);
sound/soc/codecs/wm2200.c +1 -1
@@ -1555,7 +1555,7 @@ static int wm2200_probe(struct snd_soc_codec *codec) wm2200->codec = codec; - ret =snd_soc_add_codec_controls (codec, wm_adsp1_fw_controls,2 ); + ret =snd_soc_add_codec_controls (codec, wm_adsp_fw_controls,2 );if (ret !=0 )return ret;
sound/soc/codecs/wm5102.c +5 -0
@@ -1880,6 +1880,11 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)if (ret)return ret; + ret =snd_soc_add_codec_controls (codec, + arizona_adsp2_rate_controls,1 ); +if (ret) +return ret; +arizona_init_spk (codec);arizona_init_gpio (codec);
sound/soc/codecs/wm5110.c +6 -0
@@ -1614,6 +1614,12 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec)return ret; } + ret =snd_soc_add_codec_controls (codec, + arizona_adsp2_rate_controls, +WM5110_NUM_ADSP ); +if (ret) +return ret; +snd_soc_dapm_disable_pin (dapm,"HAPTICS" );return 0 ;
sound/soc/codecs/wm_adsp.c +6 -46
71 lines not on this page · raw message
sound/soc/codecs/wm_adsp.h +1 -1
@@ -83,7 +83,7 @@ struct wm_adsp {#define WM_ADSP2 (wname, num) \ WM_ADSP2_E(wname, num, wm_adsp2_early_event) -extern const struct snd_kcontrol_new wm_adsp1_fw_controls[]; +extern const struct snd_kcontrol_new wm_adsp_fw_controls[];int wm_adsp1_init (struct wm_adsp *dsp);int wm_adsp2_init (struct wm_adsp *dsp);
Signature · 1 line
1.7.2.5
Mark Brown
maintainerQuoted 4 lines · Richard Fitzgerald
The rate controls are codec-specific, it's not possible to generically say what the range or the meaning of each control is (or even if they exist at all) - that depends on the particular codec.
Applied after I managed to figure out what this was generated against (which appears to be a combinaton of topic/adsp, topic/arizona and topic/dapm). As I said last time please indicate dependencies.