blob: 13aa26663101f2fcac980d318236761165a24b56 [file] [log] [blame]
Matthew Barth048ac872017-03-09 14:36:08 -06001#include "fan_speed.hpp"
2#include "hwmon.hpp"
3#include "sysfs.hpp"
Matt Spinler0a8de642017-05-11 10:59:39 -05004#include <experimental/filesystem>
Brad Bishop751043e2017-08-29 11:13:46 -04005#include <phosphor-logging/elog-errors.hpp>
6#include <xyz/openbmc_project/Control/Device/error.hpp>
7
8using namespace phosphor::logging;
Matthew Barth048ac872017-03-09 14:36:08 -06009
10namespace hwmon
11{
12
13uint64_t FanSpeed::target(uint64_t value)
14{
15 auto curValue = FanSpeedObject::target();
16
17 if (curValue != value)
18 {
19 //Write target out to sysfs
Brad Bishop751043e2017-08-29 11:13:46 -040020 try
21 {
22 ioAccess.write(
23 value,
24 type,
25 id,
Brad Bishop754d38c2017-09-08 00:46:58 -040026 entry::target,
27 sysfs::hwmonio::retries,
28 sysfs::hwmonio::delay);
29
Brad Bishop751043e2017-08-29 11:13:46 -040030 }
31 catch (const std::system_error& e)
32 {
33 using namespace sdbusplus::xyz::openbmc_project::Control::
34 Device::Error;
35 report<WriteFailure>(
36 xyz::openbmc_project::Control::Device::
37 WriteFailure::CALLOUT_ERRNO(e.code().value()),
38 xyz::openbmc_project::Control::Device::
39 WriteFailure::CALLOUT_DEVICE_PATH(devPath.c_str()));
Matt Spinler9b65f762017-10-05 10:36:22 -050040
41 auto file = sysfs::make_sysfs_path(
42 ioAccess.path(),
43 type,
44 id,
45 entry::target);
46
47 log<level::INFO>("Logging failing sysfs file",
48 phosphor::logging::entry("FILE=%s", file.c_str()));
49
Brad Bishop751043e2017-08-29 11:13:46 -040050 exit(EXIT_FAILURE);
51 }
Matthew Barth048ac872017-03-09 14:36:08 -060052 }
53
54 return FanSpeedObject::target(value);
55}
56
Matt Spinler0a8de642017-05-11 10:59:39 -050057
58void FanSpeed::enable()
59{
60 namespace fs = std::experimental::filesystem;
61
Brad Bishop751043e2017-08-29 11:13:46 -040062 auto fullPath = sysfs::make_sysfs_path(ioAccess.path(),
Patrick Venture1e6324f2017-06-01 14:07:05 -070063 type::pwm,
64 id,
65 entry::enable);
Matt Spinler0a8de642017-05-11 10:59:39 -050066
67 if (fs::exists(fullPath))
68 {
69 //This class always uses RPM mode
Brad Bishop751043e2017-08-29 11:13:46 -040070 try
71 {
72 ioAccess.write(
73 enable::rpmMode,
74 type::pwm,
75 id,
Brad Bishop754d38c2017-09-08 00:46:58 -040076 entry::enable,
77 sysfs::hwmonio::retries,
78 sysfs::hwmonio::delay);
Brad Bishop751043e2017-08-29 11:13:46 -040079 }
80 catch (const std::system_error& e)
81 {
82 using namespace sdbusplus::xyz::openbmc_project::Control::
83 Device::Error;
84 phosphor::logging::report<WriteFailure>(
85 xyz::openbmc_project::Control::Device::
86 WriteFailure::CALLOUT_ERRNO(e.code().value()),
87 xyz::openbmc_project::Control::Device::
88 WriteFailure::CALLOUT_DEVICE_PATH(devPath.c_str()));
Matt Spinler9b65f762017-10-05 10:36:22 -050089
90 log<level::INFO>("Logging failing sysfs file",
91 phosphor::logging::entry("FILE=%s", fullPath.c_str()));
92
Brad Bishop751043e2017-08-29 11:13:46 -040093 exit(EXIT_FAILURE);
94 }
Matt Spinler0a8de642017-05-11 10:59:39 -050095 }
96}
97
98
Matthew Barth048ac872017-03-09 14:36:08 -060099} // namespace hwmon