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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel