# # Copyright (c) 2018 Bobby Noelte # # SPDX-License-Identifier: Apache-2.0 # from extract.globals import * from extract.directive import DTDirective ## # @brief Manage pinctrl-x directive. # class DTPinCtrl(DTDirective): def __init__(self): pass ## # @brief Extract pinctrl information. # # @param node_address Address of node owning the pinctrl definition. # @param yaml YAML definition for the owning node. # @param prop pinctrl-x key # @param def_label Define label string of client node owning the pinctrl # definition. # def extract(self, node_address, yaml, prop, def_label): pinconf = reduced[node_address]['props'][prop] prop_list = [] if not isinstance(pinconf, list): prop_list.append(pinconf) else: prop_list = list(pinconf) def_prefix = def_label.split('_') prop_def = {} for p in prop_list: pin_node_address = phandles[p] pin_subnode = '/'.join(pin_node_address.split('/')[-1:]) cell_yaml = yaml[get_compat(pin_node_address)] cell_prefix = 'PINMUX' post_fix = [] if cell_prefix is not None: post_fix.append(cell_prefix) for subnode in reduced.keys(): if pin_subnode in subnode and pin_node_address != subnode: # found a subnode underneath the pinmux handle pin_label = def_prefix + post_fix + subnode.split('/')[-2:] for i, cells in enumerate(reduced[subnode]['props']): key_label = list(pin_label) + \ [cell_yaml['#cells'][0]] + [str(i)] func_label = key_label[:-2] + \ [cell_yaml['#cells'][1]] + [str(i)] key_label = convert_string_to_label('_'.join(key_label)) func_label = convert_string_to_label('_'.join(func_label)) prop_def[key_label] = cells prop_def[func_label] = \ reduced[subnode]['props'][cells] insert_defs(node_address, prop_def, {}) ## # @brief Management information for pinctrl-[x]. pinctrl = DTPinCtrl()