r1689

stsp at dslinux.in-berlin.de stsp at dslinux.in-berlin.de
Sat Feb 10 11:50:01 CET 2007


Author: stsp
Date: 2007-02-10 11:49:56 +0100 (Sat, 10 Feb 2007)
New Revision: 1689

Log:
Fix wifi on recent DSlites.

Patch submitted by David Kuder:

  Nintendo played with the wifi hardware in the latest
  revisions of the dslite. sgstair figured out what was
  needed to fix it and did in January.
  I've included the necessary patch with this message.



Modified: trunk/linux-2.6.x/arch/arm/mach-nds/arm7/wifi.c
===================================================================
--- trunk/linux-2.6.x/arch/arm/mach-nds/arm7/wifi.c	2007-01-28 22:09:54 UTC (rev 1688)
+++ trunk/linux-2.6.x/arch/arm/mach-nds/arm7/wifi.c	2007-02-10 10:49:56 UTC (rev 1689)
@@ -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<ReadFlashByte(0x43);i++) {
+				Wifi_RFWrite( (ReadFlashByte(n)<<8) | ReadFlashByte(n+channel+1) | 0x050000 );
+				n+=15;
+			}
+			break;
+		default:
+			break;
+	}
 }
 
 void Wifi_RequestChannel(int channel)
@@ -439,7 +459,7 @@
 static void Wifi_Shutdown(void)
 {
 	int a;
-	if (ReadFlashByte(0x40) != 3) {
+	if (ReadFlashByte(0x40) == 2) {
 		Wifi_RFWrite(0xC008);
 	}
 	a = Wifi_BBRead(0x1E);




More information about the dslinux-commit mailing list