summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--control/example/fans.yaml6
-rw-r--r--control/fan.cpp10
-rw-r--r--control/fan.hpp5
-rwxr-xr-xcontrol/gen-fan-zone-defs.py6
-rw-r--r--control/types.hpp5
5 files changed, 24 insertions, 8 deletions
diff --git a/control/example/fans.yaml b/control/example/fans.yaml
index 629c502..2583256 100644
--- a/control/example/fans.yaml
+++ b/control/example/fans.yaml
@@ -9,12 +9,15 @@
# cooling_zone: [The cooling zone number for the fan]
# cooling_profile: [The cooling profile for the fan]
# sensors: [The list of sensors for this fan]
+# target_interface: [The interface implemented by the fan target.
+# Default is xyz.openbmc_project.Control.FanSpeed]
#The cooling zone, a number, and the cooling profile, a string,
#have to match the corresponding values in the fan zone yaml
#so the fans can be merged into the zone definition.
-#Example entries for 2 fan system:
+#Example entries for 2 fan system where fan0 uses default FanSpeed and
+#fan1 uses FanPwm:
#fans:
# - inventory: /system/chassis/motherboard/fan0
# cooling_zone: 0
@@ -26,3 +29,4 @@
# cooling_profile: air
# sensors:
# - fan1
+# target_interface: xyz.openbmc_project.Control.FanPwm
diff --git a/control/fan.cpp b/control/fan.cpp
index f11bf6f..b0881da 100644
--- a/control/fan.cpp
+++ b/control/fan.cpp
@@ -36,13 +36,13 @@ using InternalFailure = sdbusplus::xyz::openbmc_project::Common::
constexpr auto PROPERTY_INTERFACE = "org.freedesktop.DBus.Properties";
constexpr auto FAN_SENSOR_PATH = "/xyz/openbmc_project/sensors/fan_tach/";
-constexpr auto FAN_SENSOR_CONTROL_INTF = "xyz.openbmc_project.Control.FanSpeed";
constexpr auto FAN_TARGET_PROPERTY = "Target";
Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def):
_bus(bus),
- _name(std::get<fanNamePos>(def))
+ _name(std::get<fanNamePos>(def)),
+ _interface(std::get<targetInterfacePos>(def))
{
std::string path;
auto sensors = std::get<sensorListPos>(def);
@@ -58,7 +58,7 @@ Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def):
_targetSpeed = util::SDBusPlus::getProperty<uint64_t>(
bus,
path,
- FAN_SENSOR_CONTROL_INTF,
+ _interface,
FAN_TARGET_PROPERTY);
}
}
@@ -69,7 +69,7 @@ Fan::Fan(sdbusplus::bus::bus& bus, const FanDefinition& def):
std::string Fan::getService(const std::string& sensor)
{
return phosphor::fan::util::getService(sensor,
- FAN_SENSOR_CONTROL_INTF,
+ _interface,
_bus);
}
@@ -87,7 +87,7 @@ void Fan::setSpeed(uint64_t speed)
sensor.c_str(),
PROPERTY_INTERFACE,
"Set");
- method.append(FAN_SENSOR_CONTROL_INTF, property, value);
+ method.append(_interface, property, value);
auto response = _bus.call(method);
if (response.is_method_error())
diff --git a/control/fan.hpp b/control/fan.hpp
index 6975248..e7f3067 100644
--- a/control/fan.hpp
+++ b/control/fan.hpp
@@ -83,6 +83,11 @@ class Fan
std::vector<std::string> _sensors;
/**
+ * The interface of the fan target
+ */
+ const std::string _interface;
+
+ /**
* Target speed for this fan
*/
uint64_t _targetSpeed;
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 1568137..3ccab36 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -140,7 +140,8 @@ const std::vector<ZoneGroup> Manager::_zoneLayouts
%for sensor in fan['sensors']:
"${sensor}",
%endfor
- }
+ },
+ "${fan['target_interface']}"
},
%endfor
},
@@ -665,6 +666,9 @@ def getFansInZone(zone_num, profiles, fan_data):
fan = {}
fan['name'] = f['inventory']
fan['sensors'] = f['sensors']
+ fan['target_interface'] = f.get(
+ 'target_interface',
+ 'xyz.openbmc_project.Control.FanSpeed')
fans.append(fan)
return fans
diff --git a/control/types.hpp b/control/types.hpp
index f7b75aa..bb9367b 100644
--- a/control/types.hpp
+++ b/control/types.hpp
@@ -36,7 +36,10 @@ using PropertyVariantType = sdbusplus::message::variant<bool,
constexpr auto fanNamePos = 0;
constexpr auto sensorListPos = 1;
-using FanDefinition = std::tuple<std::string, std::vector<std::string>>;
+constexpr auto targetInterfacePos = 2;
+using FanDefinition = std::tuple<std::string,
+ std::vector<std::string>,
+ std::string>;
constexpr auto intfPos = 0;
constexpr auto propPos = 1;
OpenPOWER on IntegriCloud