xref: /openbmc/entity-manager/src/entity_manager/devices.hpp (revision 250432b3b3d4e5e0dcaed6a1832c0a3ed908f522)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright 2018 Intel Corporation
3 
4 #pragma once
5 #include <array>
6 
7 namespace devices
8 {
9 
10 // 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.
26 enum class createsHWMon : bool
27 {
28     noHWMonDir,
29     hasHWMonDir
30 };
31 
32 struct ExportTemplate
33 {
34     std::string_view type;
35     std::string_view parameters;
36     std::string_view busPath;
37     std::string_view add;
38     std::string_view remove;
39     createsHWMon hasHWMonDir;
40 };
41 
42 constexpr auto exportTemplates = std::to_array<ExportTemplate>(
43     {{"EEPROM_24C01", "24c01 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
44       "new_device", "delete_device", createsHWMon::noHWMonDir},
45      {"EEPROM_24C02", "24c02 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
46       "new_device", "delete_device", createsHWMon::noHWMonDir},
47      {"EEPROM_24C04", "24c04 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
48       "new_device", "delete_device", createsHWMon::noHWMonDir},
49      {"EEPROM_24C08", "24c08 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
50       "new_device", "delete_device", createsHWMon::noHWMonDir},
51      {"EEPROM_24C16", "24c16 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
52       "new_device", "delete_device", createsHWMon::noHWMonDir},
53      {"EEPROM_24C32", "24c32 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
54       "new_device", "delete_device", createsHWMon::noHWMonDir},
55      {"EEPROM_24C64", "24c64 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
56       "new_device", "delete_device", createsHWMon::noHWMonDir},
57      {"EEPROM_24C128", "24c128 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
58       "new_device", "delete_device", createsHWMon::noHWMonDir},
59      {"EEPROM_24C256", "24c256 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
60       "new_device", "delete_device", createsHWMon::noHWMonDir},
61      {"ADS1015", "ads1015 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
62       "new_device", "delete_device", createsHWMon::noHWMonDir},
63      {"ADS7828", "ads7828 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
64       "new_device", "delete_device", createsHWMon::noHWMonDir},
65      {"EEPROM", "eeprom $Address", "/sys/bus/i2c/devices/i2c-$Bus",
66       "new_device", "delete_device", createsHWMon::noHWMonDir},
67      {"Gpio", "$Index", "/sys/class/gpio", "export", "unexport",
68       createsHWMon::noHWMonDir},
69      {"IPSPS1", "ipsps1 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
70       "new_device", "delete_device", createsHWMon::hasHWMonDir},
71      {"MAX34440", "max34440 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
72       "new_device", "delete_device", createsHWMon::hasHWMonDir},
73      {"PCA9537", "pca9537 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
74       "new_device", "delete_device", createsHWMon::noHWMonDir},
75      {"PCA9542Mux", "pca9542 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
76       "new_device", "delete_device", createsHWMon::noHWMonDir},
77      {"PCA9543Mux", "pca9543 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
78       "new_device", "delete_device", createsHWMon::noHWMonDir},
79      {"PCA9544Mux", "pca9544 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
80       "new_device", "delete_device", createsHWMon::noHWMonDir},
81      {"PCA9545Mux", "pca9545 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
82       "new_device", "delete_device", createsHWMon::noHWMonDir},
83      {"PCA9546Mux", "pca9546 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
84       "new_device", "delete_device", createsHWMon::noHWMonDir},
85      {"PCA9547Mux", "pca9547 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
86       "new_device", "delete_device", createsHWMon::noHWMonDir},
87      {"PCA9548Mux", "pca9548 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
88       "new_device", "delete_device", createsHWMon::noHWMonDir},
89      {"PCA9846Mux", "pca9846 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
90       "new_device", "delete_device", createsHWMon::noHWMonDir},
91      {"PCA9847Mux", "pca9847 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
92       "new_device", "delete_device", createsHWMon::noHWMonDir},
93      {"PCA9848Mux", "pca9848 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
94       "new_device", "delete_device", createsHWMon::noHWMonDir},
95      {"PCA9849Mux", "pca9849 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
96       "new_device", "delete_device", createsHWMon::noHWMonDir},
97      {"SIC450", "sic450 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
98       "new_device", "delete_device", createsHWMon::hasHWMonDir},
99      {"Q50SN12072", "q50sn12072 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
100       "new_device", "delete_device", createsHWMon::hasHWMonDir},
101      {"MAX31790", "max31790 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
102       "new_device", "delete_device", createsHWMon::hasHWMonDir},
103      {"PIC32", "pic32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
104       "delete_device", createsHWMon::hasHWMonDir},
105      {"INA226", "ina226 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
106       "new_device", "delete_device", createsHWMon::hasHWMonDir},
107      {"RAA229620", "raa229620 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
108       "new_device", "delete_device", createsHWMon::hasHWMonDir},
109      {"RAA229621", "raa229621 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
110       "new_device", "delete_device", createsHWMon::hasHWMonDir},
111      {"PIC32", "pic32 $Address", "/sys/bus/i2c/devices/i2c-$Bus", "new_device",
112       "delete_device", createsHWMon::hasHWMonDir},
113      {"INA233", "ina233 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
114       "new_device", "delete_device", createsHWMon::hasHWMonDir},
115      {"RTQ6056", "rtq6056 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
116       "new_device", "delete_device", createsHWMon::noHWMonDir},
117      {"SY24655", "sy24655 $Address", "/sys/bus/i2c/devices/i2c-$Bus",
118       "new_device", "delete_device", createsHWMon::hasHWMonDir}});
119 } // namespace devices
120