scripts: extract_dts_includes.py: generate 'compatible' CONFIG flags

Generate CONFIG_DT_COMPAT flags using available nodes
'compatible' property.
Store them in a bogus node_address key of defs dict so
duplicates could be removed.

Signed-off-by: Bobby Noelte <b0661n0e17e@gmail.com>
Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
This commit is contained in:
Erwan Gouriou 2018-09-14 13:33:38 +02:00 committed by Kumar Gala
commit c5ada39411
3 changed files with 58 additions and 0 deletions

View file

@ -0,0 +1,50 @@
#
# Copyright (c) 2018 Bobby Noelte
#
# SPDX-License-Identifier: Apache-2.0
#
from extract.globals import *
from extract.directive import DTDirective
##
# @brief Manage compatible directives.
#
# Handles:
# - compatible
#
class DTCompatible(DTDirective):
def __init__(self):
pass
##
# @brief Extract compatible
#
# @param node_address Address of node owning the
# compatible definition.
# @param yaml YAML definition for the owning node.
# @param prop compatible property name
# @param names (unused)
# @param def_label Define label string of node owning the
# compatible definition.
#
def extract(self, node_address, yaml, prop, names, def_label):
# compatible definition
compatible = reduced[node_address]['props'][prop]
if not isinstance(compatible, list):
compatible = [compatible, ]
for i, comp in enumerate(compatible):
# Generate #define's
compat_label = convert_string_to_label(str(comp))
compat_defs = 'CONFIG_DT_COMPAT_' + compat_label
load_defs = {
compat_defs: "",
}
insert_defs(node_address, load_defs, {})
##
# @brief Management information for compatible.
compatible = DTCompatible()

View file

@ -121,6 +121,11 @@ def get_phandles(root, name, handles):
def insert_defs(node_address, new_defs, new_aliases):
for key in new_defs.keys():
if key.startswith('CONFIG_DT_COMPAT_'):
node_address = 'Compatibles'
if node_address in defs:
if 'aliases' in defs[node_address]:
defs[node_address]['aliases'].update(new_aliases)

View file

@ -21,6 +21,7 @@ from devicetree import parse_file
from extract.globals import *
from extract.clocks import clocks
from extract.compatible import compatible
from extract.interrupts import interrupts
from extract.reg import reg
from extract.flash import flash
@ -443,6 +444,8 @@ def extract_property(node_compat, yaml, node_address, prop, prop_val, names,
reg.extract(node_address, yaml, prop, names, def_label)
elif prop == 'interrupts' or prop == 'interrupts-extended':
interrupts.extract(node_address, yaml, prop, names, def_label)
elif prop == 'compatible':
compatible.extract(node_address, yaml, prop, names, def_label)
elif 'pinctrl-' in prop:
pinctrl.extract(node_address, yaml, prop, names, def_label)
elif 'clocks' in prop: