Hi,
ALSA kernel tree has lots of unused and rotten codes. I'd like to clean up this. Here we go...
1. Indirect control element access
This is what I already suggested. This hasn't been used (we have no proper API in alsa-lib), and 32/64bit wrapper doesn't work at all.
Also, the idea to copy such a big data area via ioctl is bad. If we need a big matrix mixer, let make each matrix element accessible individually. Copying the whole matrix at each time isn't efficient.
2. PCM xfer_align parameter
This sw_params parameter has never been used in a sane manner, and no one understands what this does exactly. The current implementation looks also buggy because it allows write of shorter size than xfer_align. So, if you do partial writes, the write isn't actually aligned at all.
Removing this parameter will make some pcm_lib_* code more readable (and less buggy).
3. PCM sleep_min and tick
The "tick" in PCM is set (again) via sw_params. And, nobody uses this feature at all except for a command line option of aplay. (This is literally "nobody", as I checked alsa-lib API calls in all programs in some major distros.)
Above all, if we need finer wake-ups for the position update, it's basically an issue that the driver should solve, not tuned by each application.
4. sound/driver.h
This header file exists only for some hacks to adapt alsa-driver tree. It's useless for building in the kernel. Let's move a few lines in it to sound/core.h and remove it.
For building the modules on alsa-driver external tree, we can simply add #include "adriver.h" to each build stub (alsa-driver/*/*.c) before inclusion of alsa-kernel codes.
I'll post some patches to clean the above thing up in the following posts. Please speak up if you have objections.
Takashi