broadcom-diag: use new in kernel board detection code
SVN-Revision: 35764
This commit is contained in:
		@@ -32,6 +32,7 @@
 | 
			
		||||
#include <linux/netlink.h>
 | 
			
		||||
#include <linux/kobject.h>
 | 
			
		||||
#include <net/sock.h>
 | 
			
		||||
#include <bcm47xx_board.h>
 | 
			
		||||
extern u64 uevent_next_seqnum(void);
 | 
			
		||||
 | 
			
		||||
#include "gpio.h"
 | 
			
		||||
@@ -1038,85 +1039,13 @@ static struct platform_t __initdata platforms[] = {
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct platform_t __init *platform_detect(void)
 | 
			
		||||
static struct platform_t __init *platform_detect_legacy(void)
 | 
			
		||||
{
 | 
			
		||||
	char *boardnum, *boardtype, *buf;
 | 
			
		||||
 | 
			
		||||
	if (strcmp(getvar("nvram_type"), "cfe") == 0)
 | 
			
		||||
		return &platforms[WGT634U];
 | 
			
		||||
 | 
			
		||||
	/* Look for a model identifier */
 | 
			
		||||
 | 
			
		||||
	/* Based on "model_name" */
 | 
			
		||||
	if ((buf = nvram_get("model_name"))) {
 | 
			
		||||
		if (!strcmp(buf, "DIR-130"))
 | 
			
		||||
			return &platforms[DIR130];
 | 
			
		||||
		if (!strcmp(buf, "DIR-330"))
 | 
			
		||||
			return &platforms[DIR330];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Based on "wsc_modelname */
 | 
			
		||||
	if ((buf = nvram_get("wsc_modelname"))) {
 | 
			
		||||
		if (!strcmp(buf, "WRT610N"))
 | 
			
		||||
			return &platforms[WRT610N];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Based on "model_no" */
 | 
			
		||||
	if ((buf = nvram_get("model_no"))) {
 | 
			
		||||
		if (startswith(buf,"WL700")) /* WL700* */
 | 
			
		||||
			return &platforms[WL700GE];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Based on "hardware_version" */
 | 
			
		||||
	if ((buf = nvram_get("hardware_version"))) {
 | 
			
		||||
		if (startswith(buf,"WL500GPV2-")) /* WL500GPV2-* */
 | 
			
		||||
			return &platforms[WL500GPV2];
 | 
			
		||||
		if (startswith(buf,"WL520GC-")) /* WL520GU-* */
 | 
			
		||||
			return &platforms[WL520GC];
 | 
			
		||||
		if (startswith(buf,"WL520GU-")) /* WL520GU-* */
 | 
			
		||||
			return &platforms[WL520GU];
 | 
			
		||||
		if (startswith(buf,"WL330GE-")) /* WL330GE-* */
 | 
			
		||||
			return &platforms[WL330GE];
 | 
			
		||||
		if (startswith(buf,"RT-N16-")) /* RT-N16-* */
 | 
			
		||||
			return &platforms[RTN16];
 | 
			
		||||
		if (startswith(buf,"F7D4301")) /* F7D4301* */
 | 
			
		||||
			return &platforms[BELKIN_F7D4301];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Based on "ModelId" */
 | 
			
		||||
	if ((buf = nvram_get("ModelId"))) {
 | 
			
		||||
		if (!strcmp(buf, "WR850GP"))
 | 
			
		||||
			return &platforms[WR850GP];
 | 
			
		||||
		if (!strcmp(buf, "WR850G"))
 | 
			
		||||
			return &platforms[WR850GV2V3];
 | 
			
		||||
		if (!strcmp(buf, "WX-5565") && !strcmp(getvar("boardtype"),"bcm94710ap"))
 | 
			
		||||
			return &platforms[TM2300]; /* Dell TrueMobile 2300 */
 | 
			
		||||
		if (startswith(buf,"WE800G")) /* WE800G* */
 | 
			
		||||
			return &platforms[WE800G];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Buffalo */
 | 
			
		||||
	if ((buf = (nvram_get("melco_id") ?: nvram_get("buffalo_id")))) {
 | 
			
		||||
		/* Buffalo hardware, check id for specific hardware matches */
 | 
			
		||||
		if (!strcmp(buf, "29bb0332"))
 | 
			
		||||
			return &platforms[WBR2_G54];
 | 
			
		||||
		if (!strcmp(buf, "29129"))
 | 
			
		||||
			return &platforms[WLA2_G54L];
 | 
			
		||||
		if (!strcmp(buf, "30189"))
 | 
			
		||||
			return &platforms[WHR_HP_G54];
 | 
			
		||||
		if (!strcmp(buf, "32093"))
 | 
			
		||||
			return &platforms[WHR_G125];
 | 
			
		||||
		if (!strcmp(buf, "30182"))
 | 
			
		||||
			return &platforms[WHR_G54S];
 | 
			
		||||
		if (!strcmp(buf, "290441dd"))
 | 
			
		||||
			return &platforms[WHR2_A54G54];
 | 
			
		||||
		if (!strcmp(buf, "31120"))
 | 
			
		||||
			return &platforms[WZR_G300N];
 | 
			
		||||
		if (!strcmp(buf, "30083"))
 | 
			
		||||
			return &platforms[WZR_RS_G54];
 | 
			
		||||
		if (!strcmp(buf, "30103"))
 | 
			
		||||
			return &platforms[WZR_RS_G54HP];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* no easy model number, attempt to guess */
 | 
			
		||||
	boardnum = getvar("boardnum");
 | 
			
		||||
@@ -1130,59 +1059,18 @@ static struct platform_t __init *platform_detect(void)
 | 
			
		||||
			return &platforms[WRT600N];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Normally, these would go inside the "CFE based - newer hardware" block below; however, during early init, the
 | 
			
		||||
	 * "pmon_ver" variable is not available on the E3000v1 (and probably the WRT610Nv2 also).  Until this is figured out,
 | 
			
		||||
	 * these will need to remain here in order for platform detection to work.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!strcmp(boardnum, "42")) { /* Linksys */
 | 
			
		||||
		if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "E300") && !strcmp(getvar("boot_hw_ver"), "1.0"))
 | 
			
		||||
			return &platforms[E3000V1];
 | 
			
		||||
 | 
			
		||||
		if (!strcmp(boardtype, "0x04cf") && !strcmp(getvar("boot_hw_model"), "WRT610N") && !strcmp(getvar("boot_hw_ver"), "2.0"))
 | 
			
		||||
			return &platforms[WRT610NV2];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (startswith(getvar("pmon_ver"), "CFE")) {
 | 
			
		||||
		/* CFE based - newer hardware */
 | 
			
		||||
		if (!strcmp(boardnum, "42")) { /* Linksys */
 | 
			
		||||
			if (!strcmp(boardtype, "0x478") && !strcmp(getvar("boot_hw_model"), "WRT300N") && !strcmp(getvar("boot_hw_ver"), "1.1"))
 | 
			
		||||
				return &platforms[WRT300NV11];
 | 
			
		||||
 | 
			
		||||
			if (!strcmp(boardtype, "0x478") && !strcmp(getvar("cardbus"), "1"))
 | 
			
		||||
				return &platforms[WRT350N];
 | 
			
		||||
 | 
			
		||||
			if (!strcmp(boardtype, "0x0101") && !strcmp(getvar("boot_ver"), "v3.6"))
 | 
			
		||||
				return &platforms[WRT54G3G];
 | 
			
		||||
 | 
			
		||||
			if (!strcmp(boardtype, "0x042f") && !strcmp(getvar("model_name"), "WRT54G3GV2-VF"))
 | 
			
		||||
				return &platforms[WRT54G3GV2_VF];
 | 
			
		||||
 | 
			
		||||
			if (!strcmp(getvar("et1phyaddr"),"5") && !strcmp(getvar("et1mdcport"), "1"))
 | 
			
		||||
				return &platforms[WRTSL54GS];
 | 
			
		||||
 | 
			
		||||
			if (!strcmp(boardtype, "0x0472")) {
 | 
			
		||||
				if(!strcmp(getvar("boot_hw_model"), "WRT150N")) {
 | 
			
		||||
					if(!strcmp(getvar("boot_hw_ver"), "1"))
 | 
			
		||||
						return &platforms[WRT150NV1];
 | 
			
		||||
					else if(!strcmp(getvar("boot_hw_ver"), "1.1"))
 | 
			
		||||
						return &platforms[WRT150NV11];
 | 
			
		||||
				}
 | 
			
		||||
				else if(!strcmp(getvar("boot_hw_model"), "WRT160N")) {
 | 
			
		||||
					if(!strcmp(getvar("boot_hw_ver"), "1.0"))
 | 
			
		||||
						return &platforms[WRT160NV1];
 | 
			
		||||
					else if(!strcmp(getvar("boot_hw_ver"), "3.0"))
 | 
			
		||||
						return &platforms[WRT160NV3];
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!strcmp(boardtype, "0x04cd")) {
 | 
			
		||||
				if (!strcmp(getvar("boot_hw_model"), "E100")) {
 | 
			
		||||
					if (!strcmp(getvar("boot_hw_ver"), "1.0"))
 | 
			
		||||
						return &platforms[E1000V1];
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* default to WRT54G */
 | 
			
		||||
			return &platforms[WRT54G];
 | 
			
		||||
		}
 | 
			
		||||
@@ -1199,9 +1087,7 @@ static struct platform_t __init *platform_detect(void)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!strcmp(boardnum, "45")) { /* ASUS */
 | 
			
		||||
			if (!strcmp(boardtype,"0x042f"))
 | 
			
		||||
				return &platforms[WL500GP];
 | 
			
		||||
			else if (!strcmp(boardtype,"0x0472"))
 | 
			
		||||
			if (!strcmp(boardtype,"0x0472"))
 | 
			
		||||
				return &platforms[WL500W];
 | 
			
		||||
			else if (!strcmp(boardtype,"0x467"))
 | 
			
		||||
				return &platforms[WL320GE];
 | 
			
		||||
@@ -1310,6 +1196,96 @@ static struct platform_t __init *platform_detect(void)
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct platform_t __init *platform_detect(void)
 | 
			
		||||
{
 | 
			
		||||
	enum bcm47xx_board board;
 | 
			
		||||
	const char *board_name;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	board = bcm47xx_board_get();
 | 
			
		||||
	board_name = bcm47xx_board_get_name();
 | 
			
		||||
	if (board != BCM47XX_BOARD_UNKNOWN && board != BCM47XX_BOARD_NON)
 | 
			
		||||
		printk(MODULE_NAME ": kernel found a \"%s\"\n", board_name);
 | 
			
		||||
 | 
			
		||||
	switch(board) {
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_RTN16:
 | 
			
		||||
		return &platforms[RTN16];
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_WL330GE:
 | 
			
		||||
		return &platforms[WL330GE];
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_WL500GPV1:
 | 
			
		||||
		return &platforms[WL500GP];
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_WL500GPV2:
 | 
			
		||||
		return &platforms[WL500GPV2];
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_WL520GC:
 | 
			
		||||
		return &platforms[WL520GC];
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_WL520GU:
 | 
			
		||||
		return &platforms[WL520GU];
 | 
			
		||||
	case BCM47XX_BOARD_ASUS_WL700GE:
 | 
			
		||||
		return &platforms[WL700GE];
 | 
			
		||||
	case BCM47XX_BOARD_BELKIN_F7D4301:
 | 
			
		||||
		return &platforms[BELKIN_F7D4301];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WBR2_G54:
 | 
			
		||||
		return &platforms[WBR2_G54];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WHR2_A54G54:
 | 
			
		||||
		return &platforms[WHR2_A54G54];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WHR_G125:
 | 
			
		||||
		return &platforms[WHR_G125];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WHR_G54S:
 | 
			
		||||
		return &platforms[WHR_G54S];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WHR_HP_G54:
 | 
			
		||||
		return &platforms[WHR_HP_G54];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WLA2_G54L:
 | 
			
		||||
		return &platforms[WLA2_G54L];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WZR_G300N:
 | 
			
		||||
		return &platforms[WZR_G300N];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WZR_RS_G54:
 | 
			
		||||
		return &platforms[WZR_RS_G54];
 | 
			
		||||
	case BCM47XX_BOARD_BUFFALO_WZR_RS_G54HP:
 | 
			
		||||
		return &platforms[WZR_RS_G54HP];
 | 
			
		||||
	case BCM47XX_BOARD_DELL_TM2300:
 | 
			
		||||
		return &platforms[TM2300];
 | 
			
		||||
	case BCM47XX_BOARD_DLINK_DIR130:
 | 
			
		||||
		return &platforms[DIR130];
 | 
			
		||||
	case BCM47XX_BOARD_DLINK_DIR330:
 | 
			
		||||
		return &platforms[DIR330];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_E1000V1:
 | 
			
		||||
		return &platforms[E1000V1];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_E3000V1:
 | 
			
		||||
		return &platforms[E3000V1];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT150NV1:
 | 
			
		||||
		return &platforms[WRT150NV1];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT150NV11:
 | 
			
		||||
		return &platforms[WRT150NV11];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT160NV1:
 | 
			
		||||
		return &platforms[WRT160NV1];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT160NV3:
 | 
			
		||||
		return &platforms[WRT160NV3];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT300NV11:
 | 
			
		||||
		return &platforms[WRT300NV11];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT54G3GV2:
 | 
			
		||||
		return &platforms[WRT54G3GV2_VF];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT610NV1:
 | 
			
		||||
		return &platforms[WRT610N];
 | 
			
		||||
	case BCM47XX_BOARD_LINKSYS_WRT610NV2:
 | 
			
		||||
		return &platforms[WRT610NV2];
 | 
			
		||||
	case BCM47XX_BOARD_MOTOROLA_WE800G:
 | 
			
		||||
		return &platforms[WE800G];
 | 
			
		||||
	case BCM47XX_BOARD_MOTOROLA_WR850GP:
 | 
			
		||||
		return &platforms[WR850GP];
 | 
			
		||||
	case BCM47XX_BOARD_MOTOROLA_WR850GV2V3:
 | 
			
		||||
		return &platforms[WR850GV2V3];
 | 
			
		||||
	case BCM47XX_BOARD_UNKNOWN:
 | 
			
		||||
	case BCM47XX_BOARD_NON:
 | 
			
		||||
		printk(MODULE_NAME ": unknown board found, try legacy detect\n");
 | 
			
		||||
		printk(MODULE_NAME ": please open a ticket at https://dev.openwrt.org and attach the complete nvram\n");
 | 
			
		||||
		return platform_detect_legacy();
 | 
			
		||||
	default:
 | 
			
		||||
		printk(MODULE_NAME ": board was detected as \"%s\", but not gpio configuration available\n", board_name);
 | 
			
		||||
		printk(MODULE_NAME ": now trying legacy detect\n");
 | 
			
		||||
		return platform_detect_legacy();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void ssb_maskset32(struct ssb_device *dev,
 | 
			
		||||
				  u16 offset, u32 mask, u32 set)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user