From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Looijmans Subject: Re: Query on Audio DMA using DMAEngine Date: Tue, 02 Jul 2013 08:02:00 +0200 Message-ID: <51D26CD8.7020709@topic.nl> References: <083BC63EECB6FD41B8E81CF7FD87CC0F2E4F1488@DLEE08.ent.ti.com> <51D01F31.3010602@metafoo.de> <51D11D64.3070805@topic.nl> <51D22CAE.2020302@ti.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040707030306020707020103" Return-path: Received: from atl4mhob04.myregisteredsite.com (atl4mhob04.myregisteredsite.com [209.17.115.42]) by alsa0.perex.cz (Postfix) with ESMTP id B5AB22617B4 for ; Tue, 2 Jul 2013 08:02:02 +0200 (CEST) Received: from mailpod.hostingplatform.com ([10.30.71.204]) by atl4mhob04.myregisteredsite.com (8.14.4/8.14.4) with ESMTP id r62621UP023481 for ; Tue, 2 Jul 2013 02:02:01 -0400 In-Reply-To: <51D22CAE.2020302@ti.com> 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 To: Joel Fernandes Cc: alsa-devel@alsa-project.org, lars@metafoo.de List-Id: alsa-devel@alsa-project.org This is a multi-part message in MIME format. --------------040707030306020707020103 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 07/02/2013 03:28 AM, Joel Fernandes wrote: > On 07/01/2013 01:10 AM, Mike Looijmans wrote: >> With the cyclic DMA, I can capture 16 channels of 32-bit audio at 51kHz, >> simultaneously playback 2 channels and write the audio data to an SD card on the >> OMAP-L138. Before that change, it wasn't even possible to capture 4 channels >> without overruns. > > Sweet! Any particular reason why it wasn't merged in vs the existing ping-pong code? I've posted questions and other stuff concerning the McASP/OMAP1, but there was very little interest, so I supposed the chipset was on its way out and there wasn't any point in maintaining it. >> I can mail you the 2.6.37 code, it isn't worthy for direct inclusion but may >> save you some time to figure things out. > > Certainly could take a look. Could you share it? Thank you. I attached the source files. There are a lot of changes in the files that are product specific hacks to get my things working in the cheapest way possible (cheap meaning spending little effort). I also included the "davinci-mcasp.c" code. Because the customer wanted a bigger buffer, I set up the McASP FIFO to transfer larger blocks. The DMA is limited to 64k words, so increasing the size of a "word" is a sure way to transfer more data. It's also good for bursting transfers, which I'm told the DDR memory likes much better. I was unable to measure any effect (positive nor negative) of that though. The larger blocks aren't needed if you're satisfied with much smaller buffers, which for normal purposed should be just fine. Mike. --------------040707030306020707020103 Content-Type: application/x-gzip; name="davinci-2.6.37-cyclic-dma.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="davinci-2.6.37-cyclic-dma.tar.gz" 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 3/q3/q1/69/697y//wDz1j2CAMgAAA== --------------040707030306020707020103 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --------------040707030306020707020103--