RE: [Uclinux-dist-devel] IIO ring buffer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I think Barry forgot to mention that this DAC is connect to the CPU via a 3 PIN serial port with SYNC clock enabled. This serial port controller has DMA master capability and output data at a given clock. The ring buffer slots and size is better to be configurable and its API should be able to trigger output start/stop to IIO driver based on data left in the ring.


Sonic 

>-----Original Message-----
>From: uclinux-dist-devel-bounces@xxxxxxxxxxxxxxxxxxxx 
>[mailto:uclinux-dist-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On 
>Behalf Of Barry Song
>Sent: Wednesday, March 03, 2010 11:26 AM
>To: J.I. Cameron
>Cc: linux-iio@xxxxxxxxxxxxxxx; 
>uclinux-dist-devel@xxxxxxxxxxxxxxxxxxxx; manuel.stahl@xxxxxxxxxxxxxxxxx
>Subject: Re: [Uclinux-dist-devel] IIO ring buffer
>
>DACs like 
>AD5624R/5644R/5664R(http://www.analog.com/en/digital-to-analog-
>converters/da-converters/ad5624r/products/product.html)
>have no clock input and internal buffer. Some users maybe use 
>it to get discrete analog signals, that means once one data is 
>written to AD5624R, one new analog signal is output, then we 
>don't need ring buffer. But some other users maybe want the 
>AD5624R to create continuous signals with a fixed frequency, 
>then we need use ring buffer with linked DMA to input data to 
>AD5624R with a constant rate.
>This case is same with audio play.
>To implement that, we need
>1. Split ring buffer to some little fragments, one fragment is 
>a DMA block.
>2. Ring buffer core layer must handle the play pointer and 
>user writing pointer, stop the DMA automatically when user 
>data under-run flows( valid data is less than one fragment in 
>ring buffer) 3. The DMA interrupt handler in the bottom driver 
>should update the play pointer by a ring buffer core API to 
>notify the play status.
>4. The DMA should support  linked mode, once one DMA block is 
>finished, another DMA fragment will be enabled by hardware 
>automatically except that it is disabled due to underflow.
>Thanks
>Barry
>
>On Tue, Mar 2, 2010 at 6:45 PM, J.I. Cameron <jic23@xxxxxxxxx> wrote:
>> Hi Barry,
>>
>>> I know you are changing iio ring buffer. Here a problem to discuss 
>>> with you, there are maybe this kind of use cases: the DACs have no 
>>> internal clock and buffer, so we need an external bus with 
>continuous 
>>> DMA to "play" data flow with constant speed. It is very 
>similar with 
>>> alsa driver to play audio by I2S or AC97. ALSA framework is easy to 
>>> implement this kind of drivers. But our DACs are not audio cards. 
>>> Then in the iio ring buffer core, it seems we also need APIs like 
>>> trigger(), pointer(), snd_pcm_period_elapsed()... to get a common 
>>> framework.
>>
>> I have to admit I'm in general a little unclear on how one even goes 
>> about getting dma to occur at a constant speed.  I'm afraid 
>I haven't 
>> had much time to work on improving the ring buffer (though I 
>will try 
>> and get a patch out for one particular bug sometime today - 
>if you get 
>> issues in the init function with spin locks).   Hence, I 
>suggest that 
>> you propose any changes you would like to see in the core, 
>if possible 
>> with some code along side relevant data sheets so those of us not so 
>> familiar with this area can better understand how this would work.
>>
>> My short term plans for the buffering is to allow use of the new 
>> implementation of kfifo as it allows dma transfers to occur directly 
>> into the buffer.  Obviously this will involve adding a few 
>new bits to the api.
>>
>> That internal api is certainly far from locked in stone and 
>as long as 
>> we can mend any driver broken by changes, feel free to propose any 
>> changes you like!
>>
>>> Of course, we can let users to handle blocking in write() callback 
>>> like OSS, but alsa-like APIs should be better. So what's 
>your opinion 
>>> for that?
>>> If I begin to work on this, I am not sure how much is 
>needed to do to 
>>> merge into your new iio ring buffer codes. So if you have some new 
>>> codes for reference, it should be better.
>>
>> Sorry, no new code for now.  All changes in my tree are driver based 
>> rather than core (and right now to messy to post publicly)
>>
>> Looking forward to seeing what you propose in further detail.
>>
>> Jonathan
>>
>_______________________________________________
>Uclinux-dist-devel mailing list
>Uclinux-dist-devel@xxxxxxxxxxxxxxxxxxxx
>https://blackfin.uclinux.org/mailman/listinfo/uclinux-dist-devel
>
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux