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 <[email protected]> Cc: Jingoo Han <[email protected]> Cc: Krzysztof Kozlowski <[email protected]> Cc: Maxime Ripard <[email protected]> Cc: Vinod Koul <[email protected]> Cc: Dan Williams <[email protected]> Cc: Liam Girdwood <[email protected]> Cc: Mark Brown <[email protected]> Cc: Jaroslav Kysela <[email protected]> Cc: Takashi Iwai <[email protected]> Cc: Wei Xu <[email protected]> Cc: Rob Herring <[email protected]> Cc: Andy Green <[email protected]> Signed-off-by: Andy Green <[email protected]> [jstultz: Forward ported to mainline, split out and reworked] Signed-off-by: John Stultz <[email protected]> --- 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("[email protected]"); +MODULE_DESCRIPTION("Hisilicon HDMI codec driver"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:hi6210-hdmi-audio"); -- 1.9.1

