Następna strona Poprzednia strona Spis treści

3. Przerabianie sterownika.

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).


Następna strona Poprzednia strona Spis treści