161 lines
5.2 KiB
Diff
161 lines
5.2 KiB
Diff
|
From aa5850d636223160ea521844cee9e353d96eeac9 Mon Sep 17 00:00:00 2001
|
||
|
From: Samuel Holland <samuel@sholland.org>
|
||
|
Date: Wed, 14 Oct 2020 01:19:25 -0500
|
||
|
Subject: [PATCH 298/351] ASoC: sun8i-codec: Prepare to extend the DAI driver
|
||
|
|
||
|
In preparation for adding additional DAIs to this component, convert the
|
||
|
DAI driver definition to an array. Since this changes all of the lines
|
||
|
in the definition anyway, let's move it closer to the ops function
|
||
|
definitions, instead of on the far side of the DAPM arrays. And while
|
||
|
moving the DAI driver ops, rename the set_fmt hook to match the usual
|
||
|
naming scheme.
|
||
|
|
||
|
Give the existing DAI an explicit ID and more meaningful stream names,
|
||
|
so it will remain unique as more DAIs are added. The AIF widget streams
|
||
|
must be updated to match.
|
||
|
|
||
|
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||
|
Link: https://lore.kernel.org/r/20201014061941.4306-2-samuel@sholland.org
|
||
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
||
|
---
|
||
|
sound/soc/sunxi/sun8i-codec.c | 76 +++++++++++++++++++----------------
|
||
|
1 file changed, 42 insertions(+), 34 deletions(-)
|
||
|
|
||
|
diff --git a/sound/soc/sunxi/sun8i-codec.c b/sound/soc/sunxi/sun8i-codec.c
|
||
|
index 7590c4b04d14..6413873a0584 100644
|
||
|
--- a/sound/soc/sunxi/sun8i-codec.c
|
||
|
+++ b/sound/soc/sunxi/sun8i-codec.c
|
||
|
@@ -95,6 +95,11 @@
|
||
|
#define SUN8I_AIF1CLK_CTRL_AIF1_WORD_SIZ_MASK GENMASK(5, 4)
|
||
|
#define SUN8I_AIF1CLK_CTRL_AIF1_DATA_FMT_MASK GENMASK(3, 2)
|
||
|
|
||
|
+enum {
|
||
|
+ SUN8I_CODEC_AIF1,
|
||
|
+ SUN8I_CODEC_NAIFS
|
||
|
+};
|
||
|
+
|
||
|
struct sun8i_codec_quirks {
|
||
|
bool legacy_widgets : 1;
|
||
|
bool lrck_inversion : 1;
|
||
|
@@ -165,7 +170,7 @@ static int sun8i_codec_get_hw_rate(struct snd_pcm_hw_params *params)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-static int sun8i_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||
|
+static int sun8i_codec_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
|
||
|
{
|
||
|
struct sun8i_codec *scodec = snd_soc_dai_get_drvdata(dai);
|
||
|
u32 value;
|
||
|
@@ -336,6 +341,36 @@ static int sun8i_codec_hw_params(struct snd_pcm_substream *substream,
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+static const struct snd_soc_dai_ops sun8i_codec_dai_ops = {
|
||
|
+ .set_fmt = sun8i_codec_set_fmt,
|
||
|
+ .hw_params = sun8i_codec_hw_params,
|
||
|
+};
|
||
|
+
|
||
|
+static struct snd_soc_dai_driver sun8i_codec_dais[] = {
|
||
|
+ {
|
||
|
+ .name = "sun8i-codec-aif1",
|
||
|
+ .id = SUN8I_CODEC_AIF1,
|
||
|
+ .ops = &sun8i_codec_dai_ops,
|
||
|
+ /* capture capabilities */
|
||
|
+ .capture = {
|
||
|
+ .stream_name = "AIF1 Capture",
|
||
|
+ .channels_min = 1,
|
||
|
+ .channels_max = 2,
|
||
|
+ .rates = SNDRV_PCM_RATE_8000_192000,
|
||
|
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||
|
+ .sig_bits = 24,
|
||
|
+ },
|
||
|
+ /* playback capabilities */
|
||
|
+ .playback = {
|
||
|
+ .stream_name = "AIF1 Playback",
|
||
|
+ .channels_min = 1,
|
||
|
+ .channels_max = 2,
|
||
|
+ .rates = SNDRV_PCM_RATE_8000_192000,
|
||
|
+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||
|
+ },
|
||
|
+ },
|
||
|
+};
|
||
|
+
|
||
|
static const char *const sun8i_aif_stereo_mux_enum_values[] = {
|
||
|
"Stereo", "Reverse Stereo", "Sum Mono", "Mix Mono"
|
||
|
};
|
||
|
@@ -438,10 +473,10 @@ static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = {
|
||
|
SUN8I_DAC_DIG_CTRL_ENDA, 0, NULL, 0),
|
||
|
|
||
|
/* AIF "ADC" Outputs */
|
||
|
- SND_SOC_DAPM_AIF_OUT("AIF1 AD0L", "Capture", 0,
|
||
|
+ SND_SOC_DAPM_AIF_OUT("AIF1 AD0L", "AIF1 Capture", 0,
|
||
|
SUN8I_AIF1_ADCDAT_CTRL,
|
||
|
SUN8I_AIF1_ADCDAT_CTRL_AIF1_AD0L_ENA, 0),
|
||
|
- SND_SOC_DAPM_AIF_OUT("AIF1 AD0R", "Capture", 1,
|
||
|
+ SND_SOC_DAPM_AIF_OUT("AIF1 AD0R", "AIF1 Capture", 1,
|
||
|
SUN8I_AIF1_ADCDAT_CTRL,
|
||
|
SUN8I_AIF1_ADCDAT_CTRL_AIF1_AD0R_ENA, 0),
|
||
|
|
||
|
@@ -464,10 +499,10 @@ static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = {
|
||
|
&sun8i_aif1_da0_stereo_mux_control),
|
||
|
|
||
|
/* AIF "DAC" Inputs */
|
||
|
- SND_SOC_DAPM_AIF_IN("AIF1 DA0L", "Playback", 0,
|
||
|
+ SND_SOC_DAPM_AIF_IN("AIF1 DA0L", "AIF1 Playback", 0,
|
||
|
SUN8I_AIF1_DACDAT_CTRL,
|
||
|
SUN8I_AIF1_DACDAT_CTRL_AIF1_DA0L_ENA, 0),
|
||
|
- SND_SOC_DAPM_AIF_IN("AIF1 DA0R", "Playback", 1,
|
||
|
+ SND_SOC_DAPM_AIF_IN("AIF1 DA0R", "AIF1 Playback", 1,
|
||
|
SUN8I_AIF1_DACDAT_CTRL,
|
||
|
SUN8I_AIF1_DACDAT_CTRL_AIF1_DA0R_ENA, 0),
|
||
|
|
||
|
@@ -624,34 +659,6 @@ static int sun8i_codec_component_probe(struct snd_soc_component *component)
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
-static const struct snd_soc_dai_ops sun8i_codec_dai_ops = {
|
||
|
- .hw_params = sun8i_codec_hw_params,
|
||
|
- .set_fmt = sun8i_set_fmt,
|
||
|
-};
|
||
|
-
|
||
|
-static struct snd_soc_dai_driver sun8i_codec_dai = {
|
||
|
- .name = "sun8i",
|
||
|
- /* playback capabilities */
|
||
|
- .playback = {
|
||
|
- .stream_name = "Playback",
|
||
|
- .channels_min = 1,
|
||
|
- .channels_max = 2,
|
||
|
- .rates = SNDRV_PCM_RATE_8000_192000,
|
||
|
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||
|
- },
|
||
|
- /* capture capabilities */
|
||
|
- .capture = {
|
||
|
- .stream_name = "Capture",
|
||
|
- .channels_min = 1,
|
||
|
- .channels_max = 2,
|
||
|
- .rates = SNDRV_PCM_RATE_8000_192000,
|
||
|
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||
|
- .sig_bits = 24,
|
||
|
- },
|
||
|
- /* pcm operations */
|
||
|
- .ops = &sun8i_codec_dai_ops,
|
||
|
-};
|
||
|
-
|
||
|
static const struct snd_soc_component_driver sun8i_soc_component = {
|
||
|
.dapm_widgets = sun8i_codec_dapm_widgets,
|
||
|
.num_dapm_widgets = ARRAY_SIZE(sun8i_codec_dapm_widgets),
|
||
|
@@ -714,7 +721,8 @@ static int sun8i_codec_probe(struct platform_device *pdev)
|
||
|
}
|
||
|
|
||
|
ret = devm_snd_soc_register_component(&pdev->dev, &sun8i_soc_component,
|
||
|
- &sun8i_codec_dai, 1);
|
||
|
+ sun8i_codec_dais,
|
||
|
+ ARRAY_SIZE(sun8i_codec_dais));
|
||
|
if (ret) {
|
||
|
dev_err(&pdev->dev, "Failed to register codec\n");
|
||
|
goto err_suspend;
|
||
|
--
|
||
|
2.34.0
|
||
|
|