Takashi Iwai wrote:
At Sun, 19 Oct 2008 17:07:08 +0100, James Courtier-Dutton wrote:
This info should help the current snd-sbxfi driver to actually work with the "Vista compatible" cards that it currently does not work with. I believe the true UAA to 20K1 mode switch code is missing from the current alsa snd-sbxfi driver.
The code to switch to 20k1 mode is already there. The sbxfi driver uses ioport for the access, and it looks like in BAR5 for UAA boards. This could be the problem...
Well I cannot find it. I can only find: static void sbxfi_switch_xfi_mode(struct sbxfi *chip) and that does not do the job.
You need to do this:
- UAA/20K1 MODE CHANGE (controls who the bus master is):
The "Mode Change" register is located in the UAA configuration space at location offset 0x3FFC. This location stores 4 values in a ring. To switch from 20K1 mode to UAA mode write each DW value: CTLA, CTLZ, CTLL, CTLA. To switch from UAA mode to 20K1 mode write each DW value: CTLX, CTL-, CTLF, CTLi To read the current mode, the 4 value ring may be in any position, so one might read for example: CTLL, CTLA, CTLA, CTLZ
At power on, the card is in UAA mode. In UAA mode, the UAA chip is the bus master. In 20K1 mode, the 20K1 chip is the bus master. Under either UAA mode or 20K1 mode, the driver can read and write the configuration space of both UAA chip and 20K1 chip.