At Wed, 4 Feb 2009 16:02:14 +0100, Hans-Christian Egtvedt wrote:
On Wed, 04 Feb 2009 13:09:37 +0100 Takashi Iwai tiwai@suse.de wrote:
At Wed, 4 Feb 2009 12:48:34 +0100, Hans-Christian Egtvedt wrote:
<snipp>
+static int atmel_ac97c_playback_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *hw_params)
+{
- struct atmel_ac97c *chip =
snd_pcm_substream_chip(substream);
- int retval;
- retval = snd_pcm_lib_malloc_pages(substream,
params_buffer_bytes(hw_params));
- if (retval)
return retval;
Should be a negative-check.
For some reason if I only check for < 0, then the buffer is not configured properly. Seems like the preallocation goes wrong for some reason.
Any pointers to why?
Could it be due to multiple hw_params calls? You can check the sequence of PCM callbacks.
Oh wait, is it an error from atmel_ac97c_prepare_dma()? Looking through the code, it uses runtime->buffer_size and runtime->period_size. These aren't set yet inside hw_params. I think this setup can be done better in prepare callback.
Takashi