diff options
author | Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | 2016-03-28 09:29:24 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-03-29 13:11:10 -0400 |
commit | c13202f7d7101a6f5542f3a31b9a6787ae7b746c (patch) | |
tree | 574af44434c13370f1017a7b864c1f7c533186d6 | |
parent | 9abe3dc77ea7ccad1c2112257bb352435dcee0ff (diff) |
ASoC: cs47l24: Add support for audio trace firmware
cs47l24 supports the audio trace firmware, this streams of audio to be
captured from the CODEC over a compressed audio channel for
analysis/debugging of audio processing firmwares.
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/cs47l24.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/sound/soc/codecs/cs47l24.c b/sound/soc/codecs/cs47l24.c index 383700a178c7..6b8b5571d3cc 100644 --- a/sound/soc/codecs/cs47l24.c +++ b/sound/soc/codecs/cs47l24.c | |||
@@ -807,6 +807,9 @@ static const struct snd_soc_dapm_route cs47l24_dapm_routes[] = { | |||
807 | { "IN2L PGA", NULL, "IN2L" }, | 807 | { "IN2L PGA", NULL, "IN2L" }, |
808 | { "IN2R PGA", NULL, "IN2R" }, | 808 | { "IN2R PGA", NULL, "IN2R" }, |
809 | 809 | ||
810 | { "Audio Trace DSP", NULL, "DSP2" }, | ||
811 | { "Audio Trace DSP", NULL, "SYSCLK" }, | ||
812 | |||
810 | ARIZONA_MIXER_ROUTES("OUT1L", "HPOUT1L"), | 813 | ARIZONA_MIXER_ROUTES("OUT1L", "HPOUT1L"), |
811 | ARIZONA_MIXER_ROUTES("OUT1R", "HPOUT1R"), | 814 | ARIZONA_MIXER_ROUTES("OUT1R", "HPOUT1R"), |
812 | 815 | ||
@@ -1016,6 +1019,27 @@ static struct snd_soc_dai_driver cs47l24_dai[] = { | |||
1016 | .formats = CS47L24_FORMATS, | 1019 | .formats = CS47L24_FORMATS, |
1017 | }, | 1020 | }, |
1018 | }, | 1021 | }, |
1022 | { | ||
1023 | .name = "cs47l24-cpu-trace", | ||
1024 | .capture = { | ||
1025 | .stream_name = "Audio Trace CPU", | ||
1026 | .channels_min = 1, | ||
1027 | .channels_max = 6, | ||
1028 | .rates = CS47L24_RATES, | ||
1029 | .formats = CS47L24_FORMATS, | ||
1030 | }, | ||
1031 | .compress_new = snd_soc_new_compress, | ||
1032 | }, | ||
1033 | { | ||
1034 | .name = "cs47l24-dsp-trace", | ||
1035 | .capture = { | ||
1036 | .stream_name = "Audio Trace DSP", | ||
1037 | .channels_min = 1, | ||
1038 | .channels_max = 6, | ||
1039 | .rates = CS47L24_RATES, | ||
1040 | .formats = CS47L24_FORMATS, | ||
1041 | }, | ||
1042 | }, | ||
1019 | }; | 1043 | }; |
1020 | 1044 | ||
1021 | static int cs47l24_open(struct snd_compr_stream *stream) | 1045 | static int cs47l24_open(struct snd_compr_stream *stream) |
@@ -1027,6 +1051,8 @@ static int cs47l24_open(struct snd_compr_stream *stream) | |||
1027 | 1051 | ||
1028 | if (strcmp(rtd->codec_dai->name, "cs47l24-dsp-voicectrl") == 0) { | 1052 | if (strcmp(rtd->codec_dai->name, "cs47l24-dsp-voicectrl") == 0) { |
1029 | n_adsp = 2; | 1053 | n_adsp = 2; |
1054 | } else if (strcmp(rtd->codec_dai->name, "cs47l24-dsp-trace") == 0) { | ||
1055 | n_adsp = 1; | ||
1030 | } else { | 1056 | } else { |
1031 | dev_err(arizona->dev, | 1057 | dev_err(arizona->dev, |
1032 | "No suitable compressed stream for DAI '%s'\n", | 1058 | "No suitable compressed stream for DAI '%s'\n", |
@@ -1041,10 +1067,16 @@ static irqreturn_t cs47l24_adsp2_irq(int irq, void *data) | |||
1041 | { | 1067 | { |
1042 | struct cs47l24_priv *priv = data; | 1068 | struct cs47l24_priv *priv = data; |
1043 | struct arizona *arizona = priv->core.arizona; | 1069 | struct arizona *arizona = priv->core.arizona; |
1044 | int ret; | 1070 | int serviced = 0; |
1071 | int i, ret; | ||
1072 | |||
1073 | for (i = 1; i <= 2; ++i) { | ||
1074 | ret = wm_adsp_compr_handle_irq(&priv->core.adsp[i]); | ||
1075 | if (ret != -ENODEV) | ||
1076 | serviced++; | ||
1077 | } | ||
1045 | 1078 | ||
1046 | ret = wm_adsp_compr_handle_irq(&priv->core.adsp[2]); | 1079 | if (!serviced) { |
1047 | if (ret == -ENODEV) { | ||
1048 | dev_err(arizona->dev, "Spurious compressed data IRQ\n"); | 1080 | dev_err(arizona->dev, "Spurious compressed data IRQ\n"); |
1049 | return IRQ_NONE; | 1081 | return IRQ_NONE; |
1050 | } | 1082 | } |