From patchwork Thu Nov 13 12:14:22 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krishna Mohan Dani X-Patchwork-Id: 5296091 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 272FBC11AC for ; Thu, 13 Nov 2014 12:17:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D87F8201FA for ; Thu, 13 Nov 2014 12:17:23 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 52B84201F5 for ; Thu, 13 Nov 2014 12:17:22 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 5332226048E; Thu, 13 Nov 2014 13:17:16 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id 8D6C4265218; Thu, 13 Nov 2014 13:16:52 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 4542026048E; Thu, 13 Nov 2014 13:16:50 +0100 (CET) Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by alsa0.perex.cz (Postfix) with ESMTP id 85CF0265218 for ; Thu, 13 Nov 2014 13:16:07 +0100 (CET) Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NEZ001V48QTH2B0@mailout1.samsung.com> for alsa-devel@alsa-project.org; Thu, 13 Nov 2014 21:16:05 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.126]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 04.FC.17016.501A4645; Thu, 13 Nov 2014 21:16:05 +0900 (KST) X-AuditID: cbfee68d-f79296d000004278-e3-5464a105e59a Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 8D.8B.09430.501A4645; Thu, 13 Nov 2014 21:16:05 +0900 (KST) Received: from krishnamd-ubuntu.sisodomain.com ([107.108.73.88]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NEZ007948O1UL50@mmp1.samsung.com>; Thu, 13 Nov 2014 21:16:05 +0900 (KST) From: Krishna Mohan Dani To: linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, alsa-devel@alsa-project.org Date: Thu, 13 Nov 2014 17:44:22 +0530 Message-id: <1415880864-2246-3-git-send-email-krishna.md@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1415880864-2246-1-git-send-email-krishna.md@samsung.com> References: <1415880864-2246-1-git-send-email-krishna.md@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOLMWRmVeSWpSXmKPExsWyRsSkTpd1YUqIQXe7icWVi4eYLKY+fMJm cf7WJHaL3gVX2Sw2Pb7GajHj/D4mBzaPDZ+b2Dx2zrrL7rFpVSebx+Yl9R59W1YxenzeJBfA FsVlk5Kak1mWWqRvl8CVsXJLE2PBG8OKNYvfszUw7tLsYuTkkBAwkZi8t5EFwhaTuHBvPRuI LSSwlFFibgtnFyMHWM3yRo4uRi6g8CJGiVd7j7FAOP1MEpc6noI1sAkYSsw72sQMYosIZEmc /7+VCcRmFgiROH7nCCOILSzgIfFz9zewOIuAqsSTQy3sIDavgKvEwjeHWSCWKUjMmWQDEuYU cJOYuambHeIeV4l9S25D3TmdXaKtoQhijIDEt8mHoFplJTYdYIYokZQ4uOIGywRG4QWMDKsY RVMLkguKk9KLDPWKE3OLS/PS9ZLzczcxAsP79L9nvTsYbx+wPsQowMGoxMP7giUlRIg1say4 MvcQoynQhonMUqLJ+cAoyiuJNzQ2M7IwNTE1NjK3NFMS51WU+hksJJCeWJKanZpakFoUX1Sa k1p8iJGJg1OqgfHqfm6zSFd3R7XVJ9Rnegme4fK4eNpg9v/M8tXJCl1yx4UL30+4ncnhf2o2 k+zTK9FKG4I9b0yfbTfzlfd8hpMnF+edPL2w2bQs9XzUR563hdfjjaVFTtSf7bw8vbQr+37L rKvTMzIOhr3xNWk+naeVvrPv5+pvzbkfZyZJfCh696n33Qy5ljolluKMREMt5qLiRADLW/bv agIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrMIsWRmVeSWpSXmKPExsVy+t9jAV3WhSkhBqc6tS2uXDzEZDH14RM2 i/O3JrFb9C64ymax6fE1VosZ5/cxObB5bPjcxOaxc9Zddo9NqzrZPDYvqffo27KK0ePzJrkA tqgGRpuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wcoDOU FMoSc0qBQgGJxcVK+naYJoSGuOlawDRG6PqGBMH1GBmggYQ1jBkrtzQxFrwxrFiz+D1bA+Mu zS5GDg4JAROJ5Y0cXYycQKaYxIV769m6GLk4hAQWMUq82nuMBcLpZ5K41PGUDaSKTcBQYt7R JmYQW0QgS+L8/61MIDazQIjE8TtHGEFsYQEPiZ+7v4HFWQRUJZ4camEHsXkFXCUWvjnMArFY QWLOJBuQMKeAm8TMTd1gJUJAJfuW3GaZwMi7gJFhFaNoakFyQXFSeq6RXnFibnFpXrpecn7u JkZwBD2T3sG4qsHiEKMAB6MSD+8LlpQQIdbEsuLK3EOMEhzMSiK8BsVAId6UxMqq1KL8+KLS nNTiQ4ymQEdNZJYSTc4HRndeSbyhsYm5qbGppYmFiZmlkjjvwVbrQCGB9MSS1OzU1ILUIpg+ Jg5OqQbGmR99z+1jCQ+YUN+env32w9nLDG9k2gJ0mZpqrtVqXdqTq3u6XLLrd/m2HD5j/joj 8c92LSXffA4qVhzk36iex3FfREZujfR77vb+HP0beo8OMGwK6Di5au+r7/8n3M/4KP6/zn/e Y4aqoJ0fXldFOyZd5Ttf53asUGDvqbrTL1PP9mbv956gxFKckWioxVxUnAgAbNpEkbYCAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: broonie@kernel.org, kgene.kim@samsung.com, Claude Youn Subject: [alsa-devel] [PATCH 2/4 V3] ASoC: Samsung: Add arndale_rt5631 machine driver X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP Adding machine driver to instantiate I2S based realtek's ALC5631 sound card on Arndale board. There are other variants of Audio Daughter Cards for Arndale Board for which support already exists but there is no support for Realtek's alc5631 codec hence support for ALC5631 based machine driver is being added. Signed-off-by: Claude Youn Signed-off-by: Krishna Mohan Dani --- sound/soc/samsung/Kconfig | 6 ++ sound/soc/samsung/Makefile | 2 + sound/soc/samsung/arndale_rt5631.c | 150 ++++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 sound/soc/samsung/arndale_rt5631.c diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig index 55a3869..80b5c61 100644 --- a/sound/soc/samsung/Kconfig +++ b/sound/soc/samsung/Kconfig @@ -239,3 +239,9 @@ config SND_SOC_ODROIDX2 select SND_SAMSUNG_I2S help Say Y here to enable audio support for the Odroid-X2/U3. + +config SND_SOC_ARNDALE_RT5631_ALC5631 + tristate "Audio support for RT5631(ALC5631) on Arndale Board" + depends on SND_SOC_SAMSUNG + select SND_SAMSUNG_I2S + select SND_SOC_RT5631 diff --git a/sound/soc/samsung/Makefile b/sound/soc/samsung/Makefile index 91505dd..31e3dba 100644 --- a/sound/soc/samsung/Makefile +++ b/sound/soc/samsung/Makefile @@ -45,6 +45,7 @@ snd-soc-lowland-objs := lowland.o snd-soc-littlemill-objs := littlemill.o snd-soc-bells-objs := bells.o snd-soc-odroidx2-max98090-objs := odroidx2_max98090.o +snd-soc-arndale-rt5631-objs := arndale_rt5631.o obj-$(CONFIG_SND_SOC_SAMSUNG_JIVE_WM8750) += snd-soc-jive-wm8750.o obj-$(CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o @@ -71,3 +72,4 @@ obj-$(CONFIG_SND_SOC_LOWLAND) += snd-soc-lowland.o obj-$(CONFIG_SND_SOC_LITTLEMILL) += snd-soc-littlemill.o obj-$(CONFIG_SND_SOC_BELLS) += snd-soc-bells.o obj-$(CONFIG_SND_SOC_ODROIDX2) += snd-soc-odroidx2-max98090.o +obj-$(CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631) += snd-soc-arndale-rt5631.o diff --git a/sound/soc/samsung/arndale_rt5631.c b/sound/soc/samsung/arndale_rt5631.c new file mode 100644 index 0000000..3495ad5 --- /dev/null +++ b/sound/soc/samsung/arndale_rt5631.c @@ -0,0 +1,150 @@ +/* + * arndale_rt5631.c + * + * Copyright (c) 2014, Insignal Co., Ltd. + * + * Author: Claude + * + * 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; either version 2 of the License, or (at your + * option) any later version. + */ + +#include +#include +#include + +#include +#include +#include +#include + +#include "i2s.h" + +static int arndale_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params) +{ + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + struct snd_soc_dai *codec_dai = rtd->codec_dai; + int rfs, ret; + unsigned long rclk; + + rfs = 256; + + rclk = params_rate(params) * rfs; + + ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_CDCLK, + 0, SND_SOC_CLOCK_OUT); + if (ret < 0) + return ret; + + ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_RCLKSRC_0, + 0, SND_SOC_CLOCK_OUT); + + if (ret < 0) + return ret; + + ret = snd_soc_dai_set_sysclk(codec_dai, 0, rclk, SND_SOC_CLOCK_OUT); + if (ret < 0) + return ret; + + return 0; +} + +static struct snd_soc_ops arndale_ops = { + .hw_params = arndale_hw_params, +}; + +static struct snd_soc_dai_link arndale_rt5631_dai[] = { + { + .name = "RT5631 HiFi", + .stream_name = "Primary", + .codec_dai_name = "rt5631-hifi", + .dai_fmt = SND_SOC_DAIFMT_I2S + | SND_SOC_DAIFMT_NB_NF + | SND_SOC_DAIFMT_CBS_CFS, + .ops = &arndale_ops, + }, +}; + +static struct snd_soc_card arndale_rt5631 = { + .name = "Arndale RT5631", + .dai_link = arndale_rt5631_dai, + .num_links = ARRAY_SIZE(arndale_rt5631_dai), +}; + +static int arndale_audio_probe(struct platform_device *pdev) +{ + int n, ret; + struct device_node *np = pdev->dev.of_node; + struct snd_soc_card *card = &arndale_rt5631; + + card->dev = &pdev->dev; + + for (n = 0; np && n < ARRAY_SIZE(arndale_rt5631_dai); n++) { + if (!arndale_rt5631_dai[n].cpu_dai_name) { + arndale_rt5631_dai[n].cpu_of_node = of_parse_phandle(np, + "samsung,audio-cpu", n); + + if (!arndale_rt5631_dai[n].cpu_of_node) { + dev_err(&pdev->dev, + "Property 'samsung,audio-cpu' missing or invalid\n"); + return -EINVAL; + } + } + if (!arndale_rt5631_dai[n].platform_name) + arndale_rt5631_dai[n].platform_of_node = + arndale_rt5631_dai[n].cpu_of_node; + + arndale_rt5631_dai[n].codec_name = NULL; + arndale_rt5631_dai[n].codec_of_node = of_parse_phandle(np, + "samsung,audio-codec", n); + if (!arndale_rt5631_dai[0].codec_of_node) { + dev_err(&pdev->dev, + "Property 'samsung,audio-codec' missing or invalid\n"); + return -EINVAL; + } + } + + ret = devm_snd_soc_register_card(card->dev, card); + + if (ret) + dev_err(&pdev->dev, "snd_soc_register_card() failed:%d\n", ret); + + return ret; +} + +static int arndale_audio_remove(struct platform_device *pdev) +{ + struct snd_soc_card *card = platform_get_drvdata(pdev); + + snd_soc_unregister_card(card); + + return 0; +} + +static const struct of_device_id samsung_arndale_rt5631_of_match[] = { + { .compatible = "samsung,arndale-rt5631", }, + { .compatible = "samsung,arndale-alc5631", }, + {}, +}; +MODULE_DEVICE_TABLE(of, samsung_arndale_rt5631_of_match); + +static struct platform_driver arndale_audio_driver = { + .driver = { + .name = "arndale-audio", + .owner = THIS_MODULE, + .pm = &snd_soc_pm_ops, + .of_match_table = of_match_ptr(samsung_arndale_rt5631_of_match), + }, + .probe = arndale_audio_probe, + .remove = arndale_audio_remove, +}; + +module_platform_driver(arndale_audio_driver); + +MODULE_AUTHOR("Claude "); +MODULE_DESCRIPTION("ALSA SoC Driver for Arndale Board"); +MODULE_LICENSE("GPL");