All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: Questions about writing a new ALSA driver for a very limitted device
@ 2007-04-26 22:30 Tim Harvey
  2007-04-27 17:09 ` Takashi Iwai
  0 siblings, 1 reply; 4+ messages in thread
From: Tim Harvey @ 2007-04-26 22:30 UTC (permalink / raw)
  To: alsa-devel

Thanks to the help I've gotten on this list my alsa driver is working great.  I
got a little hung up not realizing that the alsa core basically provides
everything you need to implement your own circular buffer if you need to use an
intermediate buffer.

The only question I still have is that if alsa allocates your DMA buffer for
you based on snd_pcm_hardware_t buffer_bytes_max what exactly does
snd_pcm_lib_preallocate_pages_for_all allocate buffers for?  Does this allocate
the buffers that would be passed to the copy callback?

Thanks,

Tim

--- Tim Harvey <tim_harvey@yahoo.com> wrote:

> Greetings,
> 
> I'm setting out to write an ALSA driver for a very limited device thats
> behind
> a PLD.  The actual codec is a uda1380 and does 16bit MSB stereo
> encode/decode. 
> The way the device is driven the sampling rate is limited to 8KHz and data
> transfer to/from the device I have to handle manually.
> 
> I've read over the 'writing an ALSA driver' tutorial and have started the
> driver but have run into a few questions:
> 
>  - for the specs I've given above: 8000Hz sampling rate, 16bit stereo MSB
> samples does the following snd_pcm_hardware_t look right?:
> 
> static snd_pcm_hardware_t my_playback_hw = {
>         .info = (SNDRV_PCM_INFO_MMAP |
>                  SNDRV_PCM_INFO_INTERLEAVED |
>                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
>                  SNDRV_PCM_INFO_MMAP_VALID),
>         .formats =          SNDRV_PCM_FMTBIT_U16_BE,  // is this 16bit MSB?
>         .rates =            SNDRV_PCM_RATE_8000,      // seems redundant?
>         .rate_min =         8000,
>         .rate_max =         8000,
>         .channels_min =     2,
>         .channels_max =     2,
>         .buffer_bytes_max = 32768,
>         .period_bytes_min = 4096,
>         .period_bytes_max = 32768,
>         .periods_min =      1,
>         .periods_max =      1024,
> };
> 
>  - I'm a little confused at how to deal with copying data from/to the device.
> 
> It looks like I would implement the copy callback and copy the passed buffer
> to
> the device in the device specific manner I need to (playback), but I'm not
> clear where to put data that I receive from the device (capture).  I notice
> that when the hw_params callback is called a dma buffer has been created by
> ALSA in the substream->runtime struct.  I assume this is created based on hte
> buffer_bytes_max field above and I'm to copy data to this buffer?  How do I
> know where to copy it within the buffer and what data ALSA has already
> consumed
> from the buffer?
> 
>  - I might need to create an intermediate buffer between ALSA's rather large
> buffers and my hardware buffer.  Is there any driver that I could look at
> that
> does this?  The tutorial talks about the vxpocket driver but that code looks
> very foriegn from the rest of the ALSA drivers.
> 
>  - I'm not sure I understand what the 'period' is about.  Its clear to me
> that
> I need to call snd_pcm_period_elapsed() periodically from either an IRQ or
> other timed callback, but I'm not clear what the hardware pointer is or how
> that converts to 'frames' and 'periods'.
> 
>  - in general, if my hardware device only allows 16bit MSB 8KHz, does ALSA
> provides a mechanism for converting data from other formats?
> 
> Thanks for any pointers,
> 
> Tim
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread
[parent not found: <s5hwt0cvgjg.wl%tiwai@suse.de>]

end of thread, other threads:[~2007-04-27 17:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-26 22:30 Questions about writing a new ALSA driver for a very limitted device Tim Harvey
2007-04-27 17:09 ` Takashi Iwai
     [not found] <s5hwt0cvgjg.wl%tiwai@suse.de>
2007-04-19 21:30 ` Tim Harvey
2007-04-24 13:13   ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.