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)