From: Jeffy Chen <jeffy.chen@rock-chips.com> To: linux-kernel@vger.kernel.org, dgreid@chromium.org, heiko@sntech.de Cc: briannorris@chromium.org, mengdong.lin@linux.intel.com, mka@chromium.org, lars@metafoo.de, dianders@chromium.org, Jeffy Chen <jeffy.chen@rock-chips.com>, Jaroslav Kysela <perex@perex.cz>, alsa-devel@alsa-project.org, linux-rockchip@lists.infradead.org, Mark Brown <broonie@kernel.org>, Takashi Iwai <tiwai@suse.com>, Liam Girdwood <lgirdwood@gmail.com>, linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 7/9] ASoC: rockchip: Add support for DP codec Date: Tue, 22 Aug 2017 15:57:26 +0800 [thread overview] Message-ID: <20170822075729.8438-8-jeffy.chen@rock-chips.com> (raw) In-Reply-To: <20170822075729.8438-1-jeffy.chen@rock-chips.com> Add support for optional cdn dp codec. Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> --- Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: None sound/soc/rockchip/Kconfig | 1 + sound/soc/rockchip/rk3399_gru_sound.c | 59 +++++++++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/sound/soc/rockchip/Kconfig b/sound/soc/rockchip/Kconfig index c84487805876..8f0d0d8d34e6 100644 --- a/sound/soc/rockchip/Kconfig +++ b/sound/soc/rockchip/Kconfig @@ -68,6 +68,7 @@ config SND_SOC_RK3399_GRU_SOUND select SND_SOC_RT5514 select SND_SOC_DA7219 select SND_SOC_RT5514_SPI + select SND_SOC_HDMI_CODEC help Say Y or M here if you want to add support multiple codecs for SoC audio on Rockchip RK3399 GRU boards. diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index d532336871d7..8ffae1934b94 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -223,6 +223,45 @@ static int rockchip_sound_da7219_init(struct snd_soc_pcm_runtime *rtd) return 0; } +static int rockchip_sound_cdndp_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + struct snd_soc_dai *codec_dai = rtd->codec_dai; + int mclk, ret; + + /* in bypass mode, the mclk has to be one of the frequencies below */ + switch (params_rate(params)) { + case 8000: + case 16000: + case 24000: + case 32000: + case 48000: + case 64000: + case 96000: + mclk = 12288000; + break; + case 11025: + case 22050: + case 44100: + case 88200: + mclk = 11289600; + break; + default: + return -EINVAL; + } + + ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk, + SND_SOC_CLOCK_OUT); + if (ret < 0) { + dev_err(codec_dai->dev, "Can't set cpu clock out %d\n", ret); + return ret; + } + + return 0; +} + static const struct snd_soc_ops rockchip_sound_max98357a_ops = { .hw_params = rockchip_sound_max98357a_hw_params, }; @@ -235,6 +274,10 @@ static const struct snd_soc_ops rockchip_sound_da7219_ops = { .hw_params = rockchip_sound_da7219_hw_params, }; +static struct snd_soc_ops rockchip_sound_cdndp_ops = { + .hw_params = rockchip_sound_cdndp_hw_params, +}; + static struct snd_soc_card rockchip_sound_card = { .name = "rk3399-gru-sound", .owner = THIS_MODULE, @@ -247,6 +290,7 @@ static struct snd_soc_card rockchip_sound_card = { }; enum { + DAILINK_CDNDP, DAILINK_DA7219, DAILINK_MAX98357A, DAILINK_RT5514, @@ -254,6 +298,7 @@ enum { }; static const char * const dailink_compat[] = { + [DAILINK_CDNDP] = "rockchip,rk3399-cdn-dp", [DAILINK_DA7219] = "dlg,da7219", [DAILINK_MAX98357A] = "maxim,max98357a", [DAILINK_RT5514] = "realtek,rt5514-i2c", @@ -261,6 +306,14 @@ static const char * const dailink_compat[] = { }; static const struct snd_soc_dai_link rockchip_dais[] = { + [DAILINK_CDNDP] = { + .name = "DP", + .stream_name = "DP PCM", + .codec_dai_name = "i2s-hifi", + .ops = &rockchip_sound_cdndp_ops, + .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBS_CFS, + }, [DAILINK_DA7219] = { .name = "DA7219", .stream_name = "DA7219 PCM", @@ -311,7 +364,7 @@ static int rockchip_sound_codec_node_match(struct device_node *np_codec) static int rockchip_sound_of_parse_dais(struct device *dev, struct snd_soc_card *card) { - struct device_node *np_cpu; + struct device_node *np_cpu, *np_cpu0, *np_cpu1; struct device_node *np_codec; struct snd_soc_dai_link *dai; int i, index; @@ -321,7 +374,8 @@ static int rockchip_sound_of_parse_dais(struct device *dev, if (!card->dai_link) return -ENOMEM; - np_cpu = of_parse_phandle(dev->of_node, "rockchip,cpu", 0); + np_cpu0 = of_parse_phandle(dev->of_node, "rockchip,cpu", 0); + np_cpu1 = of_parse_phandle(dev->of_node, "rockchip,cpu", 1); card->num_links = 0; for (i = 0; i < ARRAY_SIZE(rockchip_dais); i++) { @@ -337,6 +391,7 @@ static int rockchip_sound_of_parse_dais(struct device *dev, if (index < 0) continue; + np_cpu = (index == DAILINK_CDNDP) ? np_cpu1 : np_cpu0; if (!np_cpu) { dev_err(dev, "Missing 'rockchip,cpu' for %s\n", rockchip_dais[index].name); -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: jeffy.chen@rock-chips.com (Jeffy Chen) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 7/9] ASoC: rockchip: Add support for DP codec Date: Tue, 22 Aug 2017 15:57:26 +0800 [thread overview] Message-ID: <20170822075729.8438-8-jeffy.chen@rock-chips.com> (raw) In-Reply-To: <20170822075729.8438-1-jeffy.chen@rock-chips.com> Add support for optional cdn dp codec. Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> --- Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: None sound/soc/rockchip/Kconfig | 1 + sound/soc/rockchip/rk3399_gru_sound.c | 59 +++++++++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/sound/soc/rockchip/Kconfig b/sound/soc/rockchip/Kconfig index c84487805876..8f0d0d8d34e6 100644 --- a/sound/soc/rockchip/Kconfig +++ b/sound/soc/rockchip/Kconfig @@ -68,6 +68,7 @@ config SND_SOC_RK3399_GRU_SOUND select SND_SOC_RT5514 select SND_SOC_DA7219 select SND_SOC_RT5514_SPI + select SND_SOC_HDMI_CODEC help Say Y or M here if you want to add support multiple codecs for SoC audio on Rockchip RK3399 GRU boards. diff --git a/sound/soc/rockchip/rk3399_gru_sound.c b/sound/soc/rockchip/rk3399_gru_sound.c index d532336871d7..8ffae1934b94 100644 --- a/sound/soc/rockchip/rk3399_gru_sound.c +++ b/sound/soc/rockchip/rk3399_gru_sound.c @@ -223,6 +223,45 @@ static int rockchip_sound_da7219_init(struct snd_soc_pcm_runtime *rtd) return 0; } +static int rockchip_sound_cdndp_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + struct snd_soc_dai *codec_dai = rtd->codec_dai; + int mclk, ret; + + /* in bypass mode, the mclk has to be one of the frequencies below */ + switch (params_rate(params)) { + case 8000: + case 16000: + case 24000: + case 32000: + case 48000: + case 64000: + case 96000: + mclk = 12288000; + break; + case 11025: + case 22050: + case 44100: + case 88200: + mclk = 11289600; + break; + default: + return -EINVAL; + } + + ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk, + SND_SOC_CLOCK_OUT); + if (ret < 0) { + dev_err(codec_dai->dev, "Can't set cpu clock out %d\n", ret); + return ret; + } + + return 0; +} + static const struct snd_soc_ops rockchip_sound_max98357a_ops = { .hw_params = rockchip_sound_max98357a_hw_params, }; @@ -235,6 +274,10 @@ static const struct snd_soc_ops rockchip_sound_da7219_ops = { .hw_params = rockchip_sound_da7219_hw_params, }; +static struct snd_soc_ops rockchip_sound_cdndp_ops = { + .hw_params = rockchip_sound_cdndp_hw_params, +}; + static struct snd_soc_card rockchip_sound_card = { .name = "rk3399-gru-sound", .owner = THIS_MODULE, @@ -247,6 +290,7 @@ static struct snd_soc_card rockchip_sound_card = { }; enum { + DAILINK_CDNDP, DAILINK_DA7219, DAILINK_MAX98357A, DAILINK_RT5514, @@ -254,6 +298,7 @@ enum { }; static const char * const dailink_compat[] = { + [DAILINK_CDNDP] = "rockchip,rk3399-cdn-dp", [DAILINK_DA7219] = "dlg,da7219", [DAILINK_MAX98357A] = "maxim,max98357a", [DAILINK_RT5514] = "realtek,rt5514-i2c", @@ -261,6 +306,14 @@ static const char * const dailink_compat[] = { }; static const struct snd_soc_dai_link rockchip_dais[] = { + [DAILINK_CDNDP] = { + .name = "DP", + .stream_name = "DP PCM", + .codec_dai_name = "i2s-hifi", + .ops = &rockchip_sound_cdndp_ops, + .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBS_CFS, + }, [DAILINK_DA7219] = { .name = "DA7219", .stream_name = "DA7219 PCM", @@ -311,7 +364,7 @@ static int rockchip_sound_codec_node_match(struct device_node *np_codec) static int rockchip_sound_of_parse_dais(struct device *dev, struct snd_soc_card *card) { - struct device_node *np_cpu; + struct device_node *np_cpu, *np_cpu0, *np_cpu1; struct device_node *np_codec; struct snd_soc_dai_link *dai; int i, index; @@ -321,7 +374,8 @@ static int rockchip_sound_of_parse_dais(struct device *dev, if (!card->dai_link) return -ENOMEM; - np_cpu = of_parse_phandle(dev->of_node, "rockchip,cpu", 0); + np_cpu0 = of_parse_phandle(dev->of_node, "rockchip,cpu", 0); + np_cpu1 = of_parse_phandle(dev->of_node, "rockchip,cpu", 1); card->num_links = 0; for (i = 0; i < ARRAY_SIZE(rockchip_dais); i++) { @@ -337,6 +391,7 @@ static int rockchip_sound_of_parse_dais(struct device *dev, if (index < 0) continue; + np_cpu = (index == DAILINK_CDNDP) ? np_cpu1 : np_cpu0; if (!np_cpu) { dev_err(dev, "Missing 'rockchip,cpu' for %s\n", rockchip_dais[index].name); -- 2.11.0
next prev parent reply other threads:[~2017-08-22 7:58 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-08-22 7:57 [PATCH v5 0/9] ASoC: rockchip: Parse dai links from dts Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 1/9] ASoC: rockchip: Remove obsolete dmic-delay Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 10:32 ` Mark Brown 2017-08-22 10:32 ` Mark Brown 2017-08-22 11:01 ` jeffy 2017-08-22 11:01 ` jeffy 2017-08-22 11:01 ` jeffy 2017-08-22 7:57 ` [PATCH v5 2/9] ASoC: soc-core: Allow searching dai driver name in snd_soc_find_dai Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 12:47 ` Applied "ASoC: soc-core: Allow searching dai driver name in snd_soc_find_dai" to the asoc tree Mark Brown 2017-08-22 12:47 ` Mark Brown 2017-08-22 13:24 ` [PATCH v5 2/9] ASoC: soc-core: Allow searching dai driver name in snd_soc_find_dai Donglin Peng 2017-08-22 14:02 ` Mark Brown 2017-08-22 14:15 ` Donglin Peng 2017-08-22 14:21 ` Mark Brown 2017-08-22 14:26 ` Takashi Iwai 2017-08-22 14:26 ` Takashi Iwai 2017-08-22 14:31 ` Mark Brown 2017-08-22 14:39 ` jeffy 2017-08-22 14:39 ` jeffy 2017-08-22 7:57 ` [PATCH v5 3/9] ASoC: rockchip: Use codec of_node and dai_name for rt5514 dsp Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 4/9] arm64: dts: rockchip: Add rt5514 dsp for Gru Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 5/9] arm64: dts: rockchip: Update rt5514 devices' compatible " Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 6/9] ASoC: rockchip: Parse dai links from dts Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 9:08 ` Donglin Peng 2017-08-22 9:08 ` Donglin Peng 2017-08-22 9:25 ` jeffy 2017-08-22 9:25 ` jeffy 2017-08-22 7:57 ` Jeffy Chen [this message] 2017-08-22 7:57 ` [PATCH v5 7/9] ASoC: rockchip: Add support for DP codec Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 8/9] ASoC: rockchip: Add support for DMIC codec Jeffy Chen 2017-08-22 7:57 ` Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 9/9] dt-bindings: ASoC: rockchip: Update description of rockchip,codec Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 9/9] dt-bindings: ASoC: rockchip: Update description of rockchip, codec Jeffy Chen 2017-08-22 7:57 ` [PATCH v5 9/9] dt-bindings: ASoC: rockchip: Update description of rockchip,codec Jeffy Chen
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170822075729.8438-8-jeffy.chen@rock-chips.com \ --to=jeffy.chen@rock-chips.com \ --cc=alsa-devel@alsa-project.org \ --cc=briannorris@chromium.org \ --cc=broonie@kernel.org \ --cc=dgreid@chromium.org \ --cc=dianders@chromium.org \ --cc=heiko@sntech.de \ --cc=lars@metafoo.de \ --cc=lgirdwood@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-rockchip@lists.infradead.org \ --cc=mengdong.lin@linux.intel.com \ --cc=mka@chromium.org \ --cc=perex@perex.cz \ --cc=tiwai@suse.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.