summaryrefslogtreecommitdiffstats
path: root/control/zone.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'control/zone.cpp')
-rw-r--r--control/zone.cpp33
1 files changed, 28 insertions, 5 deletions
diff --git a/control/zone.cpp b/control/zone.cpp
index d569aa8..5ed0c3a 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -110,11 +110,6 @@ void Zone::setSpeed(uint64_t speed)
{
speed = _floorSpeed;
}
- //TODO openbmc/openbmc#1626 Move to control algorithm function
- if (speed > _ceilingSpeed)
- {
- speed = _ceilingSpeed;
- }
fan->setSpeed(speed);
}
}
@@ -136,6 +131,34 @@ void Zone::setActiveAllow(const Group* group, bool isActiveAllow)
}
}
+void Zone::requestSpeedIncrease(uint64_t targetDelta)
+{
+ // Only increase speed when delta is higher than
+ // the current increase delta for the zone and currently under ceiling
+ if (targetDelta > _incSpeedDelta &&
+ _targetSpeed < _ceilingSpeed)
+ {
+ _targetSpeed = (targetDelta - _incSpeedDelta) + _targetSpeed;
+ _incSpeedDelta = targetDelta;
+ //TODO openbmc/openbmc#1625 Cancel current timer countdown
+ //TODO Floor speed above target, update target to floor speed
+ if (_targetSpeed < _floorSpeed)
+ {
+ _targetSpeed = _floorSpeed;
+ }
+ // Target speed can not go above a defined ceiling speed
+ if (_targetSpeed > _ceilingSpeed)
+ {
+ _targetSpeed = _ceilingSpeed;
+ }
+
+ setSpeed(_targetSpeed);
+ //TODO openbmc/openbmc#1625 Start timer countdown for fan speed increase
+ }
+ //TODO openbmc/openbmc#1625 Clear increase delta when timer expires
+ _incSpeedDelta = 0;
+}
+
void Zone::getProperty(sdbusplus::bus::bus& bus,
const std::string& path,
const std::string& iface,
OpenPOWER on IntegriCloud