From 673d6ade785ab93e08a4f95f1bbd50410463f427 Mon Sep 17 00:00:00 2001 From: Chen Jinsen Date: Tue, 29 Oct 2019 11:00:17 +0800 Subject: [PATCH] ASoC: codecs: add support for rk312x codec Replace digital_mute with mute_stream Replace xxx_dai with asoc_rtd_to_xxx(rtd, i) Change-Id: I1679742e7f6abb4ad9d894828ddf3781fc1bc2bb Signed-off-by: Chen Jinsen Signed-off-by: Sugar Zhang --- sound/soc/codecs/Kconfig | 5 +++++ sound/soc/codecs/Makefile | 2 ++ sound/soc/codecs/rk312x_codec.c | 13 +++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index f48859fc090d..ac635611d4f2 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -150,6 +150,7 @@ config SND_SOC_ALL_CODECS imply SND_SOC_PCM5102A imply SND_SOC_PCM512x_I2C imply SND_SOC_PCM512x_SPI + imply SND_SOC_RK312X imply SND_SOC_RK3328 imply SND_SOC_RK817 imply SND_SOC_RT274 @@ -1021,6 +1022,10 @@ config SND_SOC_PCM512x_SPI select SND_SOC_PCM512x select REGMAP_SPI +config SND_SOC_RK312X + select REGMAP_MMIO + tristate "Rockchip RK312X CODEC" + config SND_SOC_RK3328 tristate "Rockchip RK3328 audio CODEC" select REGMAP_MMIO diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index 78c6539d73a1..dcdf176ac05c 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -155,6 +155,7 @@ snd-soc-pcm5102a-objs := pcm5102a.o snd-soc-pcm512x-objs := pcm512x.o snd-soc-pcm512x-i2c-objs := pcm512x-i2c.o snd-soc-pcm512x-spi-objs := pcm512x-spi.o +snd-soc-rk312x-objs := rk312x_codec.o snd-soc-rk3328-objs := rk3328_codec.o snd-soc-rk817-objs := rk817_codec.o snd-soc-rl6231-objs := rl6231.o @@ -465,6 +466,7 @@ obj-$(CONFIG_SND_SOC_PCM5102A) += snd-soc-pcm5102a.o obj-$(CONFIG_SND_SOC_PCM512x) += snd-soc-pcm512x.o obj-$(CONFIG_SND_SOC_PCM512x_I2C) += snd-soc-pcm512x-i2c.o obj-$(CONFIG_SND_SOC_PCM512x_SPI) += snd-soc-pcm512x-spi.o +obj-$(CONFIG_SND_SOC_RK312X) += snd-soc-rk312x.o obj-$(CONFIG_SND_SOC_RK3328) += snd-soc-rk3328.o obj-$(CONFIG_SND_SOC_RK817) += snd-soc-rk817.o obj-$(CONFIG_SND_SOC_RL6231) += snd-soc-rl6231.o diff --git a/sound/soc/codecs/rk312x_codec.c b/sound/soc/codecs/rk312x_codec.c index 085c20a73b16..0e3ac4008962 100644 --- a/sound/soc/codecs/rk312x_codec.c +++ b/sound/soc/codecs/rk312x_codec.c @@ -1425,7 +1425,7 @@ static int rk312x_hw_params(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_pcm_runtime *rtd = substream->private_data; - struct snd_soc_component *component = rtd->codec_dai->component; + struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component; struct rk312x_codec_priv *rk312x = rk312x_priv; unsigned int rate = params_rate(params); unsigned int div; @@ -1534,7 +1534,7 @@ static void rk312x_codec_unpop(struct work_struct *work) rk312x_codec_ctl_gpio(CODEC_SET_SPK, 1); } -static int rk312x_digital_mute(struct snd_soc_dai *dai, int mute) +static int rk312x_digital_mute(struct snd_soc_dai *dai, int mute, int stream) { if (mute) { @@ -1922,9 +1922,10 @@ static struct snd_soc_dai_ops rk312x_dai_ops = { .hw_params = rk312x_hw_params, .set_fmt = rk312x_set_dai_fmt, .set_sysclk = rk312x_set_dai_sysclk, - .digital_mute = rk312x_digital_mute, + .mute_stream = rk312x_digital_mute, .startup = rk312x_startup, .shutdown = rk312x_shutdown, + .no_capture_mute = 1, }; static struct snd_soc_dai_driver rk312x_dai[] = { @@ -2067,7 +2068,7 @@ static int rk312x_resume(struct snd_soc_component *component) if (rk312x_priv->codec_hp_det) { /* enable hp det interrupt */ snd_soc_component_write(component, RK312x_DAC_CTL, 0x08); - snd_soc_component_read(component, RK312x_DAC_CTL, &val); + val = snd_soc_component_read(component, RK312x_DAC_CTL); printk("0xa0 -- 0x%x\n", val); regmap_read(rk312x_priv->grf, GRF_ACODEC_CON, &val); regmap_write(rk312x_priv->grf, GRF_ACODEC_CON, 0x1f001f); @@ -2156,7 +2157,7 @@ static void rk312x_delay_workq(struct work_struct *work) DBG("GRF_ACODEC_CON 3334is 0x%x\n", val); /* enable rk 3128 codec_hp_det */ snd_soc_component_write(component, RK312x_DAC_CTL, 0x08); - snd_soc_component_read(component, RK312x_DAC_CTL, &val); + val = snd_soc_component_read(component, RK312x_DAC_CTL); DBG("0xa0 -- 0x%x\n", val); /* codec hp det once */ schedule_delayed_work(&rk312x_priv->hpdet_work, msecs_to_jiffies(100)); @@ -2187,7 +2188,7 @@ static int rk312x_probe(struct snd_soc_component *component) goto err__; } - snd_soc_component_read(component, RK312x_RESET, &val); + val = snd_soc_component_read(component, RK312x_RESET); if (val != rk312x_reg_defaults[RK312x_RESET]) { DBG("%s : codec register 0: %x is not a 0x00000003\n",