At 04 Apr 2002 15:41:36 +0200, Leif Lindholm wrote: > > Hello > > I'm working on a set-top-box based on the National Semiconductor SC1200 > Geode integrated microprocessor. > > National have been nice enough to write an Alsa-driver for the built-in > AC97-controller/audio thingy - unfortunetaly it is written for 0.5.10b. > > So now I need to modify this one to use with 0.9. > > Can someone give me a few tips/hints or is there possibly a document > about this that I failed to google up?
unfortunatley (as always :) there is no documentation about the kernel stuff yet. since you have already a working 0.5.x driver, it's not too difficult, though. as far as i can remember.. - renaming fragment -> period channel -> stream voice -> channel snd_pcm_subchannel -> snd_pcm_substream - renaming of constants generally: SND_XXX -> SNDRV_XXX some other changes, too: e.g. SND_PCM_TRIGGER_GO -> SNDDRV_PCM_TRIGGER_START - snd_assert() is used instead of snd_debug_check() (note that the argument is opposite, assert(x) means that "x" is true .) - no longer difference of stream/blocking modes - general hardware information is stored in snd_pcm_hardware_t and passed to the runtime struct in open(). the information is intuitive, look at other sources. - abstracted ops. open(substream) - open the device - copy the substream->runtime->hw parameter (not pass the pointer) - set up the constraints (if any) hw_params(substream, hw_params) - allocate a buffer usually via snd_pcm_lib_malloc_pages prepare(substream) - set up the hardware parameters (like 0.5.x) note that parameters in runtime struct are stored in frames, not in bytes. there are functions, snd_pcm_lib_buffer_bytes() and snd_pcm_lib_period_bytes() trigger(substream, cmd) - start, stop, pause (like 0.5.x) pointer(substream) - returns the current pointer where the hw refers. (in frames!) hw_free(substream) - free the buffer usually via snd_pcm_lib_free_pages(substream) close(substream) - close the device, clean up. copy, silence - needed only if you don't (can't) use mmap. they are defiend in snd_pcm_ops_t struct and set up in pcm initizliation routine via snd_pcm_set_ops(). - when the interrupt occurs at period (fragment), call snd_pcm_period_elapsed(substream) just once per interrupt. - no longer snd-xxx functions for allocating port, dma and irqs. you need to use standard functions. for releasing struct resources *, you have to use kfree_nocheck() to avoid malloc-wrapper. - definitions of pci id table, probe(), remove() (suspend() and remove() if possible) on struct pci_driver. - finally and best way - look at drivers on a same chip of both 0.5.x and 0.9.0, and compare them :) Takashi _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel