From patchwork Sat Jan 9 23:38:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Nazzareno Trimarchi X-Patchwork-Id: 7993871 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.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 00D08BEEE5 for ; Sat, 9 Jan 2016 23:39:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 1D59720142 for ; Sat, 9 Jan 2016 23:39:43 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 565C220295 for ; Sat, 9 Jan 2016 23:39:41 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 154CA2608B4; Sun, 10 Jan 2016 00:39:40 +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.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, NO_DNS_FOR_FROM,RCVD_IN_DNSWL_NONE,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id F3E252605EA; Sun, 10 Jan 2016 00:38:19 +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 4D2E126055C; Sun, 10 Jan 2016 00:38:18 +0100 (CET) Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by alsa0.perex.cz (Postfix) with ESMTP id 402AB26055E for ; Sun, 10 Jan 2016 00:38:11 +0100 (CET) Received: by mail-wm0-f45.google.com with SMTP id f206so174360804wmf.0 for ; Sat, 09 Jan 2016 15:38:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=GK5AEHyg9G7EglU90i2kl1iyi/6RJ7suqOQSIJuQcC4=; b=i3m9Jh2kgI6uM19IITb/cy3Ix1Kq8ZWPZceJ5bDpTkO8jTd1zw8Xnino5/3LsE7+sD xHcspvizVdCCLDL9Zv7AnPwMsPcriMWscIgdOh8XkkbW9O9VSe3wsONsQMT5RjG+TKFp roPU7DFvH6RhYuVee56Pm3HGlobB3Q1XupX7a+Z5l8ueuJCU8Z1UmklJws6erJfjiHAE 0g9rq+v1NMoKJIubgay8MUanBz/I3dL9RnMdEoX0z8ABWVx6VA1IydlLYzKYcE6/8Hun Mn0CLN+qoBuF6Xmjr1izsQ/OwxlOWeecYGnFnRA/IrJsShwZgp9RIetdxFtGvaSWkXYs cU7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=GK5AEHyg9G7EglU90i2kl1iyi/6RJ7suqOQSIJuQcC4=; b=UE7WzzBSSkZ4l3X5+hAl+ymXCQbHMyXPPQ0Dp//g2D3mr1l9xNulqOer2ma0+Mf4FC j9pL0W3e3uzV8NmJiJhmM0lhT2IFy5yZcsZ3UBhMM7Qad/cJHBeMelur12O2aRsOUN7H CbvFMC7mUV8lGV60wEixaqCHXeqGVnUu9H/z6j22q7Mfmu22fQcLPWZHrS2UK1RCvfAQ tZwmT1ykLQ4DiI1c8Pund5XFGpHg/BCPoGxWByGNp+Zf+sp6O6gU+i1FrsKINV6y3UhV 6m//wOLuWdCuWU6jVUCIh+wWqbNDJa1bR03PtHfyzojzJYmKwjYcH2LSX7UTQroIiEwU ia8g== X-Gm-Message-State: ALoCoQmZIQ5d6/HkppQapRWWY1CpozbqbkjGZ0/BJiq6NAngKza2l+UNf1OgAdNkfLYIr0PPPexUW1fakwFCPAGerj8q0Hnj+g== X-Received: by 10.194.192.71 with SMTP id he7mr12120557wjc.82.1452382690947; Sat, 09 Jan 2016 15:38:10 -0800 (PST) Received: from panicking.lan (93-34-54-119.ip48.fastwebnet.it. [93.34.54.119]) by smtp.gmail.com with ESMTPSA id ei9sm4858901wjd.40.2016.01.09.15.38.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 09 Jan 2016 15:38:10 -0800 (PST) From: Michael Trimarchi To: broonie@kernel.org, lgirdwood@gmail.com Date: Sun, 10 Jan 2016 00:38:05 +0100 Message-Id: <1452382685-18009-4-git-send-email-michael@amarulasolutions.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1452382685-18009-1-git-send-email-michael@amarulasolutions.com> References: <1452382685-18009-1-git-send-email-michael@amarulasolutions.com> Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, michael@amarulasolutions.com Subject: [alsa-devel] [RFC PATCH 3/3] ASoC: pcm179x: Add support for pcm1795 and pcm1796 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 Signed-off-by: Michael Trimarchi --- sound/soc/codecs/pcm179x.c | 51 ++++++++++++++++++++++++++++++++++++++++++---- sound/soc/codecs/pcm179x.h | 14 ++++++++----- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c index a56c7b7..c4f61d0 100644 --- a/sound/soc/codecs/pcm179x.c +++ b/sound/soc/codecs/pcm179x.c @@ -74,8 +74,26 @@ struct pcm179x_private { struct regmap *regmap; unsigned int format; unsigned int rate; +#define PCM1795 1 + unsigned int codec_model; }; +static int pcm179x_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_codec *codec = dai->codec; + struct pcm179x_private *priv = snd_soc_codec_get_drvdata(codec); + u64 formats = PCM1792A_FORMATS; + + if (priv->codec_model == PCM1795) + formats = PCM1795_FORMATS; + + snd_pcm_hw_constraint_mask64(substream->runtime, + SNDRV_PCM_HW_PARAM_FORMAT, formats); + + return 0; +} + static int pcm179x_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int format) { @@ -114,8 +132,10 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream, switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) { case SND_SOC_DAIFMT_RIGHT_J: switch (params_width(params)) { - case 24: case 32: + val = 1; + break; + case 24: val = 2; break; case 16: @@ -127,8 +147,10 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream, break; case SND_SOC_DAIFMT_I2S: switch (params_width(params)) { - case 24: case 32: + val = 4; + break; + case 24: val = 5; break; case 16: @@ -154,6 +176,7 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream, } static const struct snd_soc_dai_ops pcm179x_dai_ops = { + .startup = pcm179x_startup, .set_fmt = pcm179x_set_dai_fmt, .hw_params = pcm179x_hw_params, .digital_mute = pcm179x_digital_mute, @@ -189,13 +212,19 @@ static struct snd_soc_dai_driver pcm179x_dai = { .stream_name = "Playback", .channels_min = 2, .channels_max = 2, - .rates = PCM1792A_RATES, - .formats = PCM1792A_FORMATS, }, + .rates = PCM179X_RATES, + .formats = PCM179X_FORMATS, }, .ops = &pcm179x_dai_ops, }; +static const unsigned int codec_model = PCM1795; + static const struct of_device_id pcm179x_of_match[] = { { .compatible = "ti,pcm1792a", }, + { .compatible = "ti,pcm1796", }, + { .compatible = "ti,pcm1795", + .data = &codec_model, + }, { } }; MODULE_DEVICE_TABLE(of, pcm179x_of_match); @@ -222,8 +251,19 @@ static struct snd_soc_codec_driver soc_codec_dev_pcm179x = { static int pcm179x_spi_probe(struct spi_device *spi) { struct pcm179x_private *pcm179x; + struct device *dev = &spi->dev; + struct device_node *np = spi->dev.of_node; + const unsigned int *codec_model = NULL; int ret; + if (np) { + const struct of_device_id *of_id; + + of_id = of_match_device(pcm179x_of_match, dev); + if (of_id) + codec_model = of_id->data; + } + pcm179x = devm_kzalloc(&spi->dev, sizeof(struct pcm179x_private), GFP_KERNEL); if (!pcm179x) @@ -238,6 +278,9 @@ static int pcm179x_spi_probe(struct spi_device *spi) return ret; } + if (codec_model) + pcm179x->codec_model = *codec_model; + return snd_soc_register_codec(&spi->dev, &soc_codec_dev_pcm179x, &pcm179x_dai, 1); } diff --git a/sound/soc/codecs/pcm179x.h b/sound/soc/codecs/pcm179x.h index c6fdc06..d4b384d 100644 --- a/sound/soc/codecs/pcm179x.h +++ b/sound/soc/codecs/pcm179x.h @@ -17,11 +17,15 @@ #ifndef __PCM179X_H__ #define __PCM179X_H__ -#define PCM1792A_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_8000_48000 | \ - SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \ - SNDRV_PCM_RATE_192000) +#define PCM179X_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_8000_48000 | \ + SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \ + SNDRV_PCM_RATE_192000) -#define PCM1792A_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \ - SNDRV_PCM_FMTBIT_S16_LE) +#define PCM179X_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S16_LE) + +#define PCM1792A_FORMATS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE) + +#define PCM1795_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE) #endif