kconfig: Fix defconfig when one choice menu selects options that another choice menu...
[carl9170fw.git] / config / confdata.c
index b882b56db09d7da6c2da962aa1d0f9156653efae..bd7a229f15ab26f9008fa83b14bb51346eaa17f0 100644 (file)
@@ -1146,7 +1146,7 @@ static void randomize_choice_values(struct symbol *csym)
        csym->flags &= ~(SYMBOL_VALID);
 }
 
-static void set_all_choice_values(struct symbol *csym)
+void set_all_choice_values(struct symbol *csym)
 {
        struct property *prop;
        struct symbol *sym;
@@ -1163,7 +1163,7 @@ static void set_all_choice_values(struct symbol *csym)
        }
        csym->flags |= SYMBOL_DEF_USER;
        /* clear VALID to get value calculated */
-       csym->flags &= ~(SYMBOL_VALID);
+       csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
 }
 
 void conf_set_all_new_symbols(enum conf_def_mode mode)
@@ -1265,6 +1265,14 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
         * selected in a choice block and we set it to yes,
         * and the rest to no.
         */
+       if (mode != def_random) {
+               for_all_symbols(i, csym) {
+                       if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
+                           sym_is_choice_value(csym))
+                               csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
+               }
+       }
+
        for_all_symbols(i, csym) {
                if (sym_has_value(csym) || !sym_is_choice(csym))
                        continue;
@@ -1272,7 +1280,5 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
                sym_calc_value(csym);
                if (mode == def_random)
                        randomize_choice_values(csym);
-               else
-                       set_all_choice_values(csym);
        }
 }