Index: /src/linux/universal/linux-3.2/drivers/net/ethernet/ag71xx/ag71xx_ar7240.c
===================================================================
--- /src/linux/universal/linux-3.2/drivers/net/ethernet/ag71xx/ag71xx_ar7240.c	(revision 18885)
+++ /src/linux/universal/linux-3.2/drivers/net/ethernet/ag71xx/ag71xx_ar7240.c	(revision 18886)
@@ -291,4 +291,5 @@
 	u8 ver;
 	bool vlan;
+	bool init;
 	u16 vlan_id[AR7240_MAX_VLANS];
 	u8 vlan_table[AR7240_MAX_VLANS];
@@ -864,5 +865,5 @@
 
 	memset(portmask, 0, sizeof(portmask));
-	if (as->vlan) {
+	if (!as->init) {
 		/* calculate the port destination masks and load vlans
 		 * into the vlan translation unit */
@@ -907,4 +908,5 @@
 {
 	struct ar7240sw *as = sw_to_ar7240(dev);
+	as->init = false;
 	ar7240sw_reset(as);
 	return 0;
@@ -1095,4 +1097,5 @@
 
 	as->vlan_table[0] = ar7240sw_port_mask_all(as);
+	as->init = true;
 
 	return as;
Index: /src/linux/universal/linux-3.2/drivers/net/ethernet/ag934x/ag71xx_ar7240.c
===================================================================
--- /src/linux/universal/linux-3.2/drivers/net/ethernet/ag934x/ag71xx_ar7240.c	(revision 18885)
+++ /src/linux/universal/linux-3.2/drivers/net/ethernet/ag934x/ag71xx_ar7240.c	(revision 18886)
@@ -291,4 +291,5 @@
 	u8 ver;
 	bool vlan;
+	bool init;
 	u16 vlan_id[AR7240_MAX_VLANS];
 	u8 vlan_table[AR7240_MAX_VLANS];
@@ -864,5 +865,5 @@
 
 	memset(portmask, 0, sizeof(portmask));
-	if (as->vlan) {
+	if (!as->init) {
 		/* calculate the port destination masks and load vlans
 		 * into the vlan translation unit */
@@ -907,4 +908,5 @@
 {
 	struct ar7240sw *as = sw_to_ar7240(dev);
+	as->init = false;
 	ar7240sw_reset(as);
 	return 0;
@@ -1095,4 +1097,5 @@
 
 	as->vlan_table[0] = ar7240sw_port_mask_all(as);
+	as->init = true;
 
 	return as;
Index: /src/linux/universal/linux-3.3/drivers/net/ethernet/ag71xx/ag71xx_ar7240.c
===================================================================
--- /src/linux/universal/linux-3.3/drivers/net/ethernet/ag71xx/ag71xx_ar7240.c	(revision 18885)
+++ /src/linux/universal/linux-3.3/drivers/net/ethernet/ag71xx/ag71xx_ar7240.c	(revision 18886)
@@ -291,4 +291,5 @@
 	u8 ver;
 	bool vlan;
+	bool init;
 	u16 vlan_id[AR7240_MAX_VLANS];
 	u8 vlan_table[AR7240_MAX_VLANS];
@@ -864,5 +865,5 @@
 
 	memset(portmask, 0, sizeof(portmask));
-	if (as->vlan) {
+	if (!as->init) {
 		/* calculate the port destination masks and load vlans
 		 * into the vlan translation unit */
@@ -907,4 +908,5 @@
 {
 	struct ar7240sw *as = sw_to_ar7240(dev);
+	as->init = false;
 	ar7240sw_reset(as);
 	return 0;
@@ -1095,4 +1097,5 @@
 
 	as->vlan_table[0] = ar7240sw_port_mask_all(as);
+	as->init = true;
 
 	return as;
Index: /src/linux/universal/linux-3.3/drivers/net/ethernet/ag934x/ag71xx_ar7240.c
===================================================================
--- /src/linux/universal/linux-3.3/drivers/net/ethernet/ag934x/ag71xx_ar7240.c	(revision 18885)
+++ /src/linux/universal/linux-3.3/drivers/net/ethernet/ag934x/ag71xx_ar7240.c	(revision 18886)
@@ -291,4 +291,5 @@
 	u8 ver;
 	bool vlan;
+	bool init;
 	u16 vlan_id[AR7240_MAX_VLANS];
 	u8 vlan_table[AR7240_MAX_VLANS];
@@ -864,5 +865,5 @@
 
 	memset(portmask, 0, sizeof(portmask));
-	if (as->vlan) {
+	if (!as->init) {
 		/* calculate the port destination masks and load vlans
 		 * into the vlan translation unit */
@@ -907,4 +908,5 @@
 {
 	struct ar7240sw *as = sw_to_ar7240(dev);
+	as->init = false;
 	ar7240sw_reset(as);
 	return 0;
@@ -1095,4 +1097,5 @@
 
 	as->vlan_table[0] = ar7240sw_port_mask_all(as);
+	as->init = true;
 
 	return as;
