Browse Source

scripts: dts: edtlib: simplification

Small refactorings to simplify code and improve method encapsulation.

Signed-off-by: Florian Grandel <fgrandel@code-for-humans.de>
pull/81557/head
Florian Grandel 10 months ago committed by Anas Nashif
parent
commit
0f1549c575
  1. 64
      scripts/dts/python-devicetree/src/devicetree/edtlib.py

64
scripts/dts/python-devicetree/src/devicetree/edtlib.py

@ -1416,7 +1416,6 @@ class Node:
self.props = {} self.props = {}
node = self._node
if self._binding: if self._binding:
prop2specs = self._binding.prop2specs prop2specs = self._binding.prop2specs
else: else:
@ -1428,12 +1427,11 @@ class Node:
self._init_prop(prop_spec, err_on_deprecated) self._init_prop(prop_spec, err_on_deprecated)
self._check_undeclared_props() self._check_undeclared_props()
elif default_prop_types: elif default_prop_types:
for name in node.props: for name in self._node.props:
if name not in _DEFAULT_PROP_SPECS: if name not in _DEFAULT_PROP_SPECS:
continue continue
prop_spec = _DEFAULT_PROP_SPECS[name] prop_spec = _DEFAULT_PROP_SPECS[name]
val = self._prop_val(name, prop_spec.type, False, False, None, val = self._prop_val(name, prop_spec, err_on_deprecated)
None, err_on_deprecated)
self.props[name] = Property(prop_spec, val, self) self.props[name] = Property(prop_spec, val, self)
def _init_prop(self, prop_spec: PropertySpec, def _init_prop(self, prop_spec: PropertySpec,
@ -1446,9 +1444,7 @@ class Node:
if not prop_type: if not prop_type:
_err(f"'{name}' in {self.binding_path} lacks 'type'") _err(f"'{name}' in {self.binding_path} lacks 'type'")
val = self._prop_val(name, prop_type, prop_spec.deprecated, val = self._prop_val(name, prop_spec, err_on_deprecated)
prop_spec.required, prop_spec.default,
prop_spec.specifier_space, err_on_deprecated)
if val is None: if val is None:
# 'required: false' property that wasn't there, or a property type # 'required: false' property that wasn't there, or a property type
@ -1476,41 +1472,37 @@ class Node:
self.props[name] = Property(prop_spec, val, self) self.props[name] = Property(prop_spec, val, self)
def _prop_val(self, name: str, prop_type: str, def _prop_val(
deprecated: bool, required: bool, self,
default: PropertyValType, name: str,
specifier_space: Optional[str], prop_spec: PropertySpec,
err_on_deprecated: bool) -> PropertyValType: err_on_deprecated: bool,
) -> PropertyValType:
# _init_prop() helper for getting the property's value # _init_prop() helper for getting the property's value
# #
# name: # name:
# Property name from binding # Property name from binding
# #
# prop_type: # prop_spec:
# Property type from binding (a string like "int") # PropertySpec from binding
#
# deprecated:
# True if the property is deprecated
#
# required:
# True if the property is required to exist
#
# default:
# Default value to use when the property doesn't exist, or None if
# the binding doesn't give a default value
#
# specifier_space:
# Property specifier-space from binding (if prop_type is "phandle-array")
# #
# err_on_deprecated: # err_on_deprecated:
# If True, a deprecated property is an error instead of warning. # If True, a deprecated property is an error instead of warning.
node = self._node node = self._node
prop = node.props.get(name) prop = node.props.get(name)
binding_path = prop_spec.binding.path
prop_type = prop_spec.type
deprecated = prop_spec.deprecated
required = prop_spec.required
default = prop_spec.default
specifier_space = prop_spec.specifier_space
if prop and deprecated: if prop and deprecated:
msg = (f"'{name}' is marked as deprecated in 'properties:' " msg = (
f"in {self.binding_path} for node {node.path}.") f"'{name}' is marked as deprecated in 'properties:' "
f"in {binding_path} for node {node.path}."
)
if err_on_deprecated: if err_on_deprecated:
_err(msg) _err(msg)
else: else:
@ -1518,8 +1510,10 @@ class Node:
if not prop: if not prop:
if required and self.status == "okay": if required and self.status == "okay":
_err(f"'{name}' is marked as required in 'properties:' in " _err(
f"{self.binding_path}, but does not appear in {node!r}") f"'{name}' is marked as required in 'properties:' in "
f"{binding_path}, but does not appear in {node!r}"
)
if default is not None: if default is not None:
# YAML doesn't have a native format for byte arrays. We need to # YAML doesn't have a native format for byte arrays. We need to
@ -1534,9 +1528,11 @@ class Node:
if prop_type == "boolean": if prop_type == "boolean":
if prop.type != Type.EMPTY: if prop.type != Type.EMPTY:
_err("'{0}' in {1!r} is defined with 'type: boolean' in {2}, " _err(
"but is assigned a value ('{3}') instead of being empty " "'{0}' in {1!r} is defined with 'type: boolean' in {2}, "
"('{0};')".format(name, node, self.binding_path, prop)) "but is assigned a value ('{3}') instead of being empty "
"('{0};')".format(name, node, binding_path, prop)
)
return True return True
if prop_type == "int": if prop_type == "int":

Loading…
Cancel
Save