Add codec driver for hi6210 hdmi audio output on hi6220 boards. This seems like a lot of code just to fill and register a snd_soc_dai_driver to 2 channel, 16bits, 48k. I suspect there's a better way.
Cc: Zhangfei Gao <zhangfei....@linaro.org> Cc: Jingoo Han <jg1....@samsung.com> Cc: Krzysztof Kozlowski <k.kozlow...@samsung.com> Cc: Maxime Ripard <maxime.rip...@free-electrons.com> Cc: Vinod Koul <vinod.k...@intel.com> Cc: Dan Williams <dan.j.willi...@intel.com> Cc: Liam Girdwood <lgirdw...@gmail.com> Cc: Mark Brown <broo...@kernel.org> Cc: Jaroslav Kysela <pe...@perex.cz> Cc: Takashi Iwai <ti...@suse.com> Cc: Wei Xu <xuw...@hisilicon.com> Cc: Rob Herring <robh...@kernel.org> Cc: Andy Green <a...@warmcat.com> Signed-off-by: Andy Green <andy.gr...@linaro.org> [jstultz: Forward ported to mainline, split out and reworked] Signed-off-by: John Stultz <john.stu...@linaro.org> --- v2: * Folded in fixes from kbuildbot * Split i2s and hdmi-card drivers up * Refactored and cut down to just be a codec driver sound/soc/hisilicon/Makefile | 3 +- sound/soc/hisilicon/hi6210-hdmi-codec.c | 68 +++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 sound/soc/hisilicon/hi6210-hdmi-codec.c diff --git a/sound/soc/hisilicon/Makefile b/sound/soc/hisilicon/Makefile index e8095e2..c253775 100644 --- a/sound/soc/hisilicon/Makefile +++ b/sound/soc/hisilicon/Makefile @@ -1 +1,2 @@ -obj-$(CONFIG_SND_I2S_HI6210_I2S) += hi6210-i2s.o +obj-$(CONFIG_SND_I2S_HI6210_I2S) += hi6210-i2s.o \ + hi6210-hdmi-codec.o diff --git a/sound/soc/hisilicon/hi6210-hdmi-codec.c b/sound/soc/hisilicon/hi6210-hdmi-codec.c new file mode 100644 index 0000000..5dd54e1 --- /dev/null +++ b/sound/soc/hisilicon/hi6210-hdmi-codec.c @@ -0,0 +1,68 @@ +/* + * linux/sound/soc/hisilicon/hi6210-hdmi-codec.c + * + * Copyright (C) 2015 Linaro, Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + */ + +#include <linux/module.h> +#include <sound/pcm.h> +#include <sound/soc.h> + +static struct snd_soc_dai_driver hi6210_hdmi_dai = { + .name = "hi6210_hdmi_dai", + .playback = { + .channels_min = 2, + .channels_max = 2, + .rates = SNDRV_PCM_RATE_48000, + .formats = SNDRV_PCM_FMTBIT_S16_LE, + }, +}; + +static struct snd_soc_codec_driver hi6210_hdmi_codec; + +static int hi6210_hdmi_probe(struct platform_device *pdev) +{ + int ret; + + ret = snd_soc_register_codec(&pdev->dev, &hi6210_hdmi_codec, + &hi6210_hdmi_dai, 1); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_codec failed (%d)\n", + ret); + return ret; + } + return 0; +} + +static int hi6210_hdmi_remove(struct platform_device *pdev) +{ + snd_soc_unregister_codec(&pdev->dev); + return 0; +} + +static const struct of_device_id hi6210_hdmi_dt_ids[] = { + { .compatible = "hisilicon,hi6210-hdmi-audio-codec" }, + { /* sentinel */ } +}; + +MODULE_DEVICE_TABLE(of, hi6210_hdmi_dt_ids); + +static struct platform_driver hi6210_hdmi_driver = { + .driver = { + .name = "hi6210-hdmi-audio", + .of_match_table = hi6210_hdmi_dt_ids, + }, + .probe = hi6210_hdmi_probe, + .remove = hi6210_hdmi_remove, +}; + +module_platform_driver(hi6210_hdmi_driver); + +MODULE_AUTHOR("andy.gr...@linaro.org"); +MODULE_DESCRIPTION("Hisilicon HDMI codec driver"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:hi6210-hdmi-audio"); -- 1.9.1