blob: c7ac969222e8e188fcf13a968bcf3ccb03507264 [file] [log] [blame]
James Feist053a6642018-10-15 13:17:09 -07001/*
2// Copyright (c) 2018 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15*/
Brad Bishop1fb9f3f2020-08-28 08:15:13 -040016/// \file devices.hpp
James Feist053a6642018-10-15 13:17:09 -070017
18#pragma once
19#include <boost/container/flat_map.hpp>
20
21namespace devices
22{
23
24struct CmpStr
25{
James Feista465ccc2019-02-08 12:51:01 -080026 bool operator()(const char* a, const char* b) const
James Feist053a6642018-10-15 13:17:09 -070027 {
28 return std::strcmp(a, b) < 0;
29 }
30};
31
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070032// I2C device drivers may create a /hwmon subdirectory. For example the tmp75
33// driver creates a /sys/bus/i2c/devices/<busnum>-<i2caddr>/hwmon
34// directory. The sensor code relies on the presence of the /hwmon
35// subdirectory to collect sensor readings. Initialization of this subdir is
36// not reliable. I2C devices flagged with hasHWMonDir are tested for correct
37// initialization, and when a failure is detected the device is deleted, and
38// then recreated. The default is to retry 5 times before moving to the next
39// device.
40
41// Devices such as I2C EEPROMs do not generate this file structure. These
42// kinds of devices are flagged using the noHWMonDir enumeration. The
43// expectation is they are created correctly on the first attempt.
44
45// This enumeration class exists to reduce copy/paste errors. It is easy to
46// overlook the trailing parameter in the ExportTemplate structure when it is
47// a simple boolean.
48enum class createsHWMon : bool
49{
50 noHWMonDir,
51 hasHWMonDir
52};
53
James Feist053a6642018-10-15 13:17:09 -070054struct ExportTemplate
55{
Zev Weissc11b5da2022-07-12 16:31:37 -070056 ExportTemplate(const char* params, const char* bus, const char* constructor,
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070057 const char* destructor, createsHWMon hasHWMonDir) :
Johnathan Mantey9b867872020-10-13 15:00:51 -070058 parameters(params),
Zev Weissc11b5da2022-07-12 16:31:37 -070059 busPath(bus), add(constructor), remove(destructor),
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070060 hasHWMonDir(hasHWMonDir){};
James Feista465ccc2019-02-08 12:51:01 -080061 const char* parameters;
Zev Weissc11b5da2022-07-12 16:31:37 -070062 const char* busPath;
Johnathan Mantey9b867872020-10-13 15:00:51 -070063 const char* add;
64 const char* remove;
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070065 createsHWMon hasHWMonDir;
James Feist053a6642018-10-15 13:17:09 -070066};
67
James Feista465ccc2019-02-08 12:51:01 -080068const boost::container::flat_map<const char*, ExportTemplate, CmpStr>
Devjit Gopalpur4acdc542019-10-10 22:47:46 -070069 exportTemplates{
Vijay Khemka48328412021-04-12 23:14:53 +000070 {{"EEPROM_24C01",
71 ExportTemplate("24c01 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070072 "new_device", "delete_device",
73 createsHWMon::noHWMonDir)},
Vijay Khemka48328412021-04-12 23:14:53 +000074 {"EEPROM_24C02",
Johnathan Mantey9b867872020-10-13 15:00:51 -070075 ExportTemplate("24c02 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070076 "new_device", "delete_device",
77 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070078 {"EEPROM_24C04",
79 ExportTemplate("24c04 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070080 "new_device", "delete_device",
81 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070082 {"EEPROM_24C08",
83 ExportTemplate("24c08 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070084 "new_device", "delete_device",
85 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070086 {"EEPROM_24C16",
87 ExportTemplate("24c16 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070088 "new_device", "delete_device",
89 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070090 {"EEPROM_24C32",
91 ExportTemplate("24c32 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070092 "new_device", "delete_device",
93 createsHWMon::noHWMonDir)},
Hao Jiangf64d4392021-02-23 14:22:03 -080094 {"EEPROM_24C64",
Johnathan Mantey9b867872020-10-13 15:00:51 -070095 ExportTemplate("24c64 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070096 "new_device", "delete_device",
97 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070098 {"EEPROM_24C128",
99 ExportTemplate("24c128 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700100 "new_device", "delete_device",
101 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -0700102 {"EEPROM_24C256",
103 ExportTemplate("24c256 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700104 "new_device", "delete_device",
105 createsHWMon::noHWMonDir)},
Nan Zhou296667f2021-02-23 09:53:14 -0800106 {"ADM1266",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700107 ExportTemplate("adm1266 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700108 "new_device", "delete_device",
109 createsHWMon::noHWMonDir)},
Josh Lehan079c47f2020-06-18 16:34:31 -0700110 {"ADM1272",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700111 ExportTemplate("adm1272 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700112 "new_device", "delete_device",
113 createsHWMon::noHWMonDir)},
Joseph Fu9fa8f412022-11-07 09:23:33 +0800114 {"ADS1015",
115 ExportTemplate("ads1015 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
116 "new_device", "delete_device",
117 createsHWMon::noHWMonDir)},
Michal Bieleckiff503d82022-04-29 10:20:08 +0200118 {"ADS7828",
119 ExportTemplate("ads7828 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700120 "new_device", "delete_device",
121 createsHWMon::noHWMonDir)},
Johnathan Mantey9b867872020-10-13 15:00:51 -0700122 {"EEPROM",
123 ExportTemplate("eeprom $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700124 "new_device", "delete_device",
125 createsHWMon::noHWMonDir)},
Johnathan Mantey9b867872020-10-13 15:00:51 -0700126 {"Gpio", ExportTemplate("$Index", "/sys/class/gpio", "export",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700127 "unexport", createsHWMon::noHWMonDir)},
Johnathan Mantey9b867872020-10-13 15:00:51 -0700128 {"INA230",
129 ExportTemplate("ina230 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700130 "new_device", "delete_device",
131 createsHWMon::hasHWMonDir)},
Alex Qiu0cbe6bf2020-01-03 09:20:02 -0800132 {"ISL68137",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700133 ExportTemplate("isl68137 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700134 "new_device", "delete_device",
135 createsHWMon::hasHWMonDir)},
Yung Sheng Huangec5e74e2022-05-06 10:02:18 +0800136 {"ISL68220",
137 ExportTemplate("isl68220 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700138 "new_device", "delete_device",
139 createsHWMon::hasHWMonDir)},
Khang Kieu20fb4ae2022-02-09 02:04:33 +0000140 {"ISL69225",
141 ExportTemplate("isl69225 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700142 "new_device", "delete_device",
143 createsHWMon::hasHWMonDir)},
Gaurav Gandhibdad9572020-12-29 03:14:48 +0000144 {"ISL68223",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700145 ExportTemplate("isl68223 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700146 "new_device", "delete_device",
147 createsHWMon::hasHWMonDir)},
Gaurav Gandhibdad9572020-12-29 03:14:48 +0000148 {"ISL69243",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700149 ExportTemplate("isl69243 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700150 "new_device", "delete_device",
151 createsHWMon::hasHWMonDir)},
Zhikui Rened2f07b2022-02-16 14:59:09 -0800152 {"ISL69260",
153 ExportTemplate("isl69260 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700154 "new_device", "delete_device",
155 createsHWMon::hasHWMonDir)},
Alex Qiuba5424a2020-01-29 13:33:16 -0800156 {"MAX16601",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700157 ExportTemplate("max16601 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700158 "new_device", "delete_device",
159 createsHWMon::hasHWMonDir)},
Gaurav Gandhibdad9572020-12-29 03:14:48 +0000160 {"MAX20710",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700161 ExportTemplate("max20710 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700162 "new_device", "delete_device",
163 createsHWMon::hasHWMonDir)},
Alex Qiu9354bf72020-01-22 17:52:32 -0800164 {"MAX20730",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700165 ExportTemplate("max20730 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700166 "new_device", "delete_device",
167 createsHWMon::hasHWMonDir)},
Alex Qiu9354bf72020-01-22 17:52:32 -0800168 {"MAX20734",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700169 ExportTemplate("max20734 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700170 "new_device", "delete_device",
171 createsHWMon::hasHWMonDir)},
Alex Qiu9354bf72020-01-22 17:52:32 -0800172 {"MAX20796",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700173 ExportTemplate("max20796 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700174 "new_device", "delete_device",
175 createsHWMon::hasHWMonDir)},
Nan Zhou296667f2021-02-23 09:53:14 -0800176 {"MAX34440",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700177 ExportTemplate("max34440 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700178 "new_device", "delete_device",
179 createsHWMon::hasHWMonDir)},
Alex Qiu0cbe6bf2020-01-03 09:20:02 -0800180 {"MAX34451",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700181 ExportTemplate("max34451 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700182 "new_device", "delete_device",
183 createsHWMon::hasHWMonDir)},
Jan Sowinski50b2e0f2022-05-06 16:47:12 +0200184 {"PCA9542Mux",
185 ExportTemplate("pca9542 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700186 "new_device", "delete_device",
187 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700188 {"PCA9543Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700189 ExportTemplate("pca9543 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700190 "new_device", "delete_device",
191 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700192 {"PCA9544Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700193 ExportTemplate("pca9544 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700194 "new_device", "delete_device",
195 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700196 {"PCA9545Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700197 ExportTemplate("pca9545 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700198 "new_device", "delete_device",
199 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700200 {"PCA9546Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700201 ExportTemplate("pca9546 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700202 "new_device", "delete_device",
203 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700204 {"PCA9547Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700205 ExportTemplate("pca9547 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700206 "new_device", "delete_device",
207 createsHWMon::noHWMonDir)},
Sujoy Raye4dc1402022-04-15 10:28:34 -0700208 {"PCA9548Mux",
209 ExportTemplate("pca9548 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700210 "new_device", "delete_device",
211 createsHWMon::noHWMonDir)},
Jan Sowinski50b2e0f2022-05-06 16:47:12 +0200212 {"PCA9846Mux",
213 ExportTemplate("pca9846 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700214 "new_device", "delete_device",
215 createsHWMon::noHWMonDir)},
Jiaqing Zhao88333fe2022-05-06 15:00:15 +0800216 {"PCA9847Mux",
217 ExportTemplate("pca9847 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700218 "new_device", "delete_device",
219 createsHWMon::noHWMonDir)},
Jiaqing Zhao88333fe2022-05-06 15:00:15 +0800220 {"PCA9848Mux",
221 ExportTemplate("pca9848 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700222 "new_device", "delete_device",
223 createsHWMon::noHWMonDir)},
Jiaqing Zhao88333fe2022-05-06 15:00:15 +0800224 {"PCA9849Mux",
225 ExportTemplate("pca9849 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700226 "new_device", "delete_device",
227 createsHWMon::noHWMonDir)},
Yung Sheng Huang2ca85292022-07-15 09:59:50 +0800228 {"SIC450",
229 ExportTemplate("sic450 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700230 "new_device", "delete_device",
231 createsHWMon::hasHWMonDir)},
232 {"pmbus", ExportTemplate("pmbus $Address",
233 "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
234 "delete_device", createsHWMon::hasHWMonDir)},
Lotus Xu93db9bf2021-09-08 13:47:47 +0800235 {"PXE1610",
236 ExportTemplate("pxe1610 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700237 "new_device", "delete_device",
238 createsHWMon::hasHWMonDir)},
Yung Sheng Huang2f464bd2022-09-02 11:37:48 +0800239 {"Q50SN12072",
240 ExportTemplate("q50sn12072 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
241 "new_device", "delete_device",
242 createsHWMon::hasHWMonDir)},
Lotus Xu93db9bf2021-09-08 13:47:47 +0800243 {"XDPE12284",
244 ExportTemplate("xdpe12284 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700245 "new_device", "delete_device",
246 createsHWMon::hasHWMonDir)},
Zev Weiss27adbb72022-04-01 16:17:09 -0700247 {"LM25066",
248 ExportTemplate("lm25066 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700249 "new_device", "delete_device",
250 createsHWMon::hasHWMonDir)},
Scron Chang2fb84ef2021-07-14 20:32:14 +0800251 {"RAA228000",
252 ExportTemplate("raa228000 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700253 "new_device", "delete_device",
254 createsHWMon::hasHWMonDir)},
Scron Chang2fb84ef2021-07-14 20:32:14 +0800255 {"DPS800",
256 ExportTemplate("dps800 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700257 "new_device", "delete_device",
258 createsHWMon::hasHWMonDir)},
Scron Chang5d11daf2021-07-26 13:38:26 +0800259 {"MAX31790",
260 ExportTemplate("max31790 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700261 "new_device", "delete_device",
262 createsHWMon::hasHWMonDir)},
Zhikui Rened2f07b2022-02-16 14:59:09 -0800263 {"ADM1293",
264 ExportTemplate("adm1293 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700265 "new_device", "delete_device",
Matt Simmering8172db82022-09-29 16:02:03 -0700266 createsHWMon::hasHWMonDir)},
Zhikui Rened2f07b2022-02-16 14:59:09 -0800267 {"INA219",
268 ExportTemplate("ina219 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700269 "new_device", "delete_device",
Matt Simmering8172db82022-09-29 16:02:03 -0700270 createsHWMon::hasHWMonDir)},
Zhikui Renec6183c2022-02-26 23:04:34 -0800271 {"RAA229126",
272 ExportTemplate("raa229126 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700273 "new_device", "delete_device",
274 createsHWMon::hasHWMonDir)},
Yung Sheng Huang6d524272022-09-02 11:47:10 +0800275 {"RAA229620",
276 ExportTemplate("raa229620 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
277 "new_device", "delete_device",
278 createsHWMon::hasHWMonDir)},
279 {"RAA229621",
280 ExportTemplate("raa229621 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
281 "new_device", "delete_device",
282 createsHWMon::hasHWMonDir)},
Konstantin Aladyshev91df5312022-10-19 18:46:27 +0300283 {"TPS53679",
284 ExportTemplate("tps53679 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
285 "new_device", "delete_device",
286 createsHWMon::hasHWMonDir)},
Shamim Ali3f4527a2022-06-08 23:19:11 +0530287 {"MP2971",
288 ExportTemplate("mp2971 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700289 "new_device", "delete_device",
290 createsHWMon::hasHWMonDir)},
Shamim Ali3f4527a2022-06-08 23:19:11 +0530291 {"MP2973",
292 ExportTemplate("mp2973 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700293 "new_device", "delete_device",
Zev Weisse22143d2022-08-03 16:29:06 -0700294 createsHWMon::hasHWMonDir)}}};
Jae Hyun Yoo9cdeabb2018-10-16 11:47:09 -0700295} // namespace devices