No soy un buen programador, pero se suficiente C para observar los fuentes de un driver y ver qué pasa (especialmente cuando está bien comentado).
Miré el fichero gus_card.c
, pero no encontré nada interesante.
Entonces miré en gus_wave.c
, y ví esto:
* Value 255 means pre-3.7 which don't have mixer.
* Values 5 thru 9 mean v3.7 which has a ICS2101 mixer.
* 10 and above is GUS MAX which has the CS4231 codec/mixer.
que significa:
* el Valor 255 se refiere a pre-3.7 la cual no tiene mixer.
* los Valores 5 a 9 se refiere a v3.7 los cuales tienen un mixer ICS2101.
* 10 y superior es GUS MAX la cual tiene el codec/mixer CS4231.
ˇGenial!, solo tengo que forzar el valor a 10, y funcionará ... ˇNo!
haciendo esto haría que el kernel pensase que se tiene una GUS MAX, pero ˇno reconocerá el chip Codec!
Por lo que tenía que forzar la detección del Codec también ...
No fue tan fácil encontrar qué hacer, pero finalmente descubrí una posisbilidad:
En el fichero gus_wave.c
, había una línea:
if (ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp))
lo que significaba que el kernel estaba intentando auto-detectar el chip AD1848, pensé que no lo podría detectar con la GUS PnP, y ˇestaba en lo cierto! Simplemente cambié la línea a:
if (!(ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)))
recompilé el kernel, y ˇˇˇhey, Quake funcionó de maravilla!!!
Por cierto hay una etiqueta gus_pnp_flag
en gus_card.c
,
pero no he notado ninguna diferencia con ella activada o desactivada 8(
(quizás hice algo mal)