On Wed, Jun 11, 2014 at 11:11 PM, Emilio López <[email protected]> wrote:
> El 11/06/14 11:43, [email protected] escribió:
>
>> On Wed, Jun 11, 2014 at 10:25 AM, Chen-Yu Tsai <[email protected]> wrote:
>>>
>>> On Wed, Jun 11, 2014 at 10:23 PM, [email protected] <[email protected]>
>>> wrote:
>>>>
>>>> On Wed, Jun 11, 2014 at 10:17 AM, Chen-Yu Tsai <[email protected]> wrote:
>>>>>
>>>>> On Wed, Jun 11, 2014 at 10:05 PM, [email protected]
>>>>> <[email protected]> wrote:
>>>>>>
>>>>>> Is there a DMAEngine implementation for the A20?
>>>>>> Audio drivers will want that.
>>>>>
>>>>>
>>>>> Emilio (CC-ed) has been working on one, and he pushed out a branch I
>>>>> think.
>>>>>
>>>>> Depending on how much time it would take to implement the audio
>>>>> drivers,
>>
>>
>> Audio support is fairly easy if DMAEngine is there and cyclic buffers
>> have been implemented.
>>
>> Audio does need a DMA feature that not all DMA hardware implements. It
>> needs to be able to ask the DMA hardware what address (or how far
>> along) the transfer is currently at.  That info is needed to implement
>> the mixer.
>>
>> For example. You set audio up on a cyclic 16Kb DMA buffer playing
>> music. Now you want to make a beep that new email has arrived. The
>> audio system needs to be able to ask the DMA hardware where it is
>> inside that 16Kb buffer.  Once it knows where the DMA pointer is, it
>> will mix that beep into music already existing in the buffer that
>> hasn't played yet.
>>
>> Without this capability audio drivers will implement lots of little
>> chained buffers. Then as each one completes if knows where the DMA
>> pointer is. Finally there is code in ALSA that just guesses where the
>> DMA pointer is based on the system clock.
>>
>> Does the A20 DMA hardware expose the current DMA pointer address in a
>> register?
>
>
> There's a bit you can set on the configuration register so that the byte
> counter register (pages 165, 170 on A20 user manual) returns the amount of
> data left to transfer.

I think the default setting is to return the amount of data transferred.
Add that to the base pointer, and that should do it.

I have no idea about cyclic buffers though. Maybe it's just an implementation
issue?

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to