https://bugs.gentoo.org/652422 --- alsa-lib-1.1.6/src/conf/cards/aliases.alisp +++ alsa-lib-1.1.6/src/conf/cards/aliases.alisp @@ -0,0 +1,29 @@ +(setq snd_card_aliases_array + ( + ("YMF724" . "YMF744") + ("YMF724F" . "YMF744") + ("YMF740" . "YMF744") + ("YMF740C" . "YMF744") + ("YMF754" . "YMF744") + ("CMIPCI" . "CMI8338") + ("CMI8738" . "CMI8338") + ("CMI8738-MC4" . "CMI8738-MC6") + ("E-mu APS" . "EMU10K1") + ("GUS Max" . "GUS") + ("GUS ACE" . "GUS") + ("GUS Extreme" . "GUS") + ("AMD InterWave" . "GUS") + ("Dynasonic 3-D" . "GUS") + ("InterWave STB" . "GUS") + ) +) + +(defun snd_card_alias (cardname) + (setq r (assq cardname snd_card_aliases_array)) + (setq r (if (null r) cardname r)) + (unsetq r) +) + +(defun snd_card_alias_unset () + (unsetq snd_card_aliases_array snd_card_alias) +) --- alsa-lib-1.1.6/src/conf/cards/SI7018/sndoc-mixer.alisp +++ alsa-lib-1.1.6/src/conf/cards/SI7018/sndoc-mixer.alisp @@ -0,0 +1,11 @@ +; +; SiS SI7018 mixer abstract layer +; +; Copyright (c) 2003 Jaroslav Kysela +; License: GPL v2 (http://www.gnu.org/licenses/gpl.html) +; + +(defun sndoc_mixer_open (hctl pcm) + (princ "sndoc_mixer_open: hctl=" hctl " pcm=" pcm "\n") + 0 +) --- alsa-lib-1.1.6/src/conf/cards/SI7018/sndop-mixer.alisp +++ alsa-lib-1.1.6/src/conf/cards/SI7018/sndop-mixer.alisp @@ -0,0 +1,11 @@ +; +; SiS SI7018 mixer abstract layer +; +; Copyright (c) 2003 Jaroslav Kysela +; License: GPL v2 (http://www.gnu.org/licenses/gpl.html) +; + +(defun sndop_mixer_open (hctl pcm) + (princ "sndop_mixer_open: hctl=" hctl " pcm=" pcm "\n") + 0 +) --- alsa-lib-1.1.6/src/conf/smixer.conf +++ alsa-lib-1.1.6/src/conf/smixer.conf @@ -0,0 +1,13 @@ +_full smixer-python.so +usb { + searchl "USB" + lib smixer-usb.so +} +ac97 { + searchl "AC97a:" + lib smixer-ac97.so +} +hda { + searchl "HDA:" + lib smixer-hda.so +} --- alsa-lib-1.1.6/src/conf/sndo-mixer.alisp +++ alsa-lib-1.1.6/src/conf/sndo-mixer.alisp @@ -0,0 +1,115 @@ +; +; Toplevel configuration for the ALSA Ordinary Mixer Interface +; +; Copyright (c) 2003 Jaroslav Kysela +; License: GPL v2 (http://www.gnu.org/licenses/gpl.html) +; + +(defun sndo_include (hctl stream) + (setq info (Acall "ctl_card_info" (Acall "hctl_ctl" hctl))) + (if (= (Aerror info) 0) + (progn + (setq info (Aresult info)) + (setq driver (cdr (assq "driver" (unsetq info)))) + (setq file (concat (path "data") "/alsa/cards/" (snd_card_alias driver) "/sndo" stream "-mixer.alisp")) + (setq r (include file)) + (when (= r -2) (Asyserr "unable to find file " file)) + ) + (setq r (Aerror info)) + ) + (unsetq info driver file r) +) + +(defun sndo_mixer_open_fcn (hctl stream pcm) + (setq fcn (concat "sndo" stream "_mixer_open")) + (setq r (if (exfun fcn) (funcall fcn hctl pcm) 0)) + (when (= r 0) + (setq hctls (if hctls (cons hctls (cons hctl)) hctl)) + ) + (unsetq fcn r) +) + +(defun sndo_mixer_open_hctl (name stream pcm) + (setq hctl (Acall "hctl_open" name nil)) + (setq r (Aerror hctl)) + (when (= r 0) + (setq hctl (Aresult hctl)) + (setq r (sndo_include hctl stream)) + (if (= r 0) + (setq r (sndo_mixer_open_fcn hctl stream pcm)) + (Acall "hctl_close" hctl) + ) + ) + (unsetq hctl r) +) + +(defun sndo_mixer_open_virtual (name stream pcm) + (setq file (concat (path "data") "/alsa/virtual/" name "/sndo" stream "-mixer.alisp")) + (setq r (include file)) + (when (= r -2) (Asyserr "unable to find file " file)) + (when (= r 0) (setq r (sndo_mixer_open_fcn nil stream pcm))) + (unsetq file r) +) + +(defun sndo_mixer_open1 (name stream) + (if (compare-strings name 0 2 "hw:" 0 2) + (sndo_mixer_open_hctl name stream nil) + (sndo_mixer_open_virtual name stream nil) + ) +) + +(defun sndo_mixer_open (pname cname) + (setq r (sndo_mixer_open1 pname "p")) + (when (= r 0) (setq r (sndo_mixer_open1 cname "c"))) + (when (!= r 0) (sndo_mixer_close)) + (unsetq sndo_mixer_open + sndo_mixer_open_pcm sndo_mixer_open_pcm1 + sndo_mixer_open_virtual sndo_mixer_open_fcn + sndo_include r) +) + +(defun sndo_mixer_open_pcm1 (pcm stream) + (setq info (Acall "pcm_info" pcm)) + (setq r (Aerror info)) + (when (= r 0) + (setq info (Aresult info)) + (setq card (cdr (assq "card" info))) + (setq r + (if (< card 0) + (sndo_mixer_open_virtual (Acall "pcm_name" pcm) stream pcm) + (sndo_mixer_open_hctl (format "hw:%i" card) stream pcm) + ) + ) + ) + (unsetq info card r) +) + +(defun sndo_mixer_open_pcm (ppcm cpcm) + (setq r (sndo_mixer_open_pcm1 ppcm "p")) + (when (= r 0) (setq r (sndo_mixer_open_pcm1 cpcm "c"))) + (when (!= r 0) (sndo_mixer_close)) + (unsetq sndo_mixer_open + sndo_mixer_open_pcm sndo_mixer_open_pcm1 + sndo_mixer_open_virtual sndo_mixer_open_fcn + sndo_include r) +) + +(defun sndo_mixer_close1 (hctl stream) + (when hctl + (progn + (setq fcn (concat "sndo" stream "_mixer_close")) + (when (exfun fcn) (funcall fcn hctl)) + (unsetq fcn) + (Acall "hctl_close" hctl) + ) + ) +) + +(defun sndo_mixer_close nil + (sndo_mixer_close1 (nth 1 hctls) "c") + (sndo_mixer_close1 (nth 0 hctls) "p") + (snd_card_alias_unset) + (unsetq hctls) +) + +(include (concat (path "data") "/alsa/cards/aliases.alisp"))