From patchwork Thu Mar 27 09:49:04 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Mack X-Patchwork-Id: 3897151 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 3628E9F334 for ; Thu, 27 Mar 2014 09:49:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 55D8020213 for ; Thu, 27 Mar 2014 09:49:38 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 279A1201C0 for ; Thu, 27 Mar 2014 09:49:37 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 3A88D2652FC; Thu, 27 Mar 2014 10:49:36 +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_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id F34DD26524F; Thu, 27 Mar 2014 10:49:25 +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 7ED2B26524F; Thu, 27 Mar 2014 10:49:24 +0100 (CET) Received: from mail-ee0-f50.google.com (mail-ee0-f50.google.com [74.125.83.50]) by alsa0.perex.cz (Postfix) with ESMTP id 981A1261717 for ; Thu, 27 Mar 2014 10:49:17 +0100 (CET) Received: by mail-ee0-f50.google.com with SMTP id c13so2591043eek.23 for ; Thu, 27 Mar 2014 02:49:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=nuohHVyZXcbeHU58tW0RY9MbW8cUaRUtME/z3OCqG4A=; b=SGw9ZkaoUmkLyiKhayHiicH8aWoI9v4Oc8kRlPKwBLzE+VNvNETilPVA8yBDxahtnl 7TCNWkPfXQr6W0zzuSZYX0T54a5pp6BAfbCxHIICvfZ6LynVknXV/FAq0Q1pc4qBLxr+ GebxzL/EgpOvAeuY9IRn5RRA2I6eJ4zpnF42/QbMGodQuR8xFstaqpe0jBA+w1trzdvv f+tfjLfj02PCHem5rE7jLO3Qwa9JeS2WSBD2SMvDvG4QePECnPD3/iolmMsr+HwCAnmF zY2hR28fcyhe2LyZNSyYw675Pw11LOb9ZbxRRy7+XicodNjrS75WP7crnRex77PD1hau nNYA== X-Received: by 10.14.225.132 with SMTP id z4mr17676eep.92.1395913757289; Thu, 27 Mar 2014 02:49:17 -0700 (PDT) Received: from tamtam.fritz.box (p5099deeb.dip0.t-ipconnect.de. [80.153.222.235]) by mx.google.com with ESMTPSA id u46sm3236339eel.1.2014.03.27.02.49.15 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Mar 2014 02:49:16 -0700 (PDT) From: Daniel Mack To: broonie@kernel.org Date: Thu, 27 Mar 2014 10:49:04 +0100 Message-Id: <1395913744-29720-1-git-send-email-zonque@gmail.com> X-Mailer: git-send-email 1.8.5.3 Cc: peter.ujfalusi@ti.com, alsa-devel@alsa-project.org, Daniel Mack Subject: [alsa-devel] [PATCH v2] ASoC: davinci-mcasp: set up channel status bits for S/PDIF mode 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 In DIT (S/PDIF) mode, program the transmitted user bits to reflect the configured sample rate, along with some other details. Signed-off-by: Daniel Mack --- Thanks to Peter for the review and bearing with my confusion :) sound/soc/davinci/davinci-mcasp.c | 49 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c index 375e197..1fbded0 100644 --- a/sound/soc/davinci/davinci-mcasp.c +++ b/sound/soc/davinci/davinci-mcasp.c @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -576,8 +577,12 @@ static int mcasp_i2s_hw_param(struct davinci_mcasp *mcasp, int stream) } /* S/PDIF */ -static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp) +static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp, + unsigned int rate) { + u32 val = 0; + u8 *bytes = (u8*) &val; + /* Set the TX format : 24 bit right rotation, 32 bit slot, Pad 0 and LSB first */ mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, TXROT(6) | TXSSZ(15)); @@ -599,6 +604,46 @@ static int mcasp_dit_hw_param(struct davinci_mcasp *mcasp) /* Enable the DIT */ mcasp_set_bits(mcasp, DAVINCI_MCASP_TXDITCTL_REG, DITEN); + /* Set S/PDIF channel status bits */ + bytes[0] = IEC958_AES0_CON_NOT_COPYRIGHT; + bytes[1] = IEC958_AES1_CON_PCM_CODER; + + switch (rate) { + case 22050: + bytes[3] |= IEC958_AES3_CON_FS_22050; + break; + case 24000: + bytes[3] |= IEC958_AES3_CON_FS_24000; + break; + case 32000: + bytes[3] |= IEC958_AES3_CON_FS_32000; + break; + case 44100: + bytes[3] |= IEC958_AES3_CON_FS_44100; + break; + case 48000: + bytes[3] |= IEC958_AES3_CON_FS_48000; + break; + case 88200: + bytes[3] |= IEC958_AES3_CON_FS_88200; + break; + case 96000: + bytes[3] |= IEC958_AES3_CON_FS_96000; + break; + case 176400: + bytes[3] |= IEC958_AES3_CON_FS_176400; + break; + case 192000: + bytes[3] |= IEC958_AES3_CON_FS_192000; + break; + default: + printk(KERN_WARNING "unsupported sampling rate: %d\n", rate); + return -EINVAL; + } + + mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRA_REG, val); + mcasp_set_reg(mcasp, DAVINCI_MCASP_DITCSRB_REG, val); + return 0; } @@ -634,7 +679,7 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream, return ret; if (mcasp->op_mode == DAVINCI_MCASP_DIT_MODE) - ret = mcasp_dit_hw_param(mcasp); + ret = mcasp_dit_hw_param(mcasp, params_rate(params)); else ret = mcasp_i2s_hw_param(mcasp, substream->stream);