On 4/2/07, Jean Delvare <khali at linux-fr.org> wrote: > > Tamas MIKLOS send me the asus mux code. There are 5 hacks with smbus > > mux switch on IO, and 3 with smbus mux switch on smbus (lol thats > > funny), it covers 31 types of asus boards (plus many more subtypes). > > Oldest board is P3B, newest P4B. > > Is this information public? We don't yet support I2C/SMBus > multiplexing, but when we do, if we have the information, we can add > support for these boards. Here it is, pseudocode: ulong temp, temp2; '3V4X' enable SPD temp = inl_port($e44c); outl_port ($e44c,(temp & 0xe7ffffff) | 0x08000000); disable SPD outl_port($e44c,temp); ---------------------- 'K7V' 'A7V' 'A7V133' 'A7P' 'A7M' enable SPD temp = inb_port($e44d); outb_port ($e44d,temp | 0x01); disable SPD outb_port($e44d,temp); This one is tested on A7V133, from DSTD OperationRegion (\SGPO, SystemIO, 0xE44C, 0x04) Field (SGPO, ByteAcc, NoLock, Preserve) { GPO0, 1, Offset (0x01), GPO8, 1, fe , 2, GP11, 1, Offset (0x04) } tested 1 1 1 1 0 0 0 0 GPO0 1 0 0 1 1 0 0 1 GPO8 0 1 0 1 1 0 1 0 GP11 s c n n n n c s s=spd + hwmonitor c=clock + hwmonitor n=hwmonitor ---------------------- 'P3B' 'CUBX' enable SPD temp = inb_port($e437); outb_port($e437,(temp & 0xe7) | 0x08); disable SPD outb_port($e437,temp); ---------------------- 'CUPL' 'UV4X' enable SPD temp = inl_port($e44c); outl_port($e44c,(temp & 0xfffff6fff) | 0x100); disable SPD outl_port($e44c,temp); ---------------------- 'USL2' 'CUC2' '-A7V266-E' '-A7V266-M' '-A7V266' 'WEM' '-CUW' '<<CUW>>' 'P3C' 'UEP2' 'TUEG' '-MEW-' '<<MEW>>' '-P3W-E' '<<P3W>>' 'CUSI' 'CUV2' 'A7S' enable SPD outb_port($2e,$87); outb_port($2e,$87); outb_port($2e,7); outb_port($2f,8); outb_port($2e,$f1); temp = inb_port($2f); outb_port($2e,$f1); outb_port($2f,(temp & 0xe7) | 0x10); outb_port($2e,$aa); disable SPD outb_port($2e,$87); outb_port($2e,$87); outb_port($2e,7); outb_port($2f,8); outb_port($2e,$f1); outb_port($2f,temp); outb_port($2e,$aa); ---------------------- 'CUR' enable SPD temp = inb_port($ec80); outb_port($ec80,(temp & 0xef) | 0x10); temp2 = inb_port($ec84); outb_port($ec84,(temp2 & 0xef) | 0x10); disable SPD outb_port($ec80,temp); outb_port($ec84,temp2); ---------------------- 'A7V333' enable SPD outb_port($2E,$87); outb_port($2E,$87); outb_port($2E,7); outb_port($2F,8); outb_port($2E,$F0); temp = inb_port($2F); outb_port($2E,$F0); outb_port($2F,(temp & 0xE7) | 0x10); outb_port($2E,$F1); temp2 = inb_port($2F); outb_port($2E,$F1); outb_port($2F,(temp2 & 0xE7) | 0x10); outb_port($2E,$AA); disable SPD outb_port($2E,$87); outb_port($2E,$87); outb_port($2E,7); outb_port($2F,8); outb_port($2E,$F0); outb_port($2F,temp); outb_port($2E,$F1); outb_port($2F,temp2); outb_port($2E,$AA); ---------------------- '<P4B>' enable SPD outb_port($2E,$87); outb_port($2E,$87); outb_port($2E,7); outb_port($2F,7); outb_port($2E,$F2); temp = inb_port($2F); outb_port($2E,$F2); outb_port($2F,(temp & 0xFC) | 0x1); outb_port($2E,2); temp2 = inb_port($2F); outb_port($2F,temp2 | 0x2); outb_port($2E,$AA); disable SPD outb_port($2E,$87); outb_port($2E,$87); outb_port($2E,7); outb_port($2F,7); outb_port($2E,$F2); outb_port($2F,temp); outb_port($2E,$AA); ---------------------- -- Who logs in to gdm? Not I, said the duck.