From 3655e45471b5ed3d018334fc5ebbbcd1c99284ec Mon Sep 17 00:00:00 2001 From: Li Dongqiang Date: Wed, 1 Nov 2017 10:16:10 +0800 Subject: [PATCH] ASoC: Add gva codec driver Change-Id: Ifc1e49750e9b203681780b5400f9f1d7acf6afe4 Signed-off-by: Li Dongqiang --- .../devicetree/bindings/sound/gva-codec.txt | 14 +++ sound/soc/codecs/Kconfig | 3 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/gva_codec.c | 93 +++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/gva-codec.txt create mode 100644 sound/soc/codecs/gva_codec.c diff --git a/Documentation/devicetree/bindings/sound/gva-codec.txt b/Documentation/devicetree/bindings/sound/gva-codec.txt new file mode 100644 index 000000000000..20749e42a5e5 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/gva-codec.txt @@ -0,0 +1,14 @@ + GVA audio virtual codec + +This device support generic audio link. + +Required properties: + + - compatible : "rockchip,gva-codec" + +Example: + +codec: gva_codec { + compatible = "rockchip,gva-codec"; + #sound-dai-cells = <0>; +}; diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 01f3a8c92899..a4e1086ad013 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -502,6 +502,9 @@ config SND_SOC_ES8396 config SND_SOC_GTM601 tristate 'GTM601 UMTS modem audio codec' +config SND_SOC_GVA_CODEC + tristate "gva codec" + config SND_SOC_ICS43432 tristate diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index f0c6aa16b841..83fe9409683d 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -65,6 +65,7 @@ snd-soc-es8328-spi-objs := es8328-spi.o snd-soc-es8396-objs := es8396.o snd-soc-fm1288-objs := fm1288.o snd-soc-gtm601-objs := gtm601.o +snd-soc-gva-codec-objs := gva_codec.o snd-soc-ics43432-objs := ics43432.o snd-soc-isabelle-objs := isabelle.o snd-soc-jz4740-codec-objs := jz4740.o @@ -272,6 +273,7 @@ obj-$(CONFIG_SND_SOC_ES8328_SPI)+= snd-soc-es8328-spi.o obj-$(CONFIG_SND_SOC_ES8396) += snd-soc-es8396.o obj-$(CONFIG_SND_SOC_FM1288) += snd-soc-fm1288.o obj-$(CONFIG_SND_SOC_GTM601) += snd-soc-gtm601.o +obj-$(CONFIG_SND_SOC_GVA_CODEC) += snd-soc-gva-codec.o obj-$(CONFIG_SND_SOC_ICS43432) += snd-soc-ics43432.o obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o diff --git a/sound/soc/codecs/gva_codec.c b/sound/soc/codecs/gva_codec.c new file mode 100644 index 000000000000..581689d3ca8f --- /dev/null +++ b/sound/soc/codecs/gva_codec.c @@ -0,0 +1,93 @@ +/* + * Driver for virtual codec + * + * Copyright (C) 2017 Rockchip Electronics Co., Ltd. + * Author: Li Dongqiang + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include + +#include + +static const struct snd_soc_dapm_widget gva_codec_widgets[] = { + SND_SOC_DAPM_INPUT("RX"), + SND_SOC_DAPM_OUTPUT("TX"), +}; + +static const struct snd_soc_dapm_route gva_codec_routes[] = { + { "Capture", NULL, "RX" }, + { "TX", NULL, "Playback" }, +}; + +#define gva_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \ + SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE) + +static struct snd_soc_dai_driver gva_codec_dai = { + .name = "gva_codec", + .playback = { + .stream_name = "Playback", + .channels_min = 1, + .channels_max = 2, + .rates = SNDRV_PCM_RATE_8000_192000, + .formats = gva_FORMATS, + }, + .capture = { + .stream_name = "Capture", + .channels_min = 1, + .channels_max = 8, + .rates = SNDRV_PCM_RATE_8000_192000, + .formats = gva_FORMATS, + }, +}; + +static struct snd_soc_codec_driver soc_codec_dev_gva_codec = { + .dapm_widgets = gva_codec_widgets, + .num_dapm_widgets = ARRAY_SIZE(gva_codec_widgets), + .dapm_routes = gva_codec_routes, + .num_dapm_routes = ARRAY_SIZE(gva_codec_routes), +}; + +static int gva_codec_probe(struct platform_device *pdev) +{ + return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_gva_codec, + &gva_codec_dai, 1); +} + +static int gva_codec_remove(struct platform_device *pdev) +{ + snd_soc_unregister_codec(&pdev->dev); + + return 0; +} + +static const struct of_device_id gva_codec_of_match[] = { + { .compatible = "rockchip,gva-codec", }, + {}, +}; +MODULE_DEVICE_TABLE(of, gva_codec_of_match); + +static struct platform_driver gva_codec_driver = { + .driver = { + .name = "gva_codec", + .of_match_table = of_match_ptr(gva_codec_of_match), + }, + .probe = gva_codec_probe, + .remove = gva_codec_remove, +}; + +module_platform_driver(gva_codec_driver); + +MODULE_AUTHOR("Li Dongqiang "); +MODULE_DESCRIPTION("ASoC gva virtual driver"); +MODULE_LICENSE("GPL");