From patchwork Fri Sep 8 05:23:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 811318 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xpQmB1DWYz9sBZ for ; Fri, 8 Sep 2017 15:26:34 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CmigN/e7"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3xpQmB02znzDrYD for ; Fri, 8 Sep 2017 15:26:34 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CmigN/e7"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:400e:c00::243; helo=mail-pf0-x243.google.com; envelope-from=nicoleotsuka@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CmigN/e7"; dkim-atps=neutral Received: from mail-pf0-x243.google.com (mail-pf0-x243.google.com [IPv6:2607:f8b0:400e:c00::243]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3xpQkL3YyNzDq8f for ; Fri, 8 Sep 2017 15:24:57 +1000 (AEST) Received: by mail-pf0-x243.google.com with SMTP id q76so927475pfq.5 for ; Thu, 07 Sep 2017 22:24:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=9nwj8t35sTRfZBy4W/qH00ECayOdTNn3a9nb6TOjuWA=; b=CmigN/e7hmFviWBzS5fFyKUct/btZ+tXA515cKyqP7kgOVUcs7vGucH/rsFaax+SNa AcF5LZpxeFuqJQRw5JIhbLFFBPF2NmHIMtmzEDOlbqbQXXD/o6BFO2S0zK0XaZhxFT+m 2EwEcr4eL7tswvNA/2xnG0oRpK9zLoI1q0BiOaw3jQYYUEBvoP8dELT0iJtFMYeD2nxb 6P/s60eWu+swuhsOG08L2qKEgCUcJT0QPtsaMy+XuAJoM9UCu9HROR5ShNlI9rmrzKFe 9H8IaBXMXeX1JHDPasEj0LZ+MRs0SqThFIfs9dGuwIQGrmYD94LnKGTQyASUqQ1dsXBe KvEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=9nwj8t35sTRfZBy4W/qH00ECayOdTNn3a9nb6TOjuWA=; b=k6jmahYLqFuwOxC3krOJyFQ8WliWkQQ+wleNq3k9iABJcf7gp6Zz8IO4QBHQTPiB7y nqwCYobb1aQUXYwWlbJX3y9OFVoJBt0j2gcu019TVNqvaFM2jxoCL2C1sUiceGcSq9tY 7Hx2TP4aUznQIM0Ur0nUqCGNZT9z1FyC/R3ANXBp5zWsgB/ZTdP8TTRvC3PvWdRHNw+f 1e2MvCBIpUOxBlhYm4KLy0d/6QzWHWYe4/yyrnHLU8YYlqp+H3brJql7BqowJpdZKrNp G5fJNhkS4yIy0VwqpVZnwIRFDYq/WAK2dPpZvJoDJ9R+P30oZ9nCvoguukQ78ENRB+Fd cs3A== X-Gm-Message-State: AHPjjUja8oo1QIRzX0xtwEqyd3NQhEprNlpv0fa0ipBPmhQAe+qgR7pc gE3rd0/Qh3uDLQ== X-Google-Smtp-Source: ADKCNb5E3DaeH4gviRp5TqaytQOiMMB7gLXLtyRBSiJwH4i/7rGQ5HEAG46N8n/foipIKMiGY91VRw== X-Received: by 10.99.110.142 with SMTP id j136mr1840757pgc.390.1504848295459; Thu, 07 Sep 2017 22:24:55 -0700 (PDT) Received: from Asurada-CZ80.localdomain (thunderhill.nvidia.com. [216.228.112.22]) by smtp.gmail.com with ESMTPSA id q12sm1404799pgs.47.2017.09.07.22.24.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 07 Sep 2017 22:24:54 -0700 (PDT) From: Nicolin Chen To: broonie@kernel.org Subject: [PATCH] ASoC: fsl_ssi: Override bit clock rate based on slot number Date: Thu, 7 Sep 2017 22:23:43 -0700 Message-Id: <1504848223-3376-1-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.7.4 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alsa-devel@alsa-project.org, timur@tabi.org, arnaud.mouiche@invoxia.com, linux-kernel@vger.kernel.org, tiwai@suse.com, lgirdwood@gmail.com, caleb@crome.org, perex@perex.cz, mpa@pengutronix.de, max.krummenacher@toradex.com, lukma@denx.de, fabio.estevam@nxp.com, mail@maciej.szmigiero.name, linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" The set_sysclk() now is used to override the output bit clock rate. But this is not a common way to implement a set_dai_sysclk(). And this creates a problem when a general machine driver (simple-card for example) tries to do set_dai_sysclk() by passing an input clock rate for the baud clock instead of setting the bit clock rate as fsl_ssi driver expected. So this patch solves this problem by firstly removing set_sysclk() since the hw_params() can calculate the bit clock rate. Secondly, in order not to break those TDM use cases which previously might have been using set_sysclk() to override the bit clock rate, this patch changes the driver to override it based on the slot number. The patch also removes an obsolete comment of the dir parameter. Signed-off-by: Nicolin Chen Tested-by: Ɓukasz Majewski Tested-by: Lukasz Majewski --- sound/soc/fsl/fsl_ssi.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c index 64598d1..3657c88 100644 --- a/sound/soc/fsl/fsl_ssi.c +++ b/sound/soc/fsl/fsl_ssi.c @@ -197,12 +197,12 @@ struct fsl_ssi_soc_data { * @use_dma: DMA is used or FIQ with stream filter * @use_dual_fifo: DMA with support for both FIFOs used * @fifo_deph: Depth of the SSI FIFOs + * @slots: number of slots * @rxtx_reg_val: Specific register settings for receive/transmit configuration * * @clk: SSI clock * @baudclk: SSI baud clock for master mode * @baudclk_streams: Active streams that are using baudclk - * @bitclk_freq: bitclock frequency set by .set_dai_sysclk * * @dma_params_tx: DMA transmit parameters * @dma_params_rx: DMA receive parameters @@ -233,12 +233,12 @@ struct fsl_ssi_private { bool use_dual_fifo; bool has_ipg_clk_name; unsigned int fifo_depth; + unsigned int slots; struct fsl_ssi_rxtx_reg_val rxtx_reg_val; struct clk *clk; struct clk *baudclk; unsigned int baudclk_streams; - unsigned int bitclk_freq; /* regcache for volatile regs */ u32 regcache_sfcsr; @@ -700,8 +700,7 @@ static void fsl_ssi_shutdown(struct snd_pcm_substream *substream, * Note: This function can be only called when using SSI as DAI master * * Quick instruction for parameters: - * freq: Output BCLK frequency = samplerate * 32 (fixed) * channels - * dir: SND_SOC_CLOCK_OUT -> TxBCLK, SND_SOC_CLOCK_IN -> RxBCLK. + * freq: Output BCLK frequency = samplerate * 32 (fixed) * slots (or channels) */ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai, @@ -716,9 +715,9 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream, unsigned int freq; bool baudclk_is_used; - /* Prefer the explicitly set bitclock frequency */ - if (ssi_private->bitclk_freq) - freq = ssi_private->bitclk_freq; + /* Generate bit clock based on the slot or channel number */ + if (ssi_private->slots) + freq = ssi_private->slots * 32 * params_rate(hw_params); else freq = params_channels(hw_params) * 32 * params_rate(hw_params); @@ -805,16 +804,6 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream, return 0; } -static int fsl_ssi_set_dai_sysclk(struct snd_soc_dai *cpu_dai, - int clk_id, unsigned int freq, int dir) -{ - struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai); - - ssi_private->bitclk_freq = freq; - - return 0; -} - /** * fsl_ssi_hw_params - program the sample size * @@ -1121,6 +1110,8 @@ static int fsl_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask, regmap_update_bits(regs, CCSR_SSI_SCR, CCSR_SSI_SCR_SSIEN, val); + ssi_private->slots = slots; + return 0; } @@ -1191,7 +1182,6 @@ static const struct snd_soc_dai_ops fsl_ssi_dai_ops = { .hw_params = fsl_ssi_hw_params, .hw_free = fsl_ssi_hw_free, .set_fmt = fsl_ssi_set_dai_fmt, - .set_sysclk = fsl_ssi_set_dai_sysclk, .set_tdm_slot = fsl_ssi_set_dai_tdm_slot, .trigger = fsl_ssi_trigger, };