Anterior Siguiente Indice

3. Investigación del Driver

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)


Anterior Siguiente Indice