18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * simone.c -- ASoC audio for Simplemachines Sim.One board 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) 2010 Mika Westerberg 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Based on snappercl15 machine driver by Ryan Mallon. 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/init.h> 118c2ecf20Sopenharmony_ci#include <linux/module.h> 128c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 138c2ecf20Sopenharmony_ci#include <linux/soc/cirrus/ep93xx.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include <sound/core.h> 168c2ecf20Sopenharmony_ci#include <sound/pcm.h> 178c2ecf20Sopenharmony_ci#include <sound/soc.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include <asm/mach-types.h> 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ciSND_SOC_DAILINK_DEFS(hifi, 228c2ecf20Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("ep93xx-ac97")), 238c2ecf20Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CODEC("ac97-codec", "ac97-hifi")), 248c2ecf20Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_PLATFORM("ep93xx-ac97"))); 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistatic struct snd_soc_dai_link simone_dai = { 278c2ecf20Sopenharmony_ci .name = "AC97", 288c2ecf20Sopenharmony_ci .stream_name = "AC97 HiFi", 298c2ecf20Sopenharmony_ci SND_SOC_DAILINK_REG(hifi), 308c2ecf20Sopenharmony_ci}; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cistatic struct snd_soc_card snd_soc_simone = { 338c2ecf20Sopenharmony_ci .name = "Sim.One", 348c2ecf20Sopenharmony_ci .owner = THIS_MODULE, 358c2ecf20Sopenharmony_ci .dai_link = &simone_dai, 368c2ecf20Sopenharmony_ci .num_links = 1, 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistatic struct platform_device *simone_snd_ac97_device; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cistatic int simone_probe(struct platform_device *pdev) 428c2ecf20Sopenharmony_ci{ 438c2ecf20Sopenharmony_ci struct snd_soc_card *card = &snd_soc_simone; 448c2ecf20Sopenharmony_ci int ret; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci simone_snd_ac97_device = platform_device_register_simple("ac97-codec", 478c2ecf20Sopenharmony_ci -1, NULL, 0); 488c2ecf20Sopenharmony_ci if (IS_ERR(simone_snd_ac97_device)) 498c2ecf20Sopenharmony_ci return PTR_ERR(simone_snd_ac97_device); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci card->dev = &pdev->dev; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci ret = snd_soc_register_card(card); 548c2ecf20Sopenharmony_ci if (ret) { 558c2ecf20Sopenharmony_ci dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", 568c2ecf20Sopenharmony_ci ret); 578c2ecf20Sopenharmony_ci platform_device_unregister(simone_snd_ac97_device); 588c2ecf20Sopenharmony_ci } 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci return ret; 618c2ecf20Sopenharmony_ci} 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_cistatic int simone_remove(struct platform_device *pdev) 648c2ecf20Sopenharmony_ci{ 658c2ecf20Sopenharmony_ci struct snd_soc_card *card = platform_get_drvdata(pdev); 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci snd_soc_unregister_card(card); 688c2ecf20Sopenharmony_ci platform_device_unregister(simone_snd_ac97_device); 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci return 0; 718c2ecf20Sopenharmony_ci} 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_cistatic struct platform_driver simone_driver = { 748c2ecf20Sopenharmony_ci .driver = { 758c2ecf20Sopenharmony_ci .name = "simone-audio", 768c2ecf20Sopenharmony_ci }, 778c2ecf20Sopenharmony_ci .probe = simone_probe, 788c2ecf20Sopenharmony_ci .remove = simone_remove, 798c2ecf20Sopenharmony_ci}; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cimodule_platform_driver(simone_driver); 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("ALSA SoC Simplemachines Sim.One"); 848c2ecf20Sopenharmony_ciMODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>"); 858c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 868c2ecf20Sopenharmony_ciMODULE_ALIAS("platform:simone-audio"); 87