diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c
index c79a92a0a1b284aa5898ee7b161b7339ed2d93f7..57088a97484fa1ae851e0b12c2c7d9602508c4b2 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -593,10 +593,13 @@ ar8216_hw_apply(struct switch_dev *dev)
 			pvid = i;
 		}
 
-		if (priv->vlan && (priv->vlan_tagged & (1 << i))) {
-			egress = AR8216_OUT_ADD_VLAN;
+		if (priv->vlan) {
+			if (priv->vlan_tagged & (1 << i))
+				egress = AR8216_OUT_ADD_VLAN;
+			else
+				egress = AR8216_OUT_STRIP_VLAN;
 		} else {
-			egress = AR8216_OUT_STRIP_VLAN;
+			egress = AR8216_OUT_KEEP;
 		}
 		if (priv->vlan) {
 			ingress = AR8216_IN_SECURE;