diff --git a/provingground/touch_firmware_versions.py b/provingground/touch_firmware_versions.py
index e3c6575..c6d8c30 100755
--- a/provingground/touch_firmware_versions.py
+++ b/provingground/touch_firmware_versions.py
@@ -52,6 +52,18 @@
     self.fw_id = fwid
     self.fw_file = filename
 
+def create_error_info(device, path, error):
+  """Creates a firmwareInfo class with the given error message.
+
+  Args:
+      device: value for firmwareInfo.device.
+      path: value for firmwareInfo.path.
+      error: error message string.
+  """
+  error_values = firmwareInfo(device, path)
+  error_values.problem_found = True
+  error_values.error = error
+  return error_values
 
 def find_value_of_variable(var, text):
   """Returns the value as defined for the given variable in the given text.
@@ -75,7 +87,7 @@
 def reduce_string(link, text):
   """Finds the absolute value of the given string.
 
-  Assumes variables embedded in a string are in ${VAR} or \s$VAR\s format.
+  Assumes variables embedded in a string are in ${VAR} or $VAR format.
   E.g., given '"${PRODUCT_ID_TP}_${FIRMWARE_VERSION_TP}.bin"' return
   '85.0_7.0.bin', after following all variables.
   Assumes the entire string could be a varible of the form $VAR (no { }).
@@ -107,7 +119,7 @@
   return reduce_string(new_link, text)
 
 
-def find_info_from_line(info, line, text):
+def find_info_from_dosym_line(info, line, text):
   """Finds the info to be output for the given dosym line.
 
   Makes exceptions for known formatting problems.
@@ -141,14 +153,15 @@
     new_line = list(line)
     if bad_fmt in line[2]:
       new_line[2] = line[2].replace(bad_fmt, good_fmt)
-      find_info_from_line(info, new_line, text)
+      find_info_from_dosym_line(info, new_line, text)
   elif info.device == 'kip' and link_from.find('dummy') >= 0:
     info.hw_id = None
   elif info.device == 'sumo' and link_to and 'fw.bin' not in link_to:
     info.hw_id = None
+  elif (info.device == 'poppy' or info.device == 'meowth') and not info.fw_file:
+    info.fw_file = os.path.basename(line[2]).replace('"', '')
 
-
-def find_firmwares_in_file(path):
+def find_dosym_firmwares_in_file(path):
   """Finds all dosym lines in the file and outputs values as needed.
 
   If anything went wrong, outputs the devicename for manual inspection.
@@ -156,19 +169,10 @@
   Args:
     path: the path to the ebuild file.
   """
-  def create_error_info(device, path, error):
-    error_values = firmwareInfo(device, path)
-    error_values.problem_found = True
-    error_values.error = error
-    return error_values
 
-  search = re.search('/(overlay-)?(variant-)?(baseboard-)?([^/]*?)(-private)?/',
-                     path)
-  if not search:
-    return [create_error_info(
-        path, path, 'Project path did not match expected format!')]
-
-  device = search.group(4)
+  device = find_device_from_path(path)
+  if not device:
+    return [create_error_info(path, path, 'Project path error!')]
 
   with open(path) as fh:
     text = fh.read()
@@ -198,7 +202,7 @@
   values_list = []
   for line in search:
     values = firmwareInfo(device, path)
-    find_info_from_line(values, line, text)
+    find_info_from_dosym_line(values, line, text)
     if values.hw_id != None:
       if values.hw_id == '' or values.fw_id == '' or values.fw_file == '':
         values.problem_found = True
@@ -208,6 +212,55 @@
 
   return values_list
 
+def find_model_firmwares_in_file(path):
+  """Finds the touch firmwares described in dtsi files, e.g. for coral.
+
+  Args:
+      path: the path to the given dtsi file.
+  """
+  device = find_device_from_path(path)
+  if not device:
+    return [create_error_info(path, path, 'Project path error!')]
+
+  model = os.path.basename(os.path.split(path)[0])
+  device_model = '%s_%s' % (device, model)
+
+  with open(path) as fh:
+    text = fh.read()
+
+  # Find the touch section, if any.
+  search = re.search(r'touch .*', text, re.DOTALL)
+  if not search:
+    return []
+  touch = search.group(0)
+
+  search = re.findall(r'touch-type\s*=[<&\s]*([^\s;>]+)[>;\s\{\}]*pid\s*'
+                      r'=[\s"]*([^\s"]+)[;\s"]*version\s*=[\s"]*([^\s;"]+)',
+                      touch, re.DOTALL)
+  if not search:
+    return [create_error_info(device_model, path, 'No devices found!')]
+
+  value_list = []
+  for match in search:
+    value_info = firmwareInfo(device_model, path)
+    # hwid (pid), fwid (version), filename (touch-type)
+    value_info.set_ids(match[1], match[2], match[0])
+    value_list.append(value_info)
+
+  return value_list
+
+def find_device_from_path(path):
+  """Returns the device name, given the filepath to the device's overlay.
+
+  Args:
+      path: the path to the given overlay file.
+  """
+  search = re.search('/(overlay-)?(variant-)?(baseboard-)?([^/]*?)(-private)?/',
+                     path)
+  if not search:
+    return None
+
+  return search.group(4)
 
 def firmware_versions():
   """Finds all touch-firmware files and their firmware values."""
@@ -215,17 +268,26 @@
   src_dir = os.path.join(file_dir, SRC_DIR)
   os.chdir(src_dir)
 
+  values_list = []
+
   # Find ebuild files, e.g. chromeos-touch-firmware-caroline-0.0.1.ebuild
   find_output = ''
-  cmd = 'find %s -regex .*touch-firmware-.*-[0-9.]+\.ebuild'
+  cmd = r'find %s -regex .*touch-firmware-.*-[0-9.]+\.ebuild'
   for d in ['private-overlays/', 'overlays/']:
     find_output += subprocess.check_output((cmd % d).split(' '))
   ebuilds = find_output.split()
   ebuilds.sort()
-
-  values_list = []
   for path in ebuilds:
-    values_list += find_firmwares_in_file(path)
+    values_list += find_dosym_firmwares_in_file(path)
+
+  # Find the model.dtsi files used by platforms like coral.
+  find_output = ''
+  cmd = 'find %s -regex .*model.dtsi'
+  for d in ['private-overlays/', 'overlays/']:
+    find_output += subprocess.check_output((cmd % d).split(' '))
+  dtsis = find_output.split()
+  for path in dtsis:
+    values_list += find_model_firmwares_in_file(path)
 
   values_list.sort(key=lambda x: x.device)
   return values_list
