.bt_coex_active = true,
        .power_level = IWL_POWER_INDEX_1,
        .bt_ch_announce = true,
-       .wanted_ucode_alternative = 1,
        .auto_agg = true,
        /* the rest are 0 by default */
 };
 
 module_param_named(fw_restart, iwlagn_mod_params.restart_fw, int, S_IRUGO);
 MODULE_PARM_DESC(fw_restart, "restart firmware in case of error");
 
-module_param_named(ucode_alternative,
-                  iwlagn_mod_params.wanted_ucode_alternative,
-                  int, S_IRUGO);
-MODULE_PARM_DESC(ucode_alternative,
-                "specify ucode alternative to use from ucode file");
-
 module_param_named(antenna_coupling, iwlagn_mod_params.ant_coupling,
                   int, S_IRUGO);
 MODULE_PARM_DESC(antenna_coupling,
 
        struct iwl_ucode_tlv *tlv;
        size_t len = ucode_raw->size;
        const u8 *data;
-       int wanted_alternative = iwlagn_mod_params.wanted_ucode_alternative;
-       int tmp;
-       u64 alternatives;
        u32 tlv_len;
        enum iwl_ucode_tlv_type tlv_type;
        const u8 *tlv_data;
                return -EINVAL;
        }
 
-       /*
-        * Check which alternatives are present, and "downgrade"
-        * when the chosen alternative is not present, warning
-        * the user when that happens. Some files may not have
-        * any alternatives, so don't warn in that case.
-        */
-       alternatives = le64_to_cpu(ucode->alternatives);
-       tmp = wanted_alternative;
-       if (wanted_alternative > 63)
-               wanted_alternative = 63;
-       while (wanted_alternative && !(alternatives & BIT(wanted_alternative)))
-               wanted_alternative--;
-       if (wanted_alternative && wanted_alternative != tmp)
-               IWL_WARN(drv,
-                        "uCode alternative %d not available, choosing %d\n",
-                        tmp, wanted_alternative);
-
        drv->fw.ucode_ver = le32_to_cpu(ucode->ver);
        build = le32_to_cpu(ucode->build);
 
        len -= sizeof(*ucode);
 
        while (len >= sizeof(*tlv)) {
-               u16 tlv_alt;
-
                len -= sizeof(*tlv);
                tlv = (void *)data;
 
                tlv_len = le32_to_cpu(tlv->length);
-               tlv_type = le16_to_cpu(tlv->type);
-               tlv_alt = le16_to_cpu(tlv->alternative);
+               tlv_type = le32_to_cpu(tlv->type);
                tlv_data = tlv->data;
 
                if (len < tlv_len) {
                len -= ALIGN(tlv_len, 4);
                data += sizeof(*tlv) + ALIGN(tlv_len, 4);
 
-               /*
-                * Alternative 0 is always valid.
-                *
-                * Skip alternative TLVs that are not selected.
-                */
-               if (tlv_alt != 0 && tlv_alt != wanted_alternative)
-                       continue;
-
                switch (tlv_type) {
                case IWL_UCODE_TLV_INST:
                        set_sec_data(pieces, IWL_UCODE_REGULAR,
 
  * new TLV uCode file layout
  *
  * The new TLV file format contains TLVs, that each specify
- * some piece of data. To facilitate "groups", for example
- * different instruction image with different capabilities,
- * bundled with the same init image, an alternative mechanism
- * is provided:
- * When the alternative field is 0, that means that the item
- * is always valid. When it is non-zero, then it is only
- * valid in conjunction with items of the same alternative,
- * in which case the driver (user) selects one alternative
- * to use.
+ * some piece of data.
  */
 
 enum iwl_ucode_tlv_type {
 };
 
 struct iwl_ucode_tlv {
-       __le16 type;            /* see above */
-       __le16 alternative;     /* see comment */
+       __le32 type;            /* see above */
        __le32 length;          /* not including type/length fields */
        u8 data[0];
 };
        u8 human_readable[64];
        __le32 ver;             /* major/minor/API/serial */
        __le32 build;
-       __le64 alternatives;    /* bitmask of valid alternatives */
+       __le64 ignore;
        /*
         * The data contained herein has a TLV layout,
         * see above for the TLV header and types.
 
  * @debug_level: levels are IWL_DL_*
  * @ant_coupling: antenna coupling in dB, default = 0
  * @bt_ch_announce: BT channel inhibition, default = enable
- * @wanted_ucode_alternative: ucode alternative to use, default = 1
  * @auto_agg: enable agg. without check, default = true
  */
 struct iwl_mod_params {
        u32 debug_level;
        int ant_coupling;
        bool bt_ch_announce;
-       int wanted_ucode_alternative;
        bool auto_agg;
 };