18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * ad73311.c -- ALSA Soc AD73311 codec support 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright: Analog Devices Inc. 68c2ecf20Sopenharmony_ci * Author: Cliff Cai <cliff.cai@analog.com> 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/init.h> 108c2ecf20Sopenharmony_ci#include <linux/slab.h> 118c2ecf20Sopenharmony_ci#include <linux/module.h> 128c2ecf20Sopenharmony_ci#include <linux/kernel.h> 138c2ecf20Sopenharmony_ci#include <linux/device.h> 148c2ecf20Sopenharmony_ci#include <sound/core.h> 158c2ecf20Sopenharmony_ci#include <sound/pcm.h> 168c2ecf20Sopenharmony_ci#include <sound/ac97_codec.h> 178c2ecf20Sopenharmony_ci#include <sound/initval.h> 188c2ecf20Sopenharmony_ci#include <sound/soc.h> 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#include "ad73311.h" 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistatic const struct snd_soc_dapm_widget ad73311_dapm_widgets[] = { 238c2ecf20Sopenharmony_ciSND_SOC_DAPM_INPUT("VINP"), 248c2ecf20Sopenharmony_ciSND_SOC_DAPM_INPUT("VINN"), 258c2ecf20Sopenharmony_ciSND_SOC_DAPM_OUTPUT("VOUTN"), 268c2ecf20Sopenharmony_ciSND_SOC_DAPM_OUTPUT("VOUTP"), 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistatic const struct snd_soc_dapm_route ad73311_dapm_routes[] = { 308c2ecf20Sopenharmony_ci { "Capture", NULL, "VINP" }, 318c2ecf20Sopenharmony_ci { "Capture", NULL, "VINN" }, 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci { "VOUTN", NULL, "Playback" }, 348c2ecf20Sopenharmony_ci { "VOUTP", NULL, "Playback" }, 358c2ecf20Sopenharmony_ci}; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_cistatic struct snd_soc_dai_driver ad73311_dai = { 388c2ecf20Sopenharmony_ci .name = "ad73311-hifi", 398c2ecf20Sopenharmony_ci .playback = { 408c2ecf20Sopenharmony_ci .stream_name = "Playback", 418c2ecf20Sopenharmony_ci .channels_min = 1, 428c2ecf20Sopenharmony_ci .channels_max = 1, 438c2ecf20Sopenharmony_ci .rates = SNDRV_PCM_RATE_8000, 448c2ecf20Sopenharmony_ci .formats = SNDRV_PCM_FMTBIT_S16_LE, }, 458c2ecf20Sopenharmony_ci .capture = { 468c2ecf20Sopenharmony_ci .stream_name = "Capture", 478c2ecf20Sopenharmony_ci .channels_min = 1, 488c2ecf20Sopenharmony_ci .channels_max = 1, 498c2ecf20Sopenharmony_ci .rates = SNDRV_PCM_RATE_8000, 508c2ecf20Sopenharmony_ci .formats = SNDRV_PCM_FMTBIT_S16_LE, }, 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistatic const struct snd_soc_component_driver soc_component_dev_ad73311 = { 548c2ecf20Sopenharmony_ci .dapm_widgets = ad73311_dapm_widgets, 558c2ecf20Sopenharmony_ci .num_dapm_widgets = ARRAY_SIZE(ad73311_dapm_widgets), 568c2ecf20Sopenharmony_ci .dapm_routes = ad73311_dapm_routes, 578c2ecf20Sopenharmony_ci .num_dapm_routes = ARRAY_SIZE(ad73311_dapm_routes), 588c2ecf20Sopenharmony_ci .idle_bias_on = 1, 598c2ecf20Sopenharmony_ci .use_pmdown_time = 1, 608c2ecf20Sopenharmony_ci .endianness = 1, 618c2ecf20Sopenharmony_ci .non_legacy_dai_naming = 1, 628c2ecf20Sopenharmony_ci}; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cistatic int ad73311_probe(struct platform_device *pdev) 658c2ecf20Sopenharmony_ci{ 668c2ecf20Sopenharmony_ci return devm_snd_soc_register_component(&pdev->dev, 678c2ecf20Sopenharmony_ci &soc_component_dev_ad73311, &ad73311_dai, 1); 688c2ecf20Sopenharmony_ci} 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_cistatic struct platform_driver ad73311_codec_driver = { 718c2ecf20Sopenharmony_ci .driver = { 728c2ecf20Sopenharmony_ci .name = "ad73311", 738c2ecf20Sopenharmony_ci }, 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci .probe = ad73311_probe, 768c2ecf20Sopenharmony_ci}; 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_cimodule_platform_driver(ad73311_codec_driver); 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("ASoC ad73311 driver"); 818c2ecf20Sopenharmony_ciMODULE_AUTHOR("Cliff Cai "); 828c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 83