12874c5fdSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
20e77e784SCliff Cai /*
30e77e784SCliff Cai * ad73311.c -- ALSA Soc AD73311 codec support
40e77e784SCliff Cai *
5*b938b25fSGeert Uytterhoeven * Copyright: Analog Devices Inc.
60e77e784SCliff Cai * Author: Cliff Cai <cliff.cai@analog.com>
70e77e784SCliff Cai */
80e77e784SCliff Cai
90e77e784SCliff Cai #include <linux/init.h>
105a0e3ad6STejun Heo #include <linux/slab.h>
110e77e784SCliff Cai #include <linux/module.h>
120e77e784SCliff Cai #include <linux/kernel.h>
130e77e784SCliff Cai #include <linux/device.h>
140e77e784SCliff Cai #include <sound/core.h>
150e77e784SCliff Cai #include <sound/pcm.h>
160e77e784SCliff Cai #include <sound/ac97_codec.h>
170e77e784SCliff Cai #include <sound/initval.h>
180e77e784SCliff Cai #include <sound/soc.h>
190e77e784SCliff Cai
200e77e784SCliff Cai #include "ad73311.h"
210e77e784SCliff Cai
22827d22f1SMark Brown static const struct snd_soc_dapm_widget ad73311_dapm_widgets[] = {
23827d22f1SMark Brown SND_SOC_DAPM_INPUT("VINP"),
24827d22f1SMark Brown SND_SOC_DAPM_INPUT("VINN"),
25827d22f1SMark Brown SND_SOC_DAPM_OUTPUT("VOUTN"),
26827d22f1SMark Brown SND_SOC_DAPM_OUTPUT("VOUTP"),
27827d22f1SMark Brown };
28827d22f1SMark Brown
29827d22f1SMark Brown static const struct snd_soc_dapm_route ad73311_dapm_routes[] = {
30827d22f1SMark Brown { "Capture", NULL, "VINP" },
31827d22f1SMark Brown { "Capture", NULL, "VINN" },
32827d22f1SMark Brown
33827d22f1SMark Brown { "VOUTN", NULL, "Playback" },
34827d22f1SMark Brown { "VOUTP", NULL, "Playback" },
35827d22f1SMark Brown };
36827d22f1SMark Brown
37f0fba2adSLiam Girdwood static struct snd_soc_dai_driver ad73311_dai = {
38f0fba2adSLiam Girdwood .name = "ad73311-hifi",
390e77e784SCliff Cai .playback = {
400e77e784SCliff Cai .stream_name = "Playback",
410e77e784SCliff Cai .channels_min = 1,
420e77e784SCliff Cai .channels_max = 1,
430e77e784SCliff Cai .rates = SNDRV_PCM_RATE_8000,
440e77e784SCliff Cai .formats = SNDRV_PCM_FMTBIT_S16_LE, },
450e77e784SCliff Cai .capture = {
460e77e784SCliff Cai .stream_name = "Capture",
470e77e784SCliff Cai .channels_min = 1,
480e77e784SCliff Cai .channels_max = 1,
490e77e784SCliff Cai .rates = SNDRV_PCM_RATE_8000,
500e77e784SCliff Cai .formats = SNDRV_PCM_FMTBIT_S16_LE, },
510e77e784SCliff Cai };
520e77e784SCliff Cai
53be4b1c09SKuninori Morimoto static const struct snd_soc_component_driver soc_component_dev_ad73311 = {
54827d22f1SMark Brown .dapm_widgets = ad73311_dapm_widgets,
55827d22f1SMark Brown .num_dapm_widgets = ARRAY_SIZE(ad73311_dapm_widgets),
56827d22f1SMark Brown .dapm_routes = ad73311_dapm_routes,
57827d22f1SMark Brown .num_dapm_routes = ARRAY_SIZE(ad73311_dapm_routes),
58be4b1c09SKuninori Morimoto .idle_bias_on = 1,
59be4b1c09SKuninori Morimoto .use_pmdown_time = 1,
60be4b1c09SKuninori Morimoto .endianness = 1,
61827d22f1SMark Brown };
62f0fba2adSLiam Girdwood
ad73311_probe(struct platform_device * pdev)63f0fba2adSLiam Girdwood static int ad73311_probe(struct platform_device *pdev)
640e77e784SCliff Cai {
65be4b1c09SKuninori Morimoto return devm_snd_soc_register_component(&pdev->dev,
66be4b1c09SKuninori Morimoto &soc_component_dev_ad73311, &ad73311_dai, 1);
670e77e784SCliff Cai }
680e77e784SCliff Cai
69f0fba2adSLiam Girdwood static struct platform_driver ad73311_codec_driver = {
70f0fba2adSLiam Girdwood .driver = {
71370fd17dSMike Frysinger .name = "ad73311",
72f0fba2adSLiam Girdwood },
73f0fba2adSLiam Girdwood
74f0fba2adSLiam Girdwood .probe = ad73311_probe,
750e77e784SCliff Cai };
760e77e784SCliff Cai
775bbcc3c0SMark Brown module_platform_driver(ad73311_codec_driver);
7864089b84SMark Brown
790e77e784SCliff Cai MODULE_DESCRIPTION("ASoC ad73311 driver");
800e77e784SCliff Cai MODULE_AUTHOR("Cliff Cai ");
810e77e784SCliff Cai MODULE_LICENSE("GPL");
82