From patchwork Tue Nov 24 07:31:54 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zidan Wang X-Patchwork-Id: 7687941 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.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id BD1729F4F5 for ; Tue, 24 Nov 2015 07:30:04 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D111520783 for ; Tue, 24 Nov 2015 07:30:03 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 9A57920763 for ; Tue, 24 Nov 2015 07:30:02 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 3157D265AC9; Tue, 24 Nov 2015 08:30:01 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Status: No, score=-2.6 required=5.0 tests=BAD_ENC_HEADER,BAYES_00, RCVD_IN_DNSWL_LOW, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id C5FF22659A4; Tue, 24 Nov 2015 08:29: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 16F5B2659E7; Tue, 24 Nov 2015 08:29:52 +0100 (CET) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0124.outbound.protection.outlook.com [65.55.169.124]) by alsa0.perex.cz (Postfix) with ESMTP id 63F32265906 for ; Tue, 24 Nov 2015 08:29:44 +0100 (CET) Received: from CH1PR03CA010.namprd03.prod.outlook.com (10.255.156.155) by BY1PR0301MB1256.namprd03.prod.outlook.com (10.161.203.28) with Microsoft SMTP Server (TLS) id 15.1.331.20; Tue, 24 Nov 2015 07:29:41 +0000 Received: from BN1BFFO11FD026.protection.gbl (10.255.156.132) by CH1PR03CA010.outlook.office365.com (10.255.156.155) with Microsoft SMTP Server (TLS) id 15.1.331.20 via Frontend Transport; Tue, 24 Nov 2015 07:29:40 +0000 Authentication-Results: spf=permerror (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: PermError (protection.outlook.com: domain of freescale.com used an invalid SPF mechanism) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD026.mail.protection.outlook.com (10.58.144.89) with Microsoft SMTP Server (TLS) id 15.1.331.11 via Frontend Transport; Tue, 24 Nov 2015 07:29:40 +0000 Received: from b50113.ap.freescale.net (b50113.ap.freescale.net [10.192.241.29]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id tAO7Ta6n018278; Tue, 24 Nov 2015 00:29:37 -0700 From: Zidan Wang To: Date: Tue, 24 Nov 2015 15:31:54 +0800 Message-ID: X-Mailer: git-send-email 1.9.1 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD026; 1:Ha8iIYjUhU6S8HxFXja2Nrkvm8QatdGqrLmYeQ84/fbC/tc3DCILjTLmkefSSKNF4wrDQ1bI8jzuYWA2xg1i30u/9SzLZFwVoyAnuFal+/MLJPgH67BKJytqYWhBL6AItOy3RTgiC47LldCQIT/kKKvH4CecF+ejegLVKFM0VGbqBD23O8jfYCESmcZ+qqK1Y4CTtqkRHJlfCCQwdXZYs6u8vhXOoD0vAYfIeYFPHapFQ2nLv2R1zAJwm3Tu05JQAHwtxgox4ikRBUtmdFLoAwFbxFA3QcgJVXN0PhTwzIZyPDOi99EPSxipyEdgK1fzdVl4sX1JALqpA3Td6/1H+fGvz6dQiJm2mll9MDkmZryZ3gWrWEsR6w1X62DsWpjQEkPC2u6dIoPNiWVxTLNpHVkAQSpo2Df6LZkbPR8sjd0= X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(448002)(199003)(189002)(92566002)(85326001)(19580395003)(47776003)(48376002)(106466001)(87936001)(81156007)(50226001)(50986999)(19580405001)(5001960100002)(107886002)(189998001)(110136002)(97736004)(5007970100001)(77096005)(11100500001)(33646002)(86362001)(5003940100001)(5008740100001)(36756003)(118296001)(4001430100002)(6806005)(229853001)(104016004)(2351001)(50466002)(575784001)(586003); DIR:OUT; SFP:1102; SCL:1; SRVR:BY1PR0301MB1256; H:tx30smr01.am.freescale.net; FPR:; SPF:PermError; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1256; 2:+aNygBlCTXDY1ivtfEzNM/ND38qfHrYbyr6xCKvEzX1QbLKJRCIh2E5UFPFclhJf5GHkfKTxPY3tUS2BvMyvsLC0xFtnaLNH1Lv7wAPtT4m/TD3f6txVuNFqZLJGvlUeJn72C+cbyVkKfFVcZum48A==; 3:Z+YUCpdaPhperknRHOdloqIyVGum34MaQrOg9UoCy3bV6sI5VyGEL4sFVtjQctrcRbzEz2NutwN19lO55oRgctbsyIRRm7SwyQBI9PdmEM0j2F8uAQ9qkjTM9pjVRbotMZB1Rcg0ceHW0X4D2hoPLdpR5RCZN7GKwGqC0JOl5828Gv4jPnx+OIdu7mejfrTFmZ/qKpHs9+uELRs/JrIuz1n4JGjSvcMcAlXiwqL6qvo=; 25:NiZnmXYRJ4fua1KHgASWowCt4hcb4zIaQMqzpYpgRMRMO7UAE3l2JHTu255XSi3KtitMizCT4KAhWejyoRnhkLGsjv/6KP6hMsgjYJQqua0P8IDOGkr2eUdkhujZ3nggeUp44HlHfw+OoP0gtqdIpSnqx9lzJi8lWeD2Q3WDhDrlT6z8onww2Jmeg0dQtc5QBhG7I5fJOwEvJlHSTpREPkxIWT7kXy87vmz5gpqO9CNKM8fdifLs5wzoewdGxJOIpIUfdBGuVySM57B0NvOHwg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0301MB1256; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1256; 20:Tx2D8FM6CL7ryYalv7hm49AOfv+eCYe2MYLzAjXDIqHvrLfdtyBWFJ0lzSeVaqG0X6llPpD8Ksg2/Rd/LwHWlc2Pvj6MOgAEsEN9TYbGIkm2DZKPowdjT+/TCH+zR114CkgeabFnJMTkMvWmkbBEz8gEyJuveCYi0m7qHw3TafiglkBUWFxvA8RxNw0DuYcg4TRmUtW0B6/3Z6TI45B+8C122d9dNxYfLDb8/Lrv56R0uLvMPLFK7op7rQc6hpjjmQjIVFusFSAtSUkx7R0CG3ATUpsXCWe5uHSrUgryqK0PBdMvlJ0lxyXy/GqUC+6QWzbiXLpKIMmn0GGrsHRnj7/nG1mv3JsscWUW3ulLBvw=; 4:MNOqNEkqyplCnXHpTCF5S+L+gWTnYanJnWKRwARM4O1gQTKAgXKCQo5mMjXNwPoY8o/9WggJSTnxVbxo8jdJh/5jwjiV9UClV3tHYx3YKyTyVSQZWy5+/D7HFNkOvKqImL3IyD7WI3OfpmJFAFEnmq2HsWn9hZdOSp8XujMB3ioQPSavQU+jbcTr+WBwW5ue4DSYXgWvskY9zaHm36KOhsAFHfIAFRRR5g1eV2dd7IkZ9I7g2/BCtzKxHGOvojyTP/Jf3/S01l+We7bF7Ci/ONk5s9ILlW3+KJMnH9bRUtbY86OKfOlsxIn2PuTLBbCav0RNKbJ9wDk23qoL4ttonItQBj9fo/knRWjcP2lWX51lYfeeNIZdcoUUCKgRabS5wv2Mp84Dx6GhctG5g1ipSYYOxXtYI3xHFXtYtkysy8t+gnPPI3A5Mdfzmhrlf9oZ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(10201501046); SRVR:BY1PR0301MB1256; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0301MB1256; X-Forefront-PRVS: 0770F75EA9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0301MB1256; 23:ptRK8hFZmd37cLoauPBenTDXQ4iJ2l0pLf8iKwb?= =?us-ascii?Q?d+0r5rkXfa2v6B87PSsLcRmTvIAdHgXK90r86rQ8BeCbDdga/W8ii/2g4jEi?= =?us-ascii?Q?hJeV5sApSEb06mu+3nnb9ZIF87XN6oe/sY6kJH7GUj4xk0UKaPKgHxXQHK6p?= =?us-ascii?Q?iUoKT6PfmE6RhF5c9dtX3kf43W1Q6JFusB1/d1R4i8A6+UO+XdTJ6CXPiZjp?= =?us-ascii?Q?4mQkogtNsPWvnpQeBtH5ibS36Xw3qaeQZTYsZtER4Mt+RHGaPGKhobDYwP5+?= =?us-ascii?Q?cTi8u6/4EPGM/nwx2LSKb2Zmf7jiEuDkuLAkDCVNdxdrE2M2AggGCmQ3oHSy?= =?us-ascii?Q?A0MHyXnaXdFTEvhMCBlehwqnukcy/ho2YaflVfVVy4Wl3G5ZQgMTbtdC9qVN?= =?us-ascii?Q?PX9Kn5JyMcAcj47pdzEo2Ny7XKHqWLjOfZVNUPeBpdRrqWZLB5xSu855wUNK?= =?us-ascii?Q?5BoOljmCEVDKxezCMIoVw7LkNNe8pcZetQf5lwRJ29JTnUbUbAzqo0Q42RMM?= =?us-ascii?Q?Co4Ou/GmCy0RGxTb6ROBXsuGl7Vb4G4joFSBIB/T0v75oL0JuPyD6wyHJLrs?= =?us-ascii?Q?1aKIHx+iYc7088p0Y3OM9egFZyAv+P47F9vtbjx4tInjsauJ4I2OA5R6JHRJ?= =?us-ascii?Q?BcUWPSC/WcvaZWCWPug8r71AZv+uuETSxLZQcNkENjLUWUG7wOeM9AkcQQbq?= =?us-ascii?Q?NF8/V/XoSz4YaAvQTFzAlHexoCBZ5LT8173MQx0vT+s4M4qeAcXRwpLOxaZm?= =?us-ascii?Q?prRqy51glXpQJ/cV6uvZT8VKYgR5Gj+pAEzQvbzSbtOLGFcSoFwzQnNql/wN?= =?us-ascii?Q?ffIJf0EthPnhHuLX3j9z2zPyLQ2EhueJUQm/oILYU0ZkD/h4Jy0zTK1P2x8c?= =?us-ascii?Q?NIsm8Wdg8Tzizwsg7qAv8OF9UcGLCrSiMvlyF/GNpb1g6E/vGo18LZBNbCMh?= =?us-ascii?Q?aRRLQQntz9l1UXV2M7JELH+PINaMG8REx9SkdltslHR2bQTjtT6zG50n+d4r?= =?us-ascii?Q?TGNQFNP0oZ4CuOEO2BH/inExL3ZEFu0C4EsfWOH7nJ2aSnw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0301MB1256; 5:pxu6ionzFCnpUNLEQ8eHdbBG3IVxOIrIrkhWWhSqFco31prXrJ6eIXB67W++tiDiPDKgo8Hib8eCtl9Nm2YSNDuDNeC/Sse9wiGSdFYjJA0BRkiRL38Uamnaq2g5uB3Ec7YCmvulA7W3sS3t2OYU4g==; 24:QLLgSjCqhmjorOlgRwtW9xycQ3X+2qMGcqXUNtypLjQgWEuCTKQpGjMK/qOrDvqWdzYhkrCGNQ0JAYTsRqBkQmYGhLSim4WJc92NBs168FY= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2015 07:29:40.4665 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0301MB1256 Cc: alsa-devel@alsa-project.org, broonie@kernel.org, timur@tabi.org, Zidan Wang , Xiubo.Lee@gmail.com Subject: [alsa-devel] [PATCH 1/2] ASoC: fsl_sai: add tdm slots operation support 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: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP Add tdm slots operation support. If tdm slots and slot width have been configured in machine driver, we should use these values. Otherwise, using relevant channels and word length to set slots and slot width. SAI will generate BCLK depends on sample rate, slots and slot width. And there may be unused BCLK cycles before each LRCLK transition. Signed-off-by: Zidan Wang Acked-by: Nicolin Chen --- sound/soc/fsl/fsl_sai.c | 31 +++++++++++++++++++++++++------ sound/soc/fsl/fsl_sai.h | 3 +++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 4b042fd..c01322c 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -126,6 +126,17 @@ out: return IRQ_HANDLED; } +static int fsl_sai_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask, + u32 rx_mask, int slots, int slot_width) +{ + struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); + + sai->slots = slots; + sai->slot_width = slot_width; + + return 0; +} + static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai *cpu_dai, int clk_id, unsigned int freq, int fsl_dir) { @@ -395,11 +406,19 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, unsigned int channels = params_channels(params); u32 word_width = snd_pcm_format_width(params_format(params)); u32 val_cr4 = 0, val_cr5 = 0; + u32 slots = (channels == 1) ? 2 : channels; + u32 slot_width = word_width; int ret; + if (sai->slots) + slots = sai->slots; + + if (sai->slot_width) + slot_width = sai->slot_width; + if (!sai->is_slave_mode) { ret = fsl_sai_set_bclk(cpu_dai, tx, - 2 * word_width * params_rate(params)); + slots * slot_width * params_rate(params)); if (ret) return ret; @@ -411,21 +430,20 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, sai->mclk_streams |= BIT(substream->stream); } - } if (!sai->is_dsp_mode) - val_cr4 |= FSL_SAI_CR4_SYWD(word_width); + val_cr4 |= FSL_SAI_CR4_SYWD(slot_width); - val_cr5 |= FSL_SAI_CR5_WNW(word_width); - val_cr5 |= FSL_SAI_CR5_W0W(word_width); + val_cr5 |= FSL_SAI_CR5_WNW(slot_width); + val_cr5 |= FSL_SAI_CR5_W0W(slot_width); if (sai->is_lsb_first) val_cr5 |= FSL_SAI_CR5_FBT(0); else val_cr5 |= FSL_SAI_CR5_FBT(word_width - 1); - val_cr4 |= FSL_SAI_CR4_FRSZ(channels); + val_cr4 |= FSL_SAI_CR4_FRSZ(slots); /* * For SAI master mode, when Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will @@ -592,6 +610,7 @@ static void fsl_sai_shutdown(struct snd_pcm_substream *substream, static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = { .set_sysclk = fsl_sai_set_dai_sysclk, .set_fmt = fsl_sai_set_dai_fmt, + .set_tdm_slot = fsl_sai_set_dai_tdm_slot, .hw_params = fsl_sai_hw_params, .hw_free = fsl_sai_hw_free, .trigger = fsl_sai_trigger, diff --git a/sound/soc/fsl/fsl_sai.h b/sound/soc/fsl/fsl_sai.h index b95fbc3..d9ed7be 100644 --- a/sound/soc/fsl/fsl_sai.h +++ b/sound/soc/fsl/fsl_sai.h @@ -143,6 +143,9 @@ struct fsl_sai { unsigned int mclk_id[2]; unsigned int mclk_streams; + unsigned int slots; + unsigned int slot_width; + struct snd_dmaengine_dai_dma_data dma_params_rx; struct snd_dmaengine_dai_dma_data dma_params_tx; };