summaryrefslogtreecommitdiff
path: root/kconfig/symbol.c
diff options
context:
space:
mode:
authorBryan Hundven <bryanhundven@gmail.com>2016-12-01 00:34:39 (GMT)
committerBryan Hundven <bryanhundven@gmail.com>2016-12-01 00:34:39 (GMT)
commit89a2182f14dec1f8dd2ff633c65449ca5efda95b (patch)
tree20b8ec7906236c6671c42af3bcc82f1a99d1485d /kconfig/symbol.c
parent699a54d8cedef2883ca6834feed99f8f2b077332 (diff)
kconfig: sync upstream changes
Signed-off-by: Bryan Hundven <bryanhundven@gmail.com>
Diffstat (limited to 'kconfig/symbol.c')
-rw-r--r--kconfig/symbol.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/kconfig/symbol.c b/kconfig/symbol.c
index 25cf0c2..2432298 100644
--- a/kconfig/symbol.c
+++ b/kconfig/symbol.c
@@ -209,12 +209,26 @@ static void sym_set_all_changed(void)
static void sym_calc_visibility(struct symbol *sym)
{
struct property *prop;
+ struct symbol *choice_sym = NULL;
tristate tri;
/* any prompt visible? */
tri = no;
+
+ if (sym_is_choice_value(sym))
+ choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
+
for_all_prompts(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
+ /*
+ * Tristate choice_values with visibility 'mod' are
+ * not visible if the corresponding choice's value is
+ * 'yes'.
+ */
+ if (choice_sym && sym->type == S_TRISTATE &&
+ prop->visible.tri == mod && choice_sym->curr.tri == yes)
+ prop->visible.tri = no;
+
tri = EXPR_OR(tri, prop->visible.tri);
}
if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))