blob: ed0f8dcf7c8679ef6611a5efe572d155fb5ed9a8 [file] [log] [blame]
Alexander Hansen4e1142d2025-07-25 17:07:27 +02001// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright 2018 Intel Corporation
James Feist053a6642018-10-15 13:17:09 -07003
4#pragma once
Ed Tanousdbf95b22025-10-13 11:38:35 -07005#include <flat_map>
James Feist053a6642018-10-15 13:17:09 -07006
7namespace devices
8{
9
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070010// I2C device drivers may create a /hwmon subdirectory. For example the tmp75
11// driver creates a /sys/bus/i2c/devices/<busnum>-<i2caddr>/hwmon
12// directory. The sensor code relies on the presence of the /hwmon
13// subdirectory to collect sensor readings. Initialization of this subdir is
14// not reliable. I2C devices flagged with hasHWMonDir are tested for correct
15// initialization, and when a failure is detected the device is deleted, and
16// then recreated. The default is to retry 5 times before moving to the next
17// device.
18
19// Devices such as I2C EEPROMs do not generate this file structure. These
20// kinds of devices are flagged using the noHWMonDir enumeration. The
21// expectation is they are created correctly on the first attempt.
22
23// This enumeration class exists to reduce copy/paste errors. It is easy to
24// overlook the trailing parameter in the ExportTemplate structure when it is
25// a simple boolean.
26enum class createsHWMon : bool
27{
28 noHWMonDir,
29 hasHWMonDir
30};
31
James Feist053a6642018-10-15 13:17:09 -070032struct ExportTemplate
33{
Zev Weissc11b5da2022-07-12 16:31:37 -070034 ExportTemplate(const char* params, const char* bus, const char* constructor,
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070035 const char* destructor, createsHWMon hasHWMonDir) :
Patrick Williamsb7077432024-08-16 15:22:21 -040036 parameters(params), busPath(bus), add(constructor), remove(destructor),
37 hasHWMonDir(hasHWMonDir) {};
James Feista465ccc2019-02-08 12:51:01 -080038 const char* parameters;
Zev Weissc11b5da2022-07-12 16:31:37 -070039 const char* busPath;
Johnathan Mantey9b867872020-10-13 15:00:51 -070040 const char* add;
41 const char* remove;
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070042 createsHWMon hasHWMonDir;
James Feist053a6642018-10-15 13:17:09 -070043};
44
Ed Tanousdbf95b22025-10-13 11:38:35 -070045const std::flat_map<std::string_view, ExportTemplate, std::less<>>
Devjit Gopalpur4acdc542019-10-10 22:47:46 -070046 exportTemplates{
Vijay Khemka48328412021-04-12 23:14:53 +000047 {{"EEPROM_24C01",
48 ExportTemplate("24c01 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070049 "new_device", "delete_device",
50 createsHWMon::noHWMonDir)},
Vijay Khemka48328412021-04-12 23:14:53 +000051 {"EEPROM_24C02",
Johnathan Mantey9b867872020-10-13 15:00:51 -070052 ExportTemplate("24c02 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070053 "new_device", "delete_device",
54 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070055 {"EEPROM_24C04",
56 ExportTemplate("24c04 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070057 "new_device", "delete_device",
58 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070059 {"EEPROM_24C08",
60 ExportTemplate("24c08 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070061 "new_device", "delete_device",
62 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070063 {"EEPROM_24C16",
64 ExportTemplate("24c16 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070065 "new_device", "delete_device",
66 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070067 {"EEPROM_24C32",
68 ExportTemplate("24c32 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070069 "new_device", "delete_device",
70 createsHWMon::noHWMonDir)},
Hao Jiangf64d4392021-02-23 14:22:03 -080071 {"EEPROM_24C64",
Johnathan Mantey9b867872020-10-13 15:00:51 -070072 ExportTemplate("24c64 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070073 "new_device", "delete_device",
74 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070075 {"EEPROM_24C128",
76 ExportTemplate("24c128 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070077 "new_device", "delete_device",
78 createsHWMon::noHWMonDir)},
Jae Hyun Yoo86022012022-04-01 16:04:29 -070079 {"EEPROM_24C256",
80 ExportTemplate("24c256 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070081 "new_device", "delete_device",
82 createsHWMon::noHWMonDir)},
Joseph Fu9fa8f412022-11-07 09:23:33 +080083 {"ADS1015",
84 ExportTemplate("ads1015 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
85 "new_device", "delete_device",
86 createsHWMon::noHWMonDir)},
Michal Bieleckiff503d82022-04-29 10:20:08 +020087 {"ADS7828",
88 ExportTemplate("ads7828 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070089 "new_device", "delete_device",
90 createsHWMon::noHWMonDir)},
Johnathan Mantey9b867872020-10-13 15:00:51 -070091 {"EEPROM",
92 ExportTemplate("eeprom $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070093 "new_device", "delete_device",
94 createsHWMon::noHWMonDir)},
Johnathan Mantey9b867872020-10-13 15:00:51 -070095 {"Gpio", ExportTemplate("$Index", "/sys/class/gpio", "export",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070096 "unexport", createsHWMon::noHWMonDir)},
Tingting Chena591d6c2022-11-21 19:20:11 +080097 {"IPSPS1",
98 ExportTemplate("ipsps1 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
99 "new_device", "delete_device",
100 createsHWMon::hasHWMonDir)},
Nan Zhou296667f2021-02-23 09:53:14 -0800101 {"MAX34440",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700102 ExportTemplate("max34440 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700103 "new_device", "delete_device",
104 createsHWMon::hasHWMonDir)},
Tingting Chena591d6c2022-11-21 19:20:11 +0800105 {"PCA9537",
106 ExportTemplate("pca9537 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
107 "new_device", "delete_device",
108 createsHWMon::noHWMonDir)},
Jan Sowinski50b2e0f2022-05-06 16:47:12 +0200109 {"PCA9542Mux",
110 ExportTemplate("pca9542 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700111 "new_device", "delete_device",
112 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700113 {"PCA9543Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700114 ExportTemplate("pca9543 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700115 "new_device", "delete_device",
116 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700117 {"PCA9544Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700118 ExportTemplate("pca9544 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700119 "new_device", "delete_device",
120 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700121 {"PCA9545Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700122 ExportTemplate("pca9545 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700123 "new_device", "delete_device",
124 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700125 {"PCA9546Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700126 ExportTemplate("pca9546 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700127 "new_device", "delete_device",
128 createsHWMon::noHWMonDir)},
Devjit Gopalpur4acdc542019-10-10 22:47:46 -0700129 {"PCA9547Mux",
Johnathan Mantey9b867872020-10-13 15:00:51 -0700130 ExportTemplate("pca9547 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700131 "new_device", "delete_device",
132 createsHWMon::noHWMonDir)},
Sujoy Raye4dc1402022-04-15 10:28:34 -0700133 {"PCA9548Mux",
134 ExportTemplate("pca9548 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700135 "new_device", "delete_device",
136 createsHWMon::noHWMonDir)},
Jan Sowinski50b2e0f2022-05-06 16:47:12 +0200137 {"PCA9846Mux",
138 ExportTemplate("pca9846 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700139 "new_device", "delete_device",
140 createsHWMon::noHWMonDir)},
Jiaqing Zhao88333fe2022-05-06 15:00:15 +0800141 {"PCA9847Mux",
142 ExportTemplate("pca9847 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700143 "new_device", "delete_device",
144 createsHWMon::noHWMonDir)},
Jiaqing Zhao88333fe2022-05-06 15:00:15 +0800145 {"PCA9848Mux",
146 ExportTemplate("pca9848 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700147 "new_device", "delete_device",
148 createsHWMon::noHWMonDir)},
Jiaqing Zhao88333fe2022-05-06 15:00:15 +0800149 {"PCA9849Mux",
150 ExportTemplate("pca9849 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700151 "new_device", "delete_device",
152 createsHWMon::noHWMonDir)},
Yung Sheng Huang2ca85292022-07-15 09:59:50 +0800153 {"SIC450",
154 ExportTemplate("sic450 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700155 "new_device", "delete_device",
156 createsHWMon::hasHWMonDir)},
Yung Sheng Huang2f464bd2022-09-02 11:37:48 +0800157 {"Q50SN12072",
158 ExportTemplate("q50sn12072 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
159 "new_device", "delete_device",
160 createsHWMon::hasHWMonDir)},
Scron Chang5d11daf2021-07-26 13:38:26 +0800161 {"MAX31790",
162 ExportTemplate("max31790 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Johnathan Mantey7b21ef22022-08-08 12:57:55 -0700163 "new_device", "delete_device",
164 createsHWMon::hasHWMonDir)},
Saitwal, Meghan5e9a3052023-04-13 11:35:29 +0000165 {"PIC32", ExportTemplate("pic32 $Address",
166 "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
167 "delete_device", createsHWMon::hasHWMonDir)},
Tingting Chena591d6c2022-11-21 19:20:11 +0800168 {"INA226",
169 ExportTemplate("ina226 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
170 "new_device", "delete_device",
171 createsHWMon::hasHWMonDir)},
Yung Sheng Huang6d524272022-09-02 11:47:10 +0800172 {"RAA229620",
173 ExportTemplate("raa229620 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
174 "new_device", "delete_device",
175 createsHWMon::hasHWMonDir)},
176 {"RAA229621",
177 ExportTemplate("raa229621 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
178 "new_device", "delete_device",
179 createsHWMon::hasHWMonDir)},
Andy-Hsu-wiwynne12f41a2025-08-15 16:17:21 +0800180 {"PIC32", ExportTemplate("pic32 $Address",
181 "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
182 "delete_device", createsHWMon::hasHWMonDir)},
183 {"INA233",
184 ExportTemplate("ina233 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
185 "new_device", "delete_device",
186 createsHWMon::hasHWMonDir)},
187 {"RTQ6056",
188 ExportTemplate("rtq6056 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
189 "new_device", "delete_device",
190 createsHWMon::noHWMonDir)},
191 {"SY24655",
192 ExportTemplate("sy24655 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
Konstantin Aladyshev016f1212023-02-20 18:37:10 +0300193 "new_device", "delete_device",
Zev Weisse22143d2022-08-03 16:29:06 -0700194 createsHWMon::hasHWMonDir)}}};
Jae Hyun Yoo9cdeabb2018-10-16 11:47:09 -0700195} // namespace devices