Nie jestem dobrym programistą, ale znam C na tyle, żeby przejrzeæ sterownik i zobaczyæ co siê dzieje (szczególnie jeśli jest tam dużo komentarzy).
Popatrzyłem do pliku gus_card.c, ale nie znalazłem nic
ciekawego. Potem popatrzyłem do gus_wave.c i zobaczyłem coś
takiego:
* 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.
Super! Po prostu muszê ustawiæ wartośæ 10 i bêdzie działaæ... Nie!
Zrobienie tego spowoduje, że jądro bêdzie myślało, że masz gus Max, ale nie wykryje chip-a codec!
Wiêc musiałem także wymusiæ wykrycie tego chip-a!
Znalezienie co muszê zrobiæ nie było łatwe, ale w koñcu mi siê
udało. W pliku gus_wave.c była taka linia:
if (ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp))
co znaczyło, że jądro próbuje samo wykryæ chip AD1848. Pomyślałem, że nie może go wykryæ przez to PnP i miałem racjê! Zmieniłem tê liniê na:
if (!(ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)))
skompilowałem jeszcze raz jądro i quake działa teraz na cacy!
Tak przy okazji: W pliku gus_card.c jest opcja
gus_pnp_flag, ale nie widziałem żadnej różnicy miêdzy tym
kiedy była włączona i wyłączona 8( (może robiłem coś źle).