summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-ast2500/recipes-phosphor/sensors/dbus-sensors/0003-Fix-PSU-PWM-fan-control.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-ast2500/recipes-phosphor/sensors/dbus-sensors/0003-Fix-PSU-PWM-fan-control.patch')
-rw-r--r--meta-openbmc-mods/meta-ast2500/recipes-phosphor/sensors/dbus-sensors/0003-Fix-PSU-PWM-fan-control.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/meta-openbmc-mods/meta-ast2500/recipes-phosphor/sensors/dbus-sensors/0003-Fix-PSU-PWM-fan-control.patch b/meta-openbmc-mods/meta-ast2500/recipes-phosphor/sensors/dbus-sensors/0003-Fix-PSU-PWM-fan-control.patch
new file mode 100644
index 000000000..49aaaf5f9
--- /dev/null
+++ b/meta-openbmc-mods/meta-ast2500/recipes-phosphor/sensors/dbus-sensors/0003-Fix-PSU-PWM-fan-control.patch
@@ -0,0 +1,61 @@
+From ed3e946c02c89c389c0e28360692e51971734728 Mon Sep 17 00:00:00 2001
+From: James Feist <james.feist@linux.intel.com>
+Date: Thu, 24 Sep 2020 15:31:03 -0700
+Subject: [PATCH 1/1] Fix PSU PWM fan control
+
+105a19754f003956def5934612b1de86225a4bc1 broke the control
+interface range as the interface is supposed to accept 0-255
+fix it.
+
+Tested:
+PSU PID control worked again
+
+Change-Id: I89c03c3382b221256353cc28b1f182c80a063249
+Signed-off-by: James Feist <james.feist@linux.intel.com>
+---
+ src/PwmSensor.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/PwmSensor.cpp b/src/PwmSensor.cpp
+index 0c5d439..4824489 100644
+--- a/src/PwmSensor.cpp
++++ b/src/PwmSensor.cpp
+@@ -27,6 +27,7 @@
+ static constexpr size_t sysPwmMax = 255;
+ static constexpr size_t psuPwmMax = 100;
+ static constexpr double defaultPwm = 30.0;
++static constexpr size_t targetIfaceMax = 255;
+
+ PwmSensor::PwmSensor(const std::string& name, const std::string& sysPath,
+ std::shared_ptr<sdbusplus::asio::connection>& conn,
+@@ -99,7 +100,7 @@ PwmSensor::PwmSensor(const std::string& name, const std::string& sysPath,
+ controlInterface->register_property(
+ "Target", static_cast<uint64_t>(pwmValue),
+ [this](const uint64_t& req, uint64_t& resp) {
+- if (req > pwmMax)
++ if (req > targetIfaceMax)
+ {
+ throw std::runtime_error("Value out of range");
+ return -1;
+@@ -108,7 +109,8 @@ PwmSensor::PwmSensor(const std::string& name, const std::string& sysPath,
+ {
+ return 1;
+ }
+- setValue(req);
++ setValue(
++ std::round(pwmMax * static_cast<double>(req) / targetIfaceMax));
+ resp = req;
+
+ sensorInterface->signal_property("Value");
+@@ -117,6 +119,8 @@ PwmSensor::PwmSensor(const std::string& name, const std::string& sysPath,
+ },
+ [this](uint64_t& curVal) {
+ uint64_t value = getValue();
++ value = static_cast<uint64_t>(std::round(
++ (static_cast<double>(value) / pwmMax) * targetIfaceMax));
+ if (curVal != value)
+ {
+ curVal = value;
+--
+2.17.1
+