Index: dslinux/linux-2.6.x/arch/arm/mach-nds/arm7/wifi.c =================================================================== --- dslinux/linux-2.6.x/arch/arm/mach-nds/arm7/wifi.c (revision 1688) +++ dslinux/linux-2.6.x/arch/arm/mach-nds/arm7/wifi.c (working copy) @@ -256,22 +256,42 @@ static void Wifi_SetChannel(int channel) { - int i; + int i,n; if (channel < 1 || channel > 13) return; channel -= 1; - wifi_data.curChannel = channel + 1; + wifi_data.curChannel = channel + 1; + if (!(wifi_data.state & WIFI_STATE_UP)) return; - Wifi_RFWrite(ReadFlashBytes(0xf2 + channel * 6, 3)); - Wifi_RFWrite(ReadFlashBytes(0xf5 + channel * 6, 3)); - for (i = 0; i < 20000; i++) - i++; - Wifi_BBWrite(0x1E, ReadFlashByte(0x146 + channel)); + switch(ReadFlashByte(0x40)) { + case 2: + case 5: + Wifi_RFWrite(ReadFlashBytes(0xf2 + channel * 6, 3)); + Wifi_RFWrite(ReadFlashBytes(0xf5 + channel * 6, 3)); + for (i = 0; i < 20000; i++) + i++; + Wifi_BBWrite(0x1E, ReadFlashByte(0x146 + channel)); + break; + case 3: + n=ReadFlashByte(0x42); + n+=0xCF; + for(i=0;i<=ReadFlashByte(0x43);i++) { + Wifi_BBWrite(ReadFlashByte(n),ReadFlashByte(n+channel+1)); + n+=15; + } + for(i=0;i