Recipes for installing fan definition yaml

This provides the phosphor-fan-control-fan-config virtual to
define the fans required by phosphor-fan-control.

On systems with the MRW, phosphor-fan-control-fan-config-mrw-native.bb
will be used and will run a perl script to generate the yaml
from data in the MRW XML.

On systems without the MRW, if nothing else is done a default
fans.yaml file will be installed into the correct location
by phosphor-fan-control-fan-config-native.bb.  To install a
system specific version, put it into that system's layer along
with a .bbappend of this recipe.

Change-Id: I36889a33e16a456a04b94aba7326dd674bfd2904
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/common/recipes-phosphor/fans/phosphor-fan-control-fan-config-mrw-native.bb b/common/recipes-phosphor/fans/phosphor-fan-control-fan-config-mrw-native.bb
new file mode 100644
index 0000000..1eadadf
--- /dev/null
+++ b/common/recipes-phosphor/fans/phosphor-fan-control-fan-config-mrw-native.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Generate fan control YAML from the MRW"
+PR = "r1"
+
+inherit native
+inherit obmc-phosphor-license
+inherit phosphor-fan
+
+DEPENDS += " \
+           mrw-native \
+           mrw-perl-tools-native \
+           "
+
+PROVIDES += "virtual/phosphor-fan-control-fan-config"
+
+S = "${WORKDIR}"
+
+do_compile() {
+    ${bindir}/perl-native/perl \
+        ${bindir}/gen_fan_zone_yaml.pl \
+        -i ${datadir}/obmc-mrw/${MACHINE}.xml \
+        -o ${S}/fans.yaml
+}
+
+do_install() {
+        DEST=${D}${control_datadir}
+        install -D ${S}/fans.yaml ${DEST}/fans.yaml
+}
diff --git a/common/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bb b/common/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bb
new file mode 100644
index 0000000..76b0985
--- /dev/null
+++ b/common/recipes-phosphor/fans/phosphor-fan-control-fan-config-native.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Phosphor fan definition example data"
+PR = "r1"
+
+inherit native
+inherit obmc-phosphor-license
+inherit phosphor-fan
+
+PROVIDES += "virtual/phosphor-fan-control-fan-config"
+
+SRC_URI += "file://fans.yaml"
+
+S = "${WORKDIR}"
+
+do_install() {
+    DEST=${D}${control_datadir}
+    install -D fans.yaml ${DEST}/fans.yaml
+}
diff --git a/common/recipes-phosphor/fans/phosphor-fan-control-fan-config/fans.yaml b/common/recipes-phosphor/fans/phosphor-fan-control-fan-config/fans.yaml
new file mode 100644
index 0000000..8a6c271
--- /dev/null
+++ b/common/recipes-phosphor/fans/phosphor-fan-control-fan-config/fans.yaml
@@ -0,0 +1,2 @@
+#Default fan definition YAML - empty.
+#For format, see documentation in fan control code repository example yaml.
diff --git a/conf/distro/include/phosphor-defaults.inc b/conf/distro/include/phosphor-defaults.inc
index 0ea531b..53298da 100644
--- a/conf/distro/include/phosphor-defaults.inc
+++ b/conf/distro/include/phosphor-defaults.inc
@@ -44,6 +44,11 @@
 # Provides implementations of fan presence detection
 VIRTUAL-RUNTIME_obmc-fan-presence ?= "phosphor-fan-presence-tach"
 
+# obmc-fan-control
+#
+# Provides implementations of fan control
+VIRTUAL-RUNTIME_obmc-fan-control ?= "phosphor-fan-control"
+
 # obmc-inventory-manager
 #
 # Provides an implementation of the xyz.openbmc_project.Inventory.Manager
@@ -147,5 +152,13 @@
 PREFERRED_PROVIDER_virtual/phosphor-fan-presence-config ?= \
     "${@cf_enabled(d, 'obmc-mrw', 'phosphor-fan-presence-mrw-native', 'phosphor-fan-presence-example-native')}"
 
+# The phosphor-fan-control application is data driven and requires a YAML
+# file to define the fans in the system.
+# This virtual is a native recipe that provides that definition by installing
+# the YAML file in the format and native sysroot location expected by
+# the phosphor-fan-control build process in the native sysroot.
+PREFERRED_PROVIDER_virtual/phosphor-fan-control-fan-config ?= \
+    "${@cf_enabled(d, 'obmc-mrw', 'phosphor-fan-control-fan-config-mrw-native', 'phosphor-fan-control-fan-config-native')}"
+
 OBMC_DBUS_PATH_ROOT ?= "/xyz/openbmc_project"
 OBMC_DBUS_IFACE_ROOT ?= "xyz.openbmc_project"