meta-facebook: yosemite4: add draft fan table
Description:
- Add draft fan table for yosemite4.
- Will set all PWMs to 60%.
Test Case:
1. Check status of phosphor-pid-control service.
root@bmc:~# systemctl status phosphor-pid-control
* phosphor-pid-control.service -
Phosphor-Pid-Control Margin-based Fan Control Daemon
Loaded: loaded
(/usr/lib/systemd/system/phosphor-pid-control.service;
enabled; preset: enabled)
Active: active (running) since
Fri 2023-10-13 16:37:45 PDT; 12s ago
Main PID: 1715 (swampd)
CPU: 178ms
CGroup: /system.slice/phosphor-pid-control.service
`-1715 /usr/bin/swampd
...
2. Check fan PWM was set to 60%.
root@bmc:~# busctl get-property xyz.openbmc_project.FanSensor \
/xyz/openbmc_project/sensors/fan_pwm/FANBOARD1_FAN1_PWM \
xyz.openbmc_project.Sensor.Value Value
d 60
Change-Id: Iaf6e17026a1f360e3bdffce34c65e1bbff9435e9
Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/config.json b/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/config.json
new file mode 100644
index 0000000..291e0c5
--- /dev/null
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control/config.json
@@ -0,0 +1,603 @@
+{
+ "sensors": [
+ {
+ "name": "MEDUSA_TEMP0_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_TEMP0_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_TEMP1_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_TEMP1_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MGNT_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MGNT_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "SPIDER_TEMP0_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/SPIDER_TEMP0_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "SPIDER_TEMP1_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/SPIDER_TEMP1_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_12VDELTA0_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_12VDELTA0_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_12VDELTA1_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_12VDELTA1_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_12VDELTA2_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_12VDELTA2_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_12VDELTA3_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_12VDELTA3_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_12VEFFUSE_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_12VEFFUSE_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_48VHSC0_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_48VHSC0_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "MEDUSA_48VHSC1_TEMP_C",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/MEDUSA_48VHSC1_TEMP_C",
+ "timeout": 0,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN0_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN0_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN0_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN0_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN0_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN0_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN1_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN1_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN1_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN1_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN1_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN1_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN2_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN2_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN2_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN2_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN2_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN2_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN3_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN3_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN3_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN3_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN3_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN3_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN4_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN4_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN4_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN4_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN4_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN4_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN5_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN5_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN5_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD0_FAN5_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD0_FAN5_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD0_FAN5_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN0_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN0_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN0_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN0_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN0_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN0_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN1_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN1_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN1_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN1_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN1_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN1_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN2_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN2_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN2_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN2_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN2_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN2_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN3_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN3_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN3_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN3_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN3_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN3_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN4_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN4_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN4_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN4_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN4_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN4_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN5_TACH_IL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN5_TACH_IL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN5_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ },
+ {
+ "name": "FANBOARD1_FAN5_TACH_OL",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/FANBOARD1_FAN5_TACH_OL",
+ "writePath": "/xyz/openbmc_project/control/fanpwm/FANBOARD1_FAN5_PWM",
+ "min": 0,
+ "max": 255,
+ "ignoreDbusMinMax": true
+ }
+ ],
+ "zones": [
+ {
+ "id": 1,
+ "failsafePercent": 100.0,
+ "minThermalOutput": 0.0,
+ "cycleTimeBaseMS": 1000,
+ "updateThermalsTimeMS": 1000,
+ "accumulateSetPoint": true,
+ "pids": [
+ {
+ "name": "All Fan",
+ "type": "fan",
+ "inputs": [
+ "FANBOARD0_FAN0_TACH_IL",
+ "FANBOARD0_FAN0_TACH_OL",
+ "FANBOARD0_FAN1_TACH_IL",
+ "FANBOARD0_FAN1_TACH_OL",
+ "FANBOARD0_FAN2_TACH_IL",
+ "FANBOARD0_FAN2_TACH_OL",
+ "FANBOARD0_FAN3_TACH_IL",
+ "FANBOARD0_FAN3_TACH_OL",
+ "FANBOARD0_FAN4_TACH_IL",
+ "FANBOARD0_FAN4_TACH_OL",
+ "FANBOARD0_FAN5_TACH_IL",
+ "FANBOARD0_FAN5_TACH_OL",
+ "FANBOARD1_FAN0_TACH_IL",
+ "FANBOARD1_FAN0_TACH_OL",
+ "FANBOARD1_FAN1_TACH_IL",
+ "FANBOARD1_FAN1_TACH_OL",
+ "FANBOARD1_FAN2_TACH_IL",
+ "FANBOARD1_FAN2_TACH_OL",
+ "FANBOARD1_FAN3_TACH_IL",
+ "FANBOARD1_FAN3_TACH_OL",
+ "FANBOARD1_FAN4_TACH_IL",
+ "FANBOARD1_FAN4_TACH_OL",
+ "FANBOARD1_FAN5_TACH_IL",
+ "FANBOARD1_FAN5_TACH_OL"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "proportionalCoeff": 0.0,
+ "integralCoeff": 0.0,
+ "derivativeCoeff": 0.0,
+ "feedFwdOffsetCoeff": 0.0,
+ "feedFwdGainCoeff": 1.0,
+ "integralLimit_min": 0.0,
+ "integralLimit_max": 0.0,
+ "outLim_min": 0.0,
+ "outLim_max": 100.0,
+ "slewNeg": 0.0,
+ "slewPos": 0.0,
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_TEMP0_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_TEMP0_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_TEMP1_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_TEMP1_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MGNT_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MGNT_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_SPIDER_TEMP0_C",
+ "type": "stepwise",
+ "inputs": [
+ "SPIDER_TEMP0_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_SPIDER_TEMP1_C",
+ "type": "stepwise",
+ "inputs": [
+ "SPIDER_TEMP1_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_12VDELTA0_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_12VDELTA0_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_12VDELTA1_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_12VDELTA1_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_12VDELTA2_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_12VDELTA2_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_12VDELTA3_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_12VDELTA3_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_12VEFFUSE_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_12VEFFUSE_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_48VHSC0_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_48VHSC0_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ },
+ {
+ "name": "Stepwise_MEDUSA_48VHSC1_TEMP_C",
+ "type": "stepwise",
+ "inputs": [
+ "MEDUSA_48VHSC1_TEMP_C"
+ ],
+ "setpoint": 0.0,
+ "pid": {
+ "samplePeriod": 1,
+ "isCeiling": false,
+ "reading": {
+ "0": 20.0
+ },
+ "output": {
+ "0": 60.0
+ },
+ "positiveHysteresis": 0,
+ "negativeHysteresis": 0
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control_%.bbappend b/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
new file mode 100644
index 0000000..2913bf1
--- /dev/null
+++ b/meta-facebook/meta-yosemite4/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS:prepend:= "${THISDIR}/${PN}:"
+SRC_URI:append:yosemite4 = " file://config.json \
+ "
+
+FILES:${PN}:append:yosemite4 = " ${datadir}/swampd/config.json"
+
+do_install:append:yosemite4() {
+ install -d ${D}${datadir}/swampd
+ install -m 0644 -D ${WORKDIR}/config.json ${D}${datadir}/swampd/config.json
+}