[alsa-devel] Exposing control of my device
My device has 220 registers, some of these are quite long (32 bytes) and I have split them up into multiple 32b pseudo registers. That results in about 300 registers for a TAS5504 and 450 for a TAS5508.
A large number of these registers are for BiQuads, DRC, loudness, etc. They're not general purpose ALSA functions. What is an efficient way to expose several hundred registers of this class? Making snd_kcontrols for all of them seems pretty inefficient.
Is there some generic way to do register access from user space that I haven't found yet? Or should I make two special snd_kcontrols, one for read register and write register?
On 7/28/08, Jon Smirl jonsmirl@gmail.com wrote:
My device has 220 registers, some of these are quite long (32 bytes) and I have split them up into multiple 32b pseudo registers. That results in about 300 registers for a TAS5504 and 450 for a TAS5508.
A large number of these registers are for BiQuads, DRC, loudness, etc. They're not general purpose ALSA functions. What is an efficient way to expose several hundred registers of this class? Making snd_kcontrols for all of them seems pretty inefficient.
I think I'm starting to understand. I didn't need to virtualize my long 32 byte registers. Instead I can implement a HWDEP control that is an array of eight integers. That will knock my control count back down to 200 from 450. There's no simple way to control my large registers from a basic GUI. I need to make my own GUI and manipulate the HWDEP control.
Is there some generic way to do register access from user space that I haven't found yet? Or should I make two special snd_kcontrols, one for read register and write register?
-- Jon Smirl jonsmirl@gmail.com
On Mon, 28 Jul 2008, Jon Smirl wrote:
My device has 220 registers, some of these are quite long (32 bytes) and I have split them up into multiple 32b pseudo registers. That results in about 300 registers for a TAS5504 and 450 for a TAS5508.
A large number of these registers are for BiQuads, DRC, loudness, etc. They're not general purpose ALSA functions. What is an efficient way to expose several hundred registers of this class? Making snd_kcontrols for all of them seems pretty inefficient.
Note you can handle up to 128 32-bit words in one snd_kcontrol, so if you can group some registers, you can reduce the number of controls.
Another possibility is to use the hwdep device and create own ioctl interface to drive your hw. But you'll lose nice things like event notifier (unless you implement it in hwdep, too).
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.
participants (2)
-
Jaroslav Kysela
-
Jon Smirl