[alsa-devel] [RESEND PATCH v2 1/3] ASoC: rockchip: Add dapm route for HDMI
Add dapm route for DP codec.
Signed-off-by: Jeffy Chen jeffy.chen@rock-chips.com ---
Changes in v2: Separate HDMI/DMIC patches.
sound/soc/rockchip/rk3399_gru_sound.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index 0513fe480353..b050510be65f 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -47,6 +47,7 @@ static const struct snd_soc_dapm_widget rockchip_dapm_widgets[] = { SND_SOC_DAPM_SPK("Speakers", NULL), SND_SOC_DAPM_MIC("Headset Mic", NULL), SND_SOC_DAPM_MIC("Int Mic", NULL), + SND_SOC_DAPM_LINE("HDMI", NULL), };
static const struct snd_soc_dapm_route rockchip_dapm_routes[] = { @@ -59,6 +60,7 @@ static const struct snd_soc_dapm_route rockchip_dapm_routes[] = { {"Headphones", NULL, "HPL"}, {"Headphones", NULL, "HPR"}, {"Speakers", NULL, "Speaker"}, + {"HDMI", NULL, "TX"}, };
static const struct snd_kcontrol_new rockchip_controls[] = { @@ -66,6 +68,7 @@ static const struct snd_kcontrol_new rockchip_controls[] = { SOC_DAPM_PIN_SWITCH("Speakers"), SOC_DAPM_PIN_SWITCH("Headset Mic"), SOC_DAPM_PIN_SWITCH("Int Mic"), + SOC_DAPM_PIN_SWITCH("HDMI"), };
static int rockchip_sound_max98357a_hw_params(struct snd_pcm_substream *substream,
Add dapm route for DMIC codec.
Signed-off-by: Jeffy Chen jeffy.chen@rock-chips.com ---
Changes in v2: None
sound/soc/rockchip/rk3399_gru_sound.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index b050510be65f..ad19e391c4a6 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -55,6 +55,7 @@ static const struct snd_soc_dapm_route rockchip_dapm_routes[] = { {"MIC", NULL, "Headset Mic"}, {"DMIC1L", NULL, "Int Mic"}, {"DMIC1R", NULL, "Int Mic"}, + {"DMic", NULL, "Int Mic"},
/* Output Lines */ {"Headphones", NULL, "HPL"},
Currently we are using a fixed list of dapm routes.
Init dapm routes dynamically when parsing dailinks, since we are supporting optional codecs.
Signed-off-by: Jeffy Chen jeffy.chen@rock-chips.com Reviewed-by: Matthias Kaehlcke mka@chromium.org Tested-by: Matthias Kaehlcke mka@chromium.org ---
Changes in v2: Fix DMic typo.
sound/soc/rockchip/rk3399_gru_sound.c | 88 ++++++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 16 deletions(-)
diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index ad19e391c4a6..fab868850d3a 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -50,20 +50,6 @@ static const struct snd_soc_dapm_widget rockchip_dapm_widgets[] = { SND_SOC_DAPM_LINE("HDMI", NULL), };
-static const struct snd_soc_dapm_route rockchip_dapm_routes[] = { - /* Input Lines */ - {"MIC", NULL, "Headset Mic"}, - {"DMIC1L", NULL, "Int Mic"}, - {"DMIC1R", NULL, "Int Mic"}, - {"DMic", NULL, "Int Mic"}, - - /* Output Lines */ - {"Headphones", NULL, "HPL"}, - {"Headphones", NULL, "HPR"}, - {"Speakers", NULL, "Speaker"}, - {"HDMI", NULL, "TX"}, -}; - static const struct snd_kcontrol_new rockchip_controls[] = { SOC_DAPM_PIN_SWITCH("Headphones"), SOC_DAPM_PIN_SWITCH("Speakers"), @@ -318,8 +304,6 @@ static struct snd_soc_card rockchip_sound_card = { .owner = THIS_MODULE, .dapm_widgets = rockchip_dapm_widgets, .num_dapm_widgets = ARRAY_SIZE(rockchip_dapm_widgets), - .dapm_routes = rockchip_dapm_routes, - .num_dapm_routes = ARRAY_SIZE(rockchip_dapm_routes), .controls = rockchip_controls, .num_controls = ARRAY_SIZE(rockchip_controls), }; @@ -395,6 +379,65 @@ static const struct snd_soc_dai_link rockchip_dais[] = { }, };
+static const struct snd_soc_dapm_route rockchip_sound_cdndp_routes[] = { + /* Output */ + {"HDMI", NULL, "TX"}, +}; + +static const struct snd_soc_dapm_route rockchip_sound_da7219_routes[] = { + /* Output */ + {"Headphones", NULL, "HPL"}, + {"Headphones", NULL, "HPR"}, + + /* Input */ + {"MIC", NULL, "Headset Mic"}, +}; + +static const struct snd_soc_dapm_route rockchip_sound_dmic_routes[] = { + /* Input */ + {"DMic", NULL, "Int Mic"}, +}; + +static const struct snd_soc_dapm_route rockchip_sound_max98357a_routes[] = { + /* Output */ + {"Speakers", NULL, "Speaker"}, +}; + +static const struct snd_soc_dapm_route rockchip_sound_rt5514_routes[] = { + /* Input */ + {"DMIC1L", NULL, "Int Mic"}, + {"DMIC1R", NULL, "Int Mic"}, +}; + +struct rockchip_sound_route { + const struct snd_soc_dapm_route *routes; + int num_routes; +}; + +static const struct rockchip_sound_route rockchip_routes[] = { + [DAILINK_CDNDP] = { + .routes = rockchip_sound_cdndp_routes, + .num_routes = ARRAY_SIZE(rockchip_sound_cdndp_routes), + }, + [DAILINK_DA7219] = { + .routes = rockchip_sound_da7219_routes, + .num_routes = ARRAY_SIZE(rockchip_sound_da7219_routes), + }, + [DAILINK_DMIC] = { + .routes = rockchip_sound_dmic_routes, + .num_routes = ARRAY_SIZE(rockchip_sound_dmic_routes), + }, + [DAILINK_MAX98357A] = { + .routes = rockchip_sound_max98357a_routes, + .num_routes = ARRAY_SIZE(rockchip_sound_max98357a_routes), + }, + [DAILINK_RT5514] = { + .routes = rockchip_sound_rt5514_routes, + .num_routes = ARRAY_SIZE(rockchip_sound_rt5514_routes), + }, + [DAILINK_RT5514_DSP] = {}, +}; + static int rockchip_sound_codec_node_match(struct device_node *np_codec) { int i; @@ -412,6 +455,7 @@ static int rockchip_sound_of_parse_dais(struct device *dev, struct device_node *np_cpu, *np_cpu0, *np_cpu1; struct device_node *np_codec; struct snd_soc_dai_link *dai; + struct snd_soc_dapm_route *routes; int i, index;
card->dai_link = devm_kzalloc(dev, sizeof(rockchip_dais), @@ -419,9 +463,16 @@ static int rockchip_sound_of_parse_dais(struct device *dev, if (!card->dai_link) return -ENOMEM;
+ routes = devm_kzalloc(dev, sizeof(rockchip_routes), + GFP_KERNEL); + if (!routes) + return -ENOMEM; + card->dapm_routes = routes; + np_cpu0 = of_parse_phandle(dev->of_node, "rockchip,cpu", 0); np_cpu1 = of_parse_phandle(dev->of_node, "rockchip,cpu", 1);
+ card->num_dapm_routes = 0; card->num_links = 0; for (i = 0; i < ARRAY_SIZE(rockchip_dais); i++) { np_codec = of_parse_phandle(dev->of_node, @@ -449,6 +500,11 @@ static int rockchip_sound_of_parse_dais(struct device *dev, dai->codec_of_node = np_codec; dai->platform_of_node = np_cpu; dai->cpu_of_node = np_cpu; + + memcpy(routes + card->num_dapm_routes, + rockchip_routes[index].routes, + rockchip_routes[index].num_routes * sizeof(*routes)); + card->num_dapm_routes += rockchip_routes[index].num_routes; }
return 0;
On Mon, Sep 18, 2017 at 07:18:01PM +0800, Jeffy Chen wrote:
Currently we are using a fixed list of dapm routes.
Init dapm routes dynamically when parsing dailinks, since we are supporting optional codecs.
This doesn't apply against current code, please check and resend.
Hi Mark,
On 09/19/2017 08:28 PM, Mark Brown wrote:
On Mon, Sep 18, 2017 at 07:18:01PM +0800, Jeffy Chen wrote:
Currently we are using a fixed list of dapm routes.
Init dapm routes dynamically when parsing dailinks, since we are supporting optional codecs.
This doesn't apply against current code, please check and resend.
i rebased these patches to for-next 20170919, but nothing changed...
but i found my other pending patch (https://patchwork.kernel.org/patch/9958055) might conflict to this, i'll send a new series to put all my patches together and solve the conflict...
sorry for the trouble..
Hi Mark,
On 09/19/2017 08:19 PM, Mark Brown wrote:
On Mon, Sep 18, 2017 at 07:17:59PM +0800, Jeffy Chen wrote:
Add dapm route for DP codec.
This is a resend of a patch you posted earlier in the same day?
sorry, this is a resend of yesterday patches, to correct the wrong the wrong patch tag("Asoc") to "ASoC"
participants (3)
-
jeffy
-
Jeffy Chen
-
Mark Brown