static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br,
                          u16 vid, u16 flags)
 {
-       const struct net_device_ops *ops = dev->netdev_ops;
+       struct switchdev_obj_port_vlan v = {
+               .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
+               .flags = flags,
+               .vid_begin = vid,
+               .vid_end = vid,
+       };
        int err;
 
-       /* If driver uses VLAN ndo ops, use 8021q to install vid
-        * on device, otherwise try switchdev ops to install vid.
+       /* Try switchdev op first. In case it is not supported, fallback to
+        * 8021q add.
         */
-
-       if (ops->ndo_vlan_rx_add_vid) {
-               err = vlan_vid_add(dev, br->vlan_proto, vid);
-       } else {
-               struct switchdev_obj_port_vlan v = {
-                       .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
-                       .flags = flags,
-                       .vid_begin = vid,
-                       .vid_end = vid,
-               };
-
-               err = switchdev_port_obj_add(dev, &v.obj);
-               if (err == -EOPNOTSUPP)
-                       err = 0;
-       }
-
+       err = switchdev_port_obj_add(dev, &v.obj);
+       if (err == -EOPNOTSUPP)
+               return vlan_vid_add(dev, br->vlan_proto, vid);
        return err;
 }
 
 static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br,
                          u16 vid)
 {
-       const struct net_device_ops *ops = dev->netdev_ops;
-       int err = 0;
+       struct switchdev_obj_port_vlan v = {
+               .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
+               .vid_begin = vid,
+               .vid_end = vid,
+       };
+       int err;
 
-       /* If driver uses VLAN ndo ops, use 8021q to delete vid
-        * on device, otherwise try switchdev ops to delete vid.
+       /* Try switchdev op first. In case it is not supported, fallback to
+        * 8021q del.
         */
-
-       if (ops->ndo_vlan_rx_kill_vid) {
+       err = switchdev_port_obj_del(dev, &v.obj);
+       if (err == -EOPNOTSUPP) {
                vlan_vid_del(dev, br->vlan_proto, vid);
-       } else {
-               struct switchdev_obj_port_vlan v = {
-                       .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
-                       .vid_begin = vid,
-                       .vid_end = vid,
-               };
-
-               err = switchdev_port_obj_del(dev, &v.obj);
-               if (err == -EOPNOTSUPP)
-                       err = 0;
+               return 0;
        }
-
        return err;
 }