mt7530_rmw(priv, MT7530_PVC_P(port), VLAN_ATTR_MASK,
                   VLAN_ATTR(MT7530_VLAN_TRANSPARENT));
 
-       priv->ports[port].vlan_filtering = false;
-
        for (i = 0; i < MT7530_NUM_PORTS; i++) {
                if (dsa_is_user_port(ds, i) &&
-                   priv->ports[i].vlan_filtering) {
+                   dsa_port_is_vlan_filtering(&ds->ports[i])) {
                        all_user_ports_removed = false;
                        break;
                }
                 * And the other port's port matrix cannot be broken when the
                 * other port is still a VLAN-aware port.
                 */
-               if (!priv->ports[i].vlan_filtering &&
-                   dsa_is_user_port(ds, i) && i != port) {
+               if (dsa_is_user_port(ds, i) && i != port &&
+                  !dsa_port_is_vlan_filtering(&ds->ports[i])) {
                        if (dsa_to_port(ds, i)->bridge_dev != bridge)
                                continue;
                        if (priv->ports[i].enable)
 mt7530_port_vlan_filtering(struct dsa_switch *ds, int port,
                           bool vlan_filtering)
 {
-       struct mt7530_priv *priv = ds->priv;
-
-       priv->ports[port].vlan_filtering = vlan_filtering;
-
        if (vlan_filtering) {
                /* The port is being kept as VLAN-unaware port when bridge is
                 * set up with vlan_filtering not being set, Otherwise, the
        /* The port is kept as VLAN-unaware if bridge with vlan_filtering not
         * being set.
         */
-       if (!priv->ports[port].vlan_filtering)
+       if (!dsa_port_is_vlan_filtering(&ds->ports[port]))
                return;
 
        mutex_lock(&priv->reg_mutex);
        /* The port is kept as VLAN-unaware if bridge with vlan_filtering not
         * being set.
         */
-       if (!priv->ports[port].vlan_filtering)
+       if (!dsa_port_is_vlan_filtering(&ds->ports[port]))
                return 0;
 
        mutex_lock(&priv->reg_mutex);