blob: 6437e3211e8549ab25fdea62ddae37600b1136ad [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 Tanous250432b2025-10-13 13:28:38 -07005#include <array>
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{
Ed Tanous250432b2025-10-13 13:28:38 -070034 std::string_view type;
35 std::string_view parameters;
36 std::string_view busPath;
37 std::string_view add;
38 std::string_view remove;
Johnathan Mantey7b21ef22022-08-08 12:57:55 -070039 createsHWMon hasHWMonDir;
James Feist053a6642018-10-15 13:17:09 -070040};
41
Ed Tanous250432b2025-10-13 13:28:38 -070042constexpr 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}});
Jae Hyun Yoo9cdeabb2018-10-16 11:47:09 -0700119} // namespace devices