diff options
Diffstat (limited to 'scripts/kconfig/symbol.c')
| -rw-r--r-- | scripts/kconfig/symbol.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 10d96c4188dd..29bff43adc5e 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c | |||
| @@ -380,11 +380,22 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val) | |||
| 380 | sym->flags &= ~SYMBOL_NEW; | 380 | sym->flags &= ~SYMBOL_NEW; |
| 381 | sym_set_changed(sym); | 381 | sym_set_changed(sym); |
| 382 | } | 382 | } |
| 383 | /* | ||
| 384 | * setting a choice value also resets the new flag of the choice | ||
| 385 | * symbol and all other choice values. | ||
| 386 | */ | ||
| 383 | if (sym_is_choice_value(sym) && val == yes) { | 387 | if (sym_is_choice_value(sym) && val == yes) { |
| 384 | struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); | 388 | struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); |
| 389 | struct property *prop; | ||
| 390 | struct expr *e; | ||
| 385 | 391 | ||
| 386 | cs->user.val = sym; | 392 | cs->user.val = sym; |
| 387 | cs->flags &= ~SYMBOL_NEW; | 393 | cs->flags &= ~SYMBOL_NEW; |
| 394 | prop = sym_get_choice_prop(cs); | ||
| 395 | for (e = prop->expr; e; e = e->left.expr) { | ||
| 396 | if (e->right.sym->visible != no) | ||
| 397 | e->right.sym->flags &= ~SYMBOL_NEW; | ||
| 398 | } | ||
| 388 | } | 399 | } |
| 389 | 400 | ||
| 390 | sym->user.tri = val; | 401 | sym->user.tri = val; |
