Browse Source

iwinfo: add hw info support for Rt3xxx SoCs

This takes the device_id and subsystem_id from the EEPROM, I'll add
the info for other Rt3xxx chips in the next days.

[jow: minor whitespace changes]

Signed-off-by: Daniel Golle <[email protected]>

SVN-Revision: 33199
Jo-Philipp Wich 13 years ago
parent
commit
82f298b9f1
2 changed files with 24 additions and 1 deletions
  1. 2 0
      package/iwinfo/src/iwinfo_lib.c
  2. 22 1
      package/iwinfo/src/iwinfo_utils.c

+ 2 - 0
package/iwinfo/src/iwinfo_lib.c

@@ -314,6 +314,7 @@ const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[] = {
 
 const char VENDOR_UBNT[] = "Ubiquiti";
 const char VENDOR_ATH[]  = "Atheros";
+const char VENDOR_RALINK[]  = "RaLink";
 
 const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[] = {
 /*	{ vendor, model, vendorid, deviceid, subsys vendorid, subsys deviceid, poweroff, freqoff } */
@@ -368,6 +369,7 @@ const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[] = {
 	{ VENDOR_ATH,  "AR9220",                0x168c, 0x0029, 0x168c, 0xa094,  0,     0 },
 	{ VENDOR_ATH,  "AR9223",                0x168c, 0x0029, 0x168c, 0xa095,  0,     0 },
 	{ VENDOR_ATH,  "AR9285",                0x168c, 0x002b, 0x168c, 0xa091,  0,     0 },
+	{ VENDOR_RALINK,  "Rt3352",             0x1814, 0x3352, 0x1814, 0x000c,  0,     0 },
 #endif
 	{ NULL }
 };

+ 22 - 1
package/iwinfo/src/iwinfo_utils.c

@@ -165,7 +165,8 @@ int iwinfo_hardware_id_from_mtd(struct iwinfo_hardware_id *id)
 	while (fgets(buf, sizeof(buf), mtd) > 0)
 	{
 		if (fscanf(mtd, "mtd%d: %*x %x %127s", &off, &len, buf) < 3 ||
-		    (strcmp(buf, "\"boardconfig\"") && strcmp(buf, "\"EEPROM\"")))
+		    (strcmp(buf, "\"boardconfig\"") && strcmp(buf, "\"EEPROM\"") &&
+		     strcmp(buf, "\"factory\"")))
 		{
 			off = -1;
 			continue;
@@ -212,6 +213,26 @@ int iwinfo_hardware_id_from_mtd(struct iwinfo_hardware_id *id)
 				id->subsystem_device_id = bc[off + 0x14];
 				break;
 			}
+
+			/* Rt3xxx SoC */
+			else if ((bc[off] == 0x3352) || (bc[off] == 0x5233) ||
+			         (bc[off] == 0x3350) || (bc[off] == 0x5033) ||
+			         (bc[off] == 0x3050) || (bc[off] == 0x5030) ||
+			         (bc[off] == 0x3052) || (bc[off] == 0x5230))
+			{
+				/* vendor: RaLink */
+				id->vendor_id = 0x1814;
+				id->subsystem_vendor_id = 0x1814;
+
+				/* device */
+				if (bc[off] & 0xf0 == 0x30)
+					id->device_id = (bc[off] >> 8) | (bc[off] & 0x00ff) << 8;
+				else
+					id->device_id = bc[off];
+
+				/* subsystem from EEPROM_NIC_CONF0_RF_TYPE */
+				id->subsystem_device_id = (bc[off + 0x1a] & 0x0f00) >> 8;
+			}
 		}
 
 		munmap(bc, len);