.g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6097,
                .ops = &mv88e6085_ops,
        },
 
                .age_time_coeff = 15000,
                .g1_irqs = 8,
                .atu_move_port_mask = 0xf,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6095,
                .ops = &mv88e6095_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6097,
                .ops = &mv88e6097_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6165,
                .ops = &mv88e6123_ops,
        },
 
                .age_time_coeff = 15000,
                .g1_irqs = 9,
                .atu_move_port_mask = 0xf,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6185,
                .ops = &mv88e6131_ops,
        },
 
                .atu_move_port_mask = 0x1f,
                .g2_irqs = 10,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6341,
                .ops = &mv88e6141_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6165,
                .ops = &mv88e6161_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6165,
                .ops = &mv88e6165_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6351,
                .ops = &mv88e6171_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6352,
                .ops = &mv88e6172_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6351,
                .ops = &mv88e6175_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6352,
                .ops = &mv88e6176_ops,
        },
 
                .age_time_coeff = 15000,
                .g1_irqs = 8,
                .atu_move_port_mask = 0xf,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6185,
                .ops = &mv88e6185_ops,
        },
 
                .g1_irqs = 9,
                .g2_irqs = 14,
                .pvt = true,
+               .multi_chip = true,
                .atu_move_port_mask = 0x1f,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
                .ops = &mv88e6190_ops,
        },
 
                .g2_irqs = 14,
                .atu_move_port_mask = 0x1f,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
                .ops = &mv88e6190x_ops,
        },
 
                .g2_irqs = 14,
                .atu_move_port_mask = 0x1f,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
                .ops = &mv88e6191_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6352,
                .ops = &mv88e6240_ops,
        },
 
                .g2_irqs = 14,
                .atu_move_port_mask = 0x1f,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
                .ops = &mv88e6290_ops,
        },
 
                .g1_irqs = 8,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6320,
                .ops = &mv88e6320_ops,
        },
 
                .age_time_coeff = 15000,
                .g1_irqs = 8,
                .atu_move_port_mask = 0xf,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6320,
                .ops = &mv88e6321_ops,
        },
 
                .atu_move_port_mask = 0x1f,
                .g2_irqs = 10,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6341,
                .ops = &mv88e6341_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6351,
                .ops = &mv88e6350_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6351,
                .ops = &mv88e6351_ops,
        },
 
                .g2_irqs = 10,
                .atu_move_port_mask = 0xf,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_EDSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6352,
                .ops = &mv88e6352_ops,
        },
        [MV88E6390] = {
                .g2_irqs = 14,
                .atu_move_port_mask = 0x1f,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
                .ops = &mv88e6390_ops,
        },
        [MV88E6390X] = {
                .g2_irqs = 14,
                .atu_move_port_mask = 0x1f,
                .pvt = true,
+               .multi_chip = true,
                .tag_protocol = DSA_TAG_PROTO_DSA,
-               .flags = MV88E6XXX_FLAGS_FAMILY_6390,
                .ops = &mv88e6390x_ops,
        },
 };
 {
        if (sw_addr == 0)
                chip->smi_ops = &mv88e6xxx_smi_single_chip_ops;
-       else if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_MULTI_CHIP))
+       else if (chip->info->multi_chip)
                chip->smi_ops = &mv88e6xxx_smi_multi_chip_ops;
        else
                return -EINVAL;
 
        MV88E6XXX_FAMILY_6390,  /* 6190 6190X 6191 6290 6390 6390X */
 };
 
-enum mv88e6xxx_cap {
-       /* Multi-chip Addressing Mode.
-        * Some chips respond to only 2 registers of its own SMI device address
-        * when it is non-zero, and use indirect access to internal registers.
-        */
-       MV88E6XXX_CAP_SMI_CMD,          /* (0x00) SMI Command */
-       MV88E6XXX_CAP_SMI_DATA,         /* (0x01) SMI Data */
-};
-
-/* Bitmask of capabilities */
-#define MV88E6XXX_FLAG_SMI_CMD         BIT_ULL(MV88E6XXX_CAP_SMI_CMD)
-#define MV88E6XXX_FLAG_SMI_DATA                BIT_ULL(MV88E6XXX_CAP_SMI_DATA)
-
-/* Multi-chip Addressing Mode */
-#define MV88E6XXX_FLAGS_MULTI_CHIP     \
-       (MV88E6XXX_FLAG_SMI_CMD |       \
-        MV88E6XXX_FLAG_SMI_DATA)
-
-#define MV88E6XXX_FLAGS_FAMILY_6095    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6097    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6165    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6185    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6320    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6341    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6351    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6352    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
-#define MV88E6XXX_FLAGS_FAMILY_6390    \
-       (MV88E6XXX_FLAGS_MULTI_CHIP)
-
 struct mv88e6xxx_ops;
 
 struct mv88e6xxx_info {
        unsigned int g1_irqs;
        unsigned int g2_irqs;
        bool pvt;
+
+       /* Multi-chip Addressing Mode.
+        * Some chips respond to only 2 registers of its own SMI device address
+        * when it is non-zero, and use indirect access to internal registers.
+        */
+       bool multi_chip;
        enum dsa_tag_protocol tag_protocol;
-       unsigned long long flags;
 
        /* Mask for FromPort and ToPort value of PortVec used in ATU Move
         * operation. 0 means that the ATU Move operation is not supported.
        int type;
 };
 
-static inline bool mv88e6xxx_has(struct mv88e6xxx_chip *chip,
-                                unsigned long flags)
-{
-       return (chip->info->flags & flags) == flags;
-}
-
 static inline bool mv88e6xxx_has_pvt(struct mv88e6xxx_chip *chip)
 {
        return chip->info->pvt;