Add GPIO Presence

Add the GPIO Presence service file and needed Witherspoon
conf files for power supply GPIO presence detection.

Resolves openbmc/openbmc#1329

Change-Id: Ie8d5e3e6c2bda1c85fd10a4cffacfdd7ce9840ae
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-watchdog.bb b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-watchdog.bb
index 1fdca17..c09b9df 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-watchdog.bb
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/fans/witherspoon-fan-watchdog.bb
@@ -4,7 +4,7 @@
 inherit obmc-phosphor-license
 inherit obmc-phosphor-systemd
 
-RDEPENDS_${PN} += "phosphor-gpio-monitor"
+RDEPENDS_${PN} += "virtual/obmc-gpio-monitor"
 RDEPENDS_${PN} += "busybox"
 
 RESET_SERVICE = "witherspoon-reset-fan-watchdog.service"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor.bbappend b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor.bbappend
new file mode 100644
index 0000000..9d1ca66
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor.bbappend
@@ -0,0 +1,14 @@
+FILESEXTRAPATHS_append := "${THISDIR}/${PN}:"
+
+OBMC_POWERSUPPLY_INSTANCES = "0 1"
+
+TMPL_POWERSUPPLY = "phosphor-gpio-presence@.service"
+INSTFMT_POWERSUPPLY = "phosphor-gpio-presence@{0}.service"
+POWERSUPPLY_TGT = "${SYSTEMD_DEFAULT_TARGET}"
+FMT_POWERSUPPLY = "../${TMPL_POWERSUPPLY}:${POWERSUPPLY_TGT}.requires/${INSTFMT_POWERSUPPLY}"
+
+SYSTEMD_LINK_${PN}-presence += "${@compose_list(d, 'FMT_POWERSUPPLY', 'OBMC_POWERSUPPLY_INSTANCES')}"
+
+POWERSUPPLY_ENV_FMT  = "obmc/gpio/phosphor-power-supply-{0}.conf"
+
+SYSTEMD_ENVIRONMENT_FILE_${PN}-presence += "${@compose_list(d, 'POWERSUPPLY_ENV_FMT', 'OBMC_POWERSUPPLY_INSTANCES')}"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/phosphor-power-supply-0.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/phosphor-power-supply-0.conf
new file mode 100644
index 0000000..1248641
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/phosphor-power-supply-0.conf
@@ -0,0 +1,4 @@
+INVENTORY=/system/chassis/power_supply0
+PATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=127
+NAME=power_supply0
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/phosphor-power-supply-1.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/phosphor-power-supply-1.conf
new file mode 100644
index 0000000..512905b
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/gpio/phosphor-gpio-monitor/obmc/gpio/phosphor-power-supply-1.conf
@@ -0,0 +1,4 @@
+INVENTORY=/system/chassis/power_supply1
+PATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=104
+NAME=power_supply1
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
index db27edc..f2756d0 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
@@ -1,2 +1,2 @@
-RDEPENDS_${PN}-inventory += "openpower-fru-vpd openpower-occ-control phosphor-cooling-type"
+RDEPENDS_${PN}-inventory += "openpower-fru-vpd openpower-occ-control phosphor-cooling-type virtual/obmc-gpio-presence"
 RDEPENDS_${PN}-fan-control += "witherspoon-fan-watchdog"
diff --git a/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor.bb b/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor.bb
index 70f01dd..6fc12ef 100644
--- a/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor.bb
+++ b/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor.bb
@@ -8,19 +8,47 @@
 inherit autotools pkgconfig
 inherit obmc-phosphor-dbus-service
 
-RPROVIDES_${PN} += "virtual/obmc-gpio-monitor"
+GPIO_PACKAGES = " \
+        ${PN}-monitor \
+        ${PN}-presence \
+"
+
+PACKAGES += "${GPIO_PACKAGES}"
+PACKAGES_remove = "${PN}"
+RDEPENDS_${PN}-dev = "${GPIO_PACKAGES}"
+RDEPENDS_${PN}-staticdev = "${GPIO_PACKAGES}"
+SYSTEMD_PACKAGES = "${GPIO_PACKAGES}"
+
+RPROVIDES_${PN}-monitor += "virtual/obmc-gpio-monitor"
+RPROVIDES_${PN}-presence += "virtual/obmc-gpio-presence"
+
 PROVIDES += "virtual/obmc-gpio-monitor"
+PROVIDES += "virtual/obmc-gpio-presence"
 
 DEPENDS += "autoconf-archive-native"
 DEPENDS += "sdbusplus sdbusplus-native"
 DEPENDS += "phosphor-dbus-interfaces"
 DEPENDS += "libevdev"
 DEPENDS += "phosphor-logging"
-RDEPENDS_${PN} += "libsystemd"
-RDEPENDS_${PN} += "libevdev"
-RDEPENDS_${PN} += "phosphor-logging"
 
-SYSTEMD_SERVICE_${PN} += "phosphor-gpio-monitor@.service"
+RDEPENDS_${PN}-monitor += " \
+    libsystemd \
+    libevdev \
+    phosphor-logging \
+"
+RDEPENDS_${PN}-presence += " \
+    libsystemd \
+    libevdev \
+    phosphor-logging \
+    sdbusplus \
+"
+
+SYSTEMD_SERVICE_${PN}-monitor += "phosphor-gpio-monitor@.service"
+SYSTEMD_SERVICE_${PN}-presence += "phosphor-gpio-presence@.service"
+
+FILES_${PN}-monitor += "${sbindir}/phosphor-gpio-monitor"
+FILES_${PN}-monitor += "${sbindir}/phosphor-gpio-util"
+FILES_${PN}-presence += "${sbindir}/phosphor-gpio-presence"
 
 SRC_URI += "git://github.com/openbmc/phosphor-gpio-monitor"
 SRCREV = "5d89f18a92ceeead129729811208ee13a9daf721"
diff --git a/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-gpio-presence@.service b/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-gpio-presence@.service
new file mode 100644
index 0000000..7872ce6
--- /dev/null
+++ b/meta-phosphor/common/recipes-phosphor/gpio/phosphor-gpio-monitor/phosphor-gpio-presence@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Phosphor GPIO %I Presence
+Wants=mapper-wait@-xyz-openbmc_project-inventory.service
+After=mapper-wait@-xyz-openbmc_project-inventory.service
+ConditionPathExists={envfiledir}/obmc/gpio/phosphor-power-supply-%i.conf
+
+[Service]
+EnvironmentFile={envfiledir}/obmc/gpio/phosphor-power-supply-%i.conf
+ExecStart={sbindir}/phosphor-gpio-presence --path=${{PATH}} --inventory=${{INVENTORY}} --key=${{KEY}} --name=${{NAME}}
+
+[Install]
+RequiredBy={SYSTEMD_DEFAULT_TARGET}