new_contents: #!/usr/bin/env python3
  #
  # Copyright (c) 2022 Kumar Gala <galak@kernel.org>
  #
  # SPDX-License-Identifier: Apache-2.0
  
  import argparse
  import os
  import sys
  import re
  
  import yaml
  try:
      # Use the C LibYAML parser if available, rather than the Python parser.
      from yaml import CLoader as Loader
  except ImportError:
      from yaml import Loader     # type: ignore
  
  sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'python-devicetree',
                                  'src'))
  
  def binding_paths(bindings_dirs):
      # Returns a list with the paths to all bindings (.yaml files) in
      # 'bindings_dirs'
  
      binding_paths = []
  
      for bindings_dir in bindings_dirs:
          for root, _, filenames in os.walk(bindings_dir):
              for filename in filenames:
                  if filename.endswith(".yaml") or filename.endswith(".yml"):
                      binding_paths.append(os.path.join(root, filename))
  
      return binding_paths
  
  def parse_args():
      # Returns parsed command-line arguments
  
      parser = argparse.ArgumentParser()
      parser.add_argument("--kconfig-out", required=True,
                          help="path to write the Kconfig file")
      parser.add_argument("--bindings-dirs", nargs='+', required=True,
                          help="directory with bindings in YAML format, "
                          "we allow multiple")
  
      return parser.parse_args()
  
  def printfile(s):
      print(s, file=kconfig_file)
  
  def str2ident(s):
      # Converts 's' to a form suitable for (part of) an identifier
  
      return re.sub('[-,.@/+]', '_', s.upper())
  
  def compat2kconfig(compat):
      compat_ident = str2ident(compat)
  
      printfile(f'')
      printfile(f'DT_COMPAT_{compat_ident} := {compat}')
      printfile(f'')
      printfile(f'config DT_HAS_{compat_ident}_ENABLED')
      printfile(f'\tdef_bool $(dt_compat_enabled,$(DT_COMPAT_{compat_ident}))')
  
  def main():
      global kconfig_file
      args = parse_args()
  
      compat_list = []
  
      for binding_path in binding_paths(args.bindings_dirs):
          with open(binding_path, encoding="utf-8") as f:
              contents = f.read()
  
              try:
                  # Parsed PyYAML output (Python lists/dictionaries/strings/etc.,
                  # representing the file)
                  raw = yaml.load(contents, Loader=Loader)
              except yaml.YAMLError as e:
                  print(f"WARNING: '{binding_path}' appears in binding "
                        f"directories but isn't valid YAML: {e}")
                  continue
          if 'compatible' not in raw:
              continue
  
          compat_list.append(raw['compatible'])
  
      # Remove any duplicates and sort the list
      compat_list = sorted(set(compat_list))
  
      with open(args.kconfig_out, "w", encoding="utf-8") as kconfig_file:
          printfile(f'# Generated devicetree Kconfig')
          printfile(f'#')
          printfile(f'# SPDX-License-Identifier: Apache-2.0')
  
          for c in compat_list:
              compat2kconfig(c)
  
  
  if __name__ == "__main__":
      main()
  
subject: Add simple script to generate Kconfig.dts based on bindings