| Alexander Hansen | 4e1142d | 2025-07-25 17:07:27 +0200 | [diff] [blame] | 1 | // SPDX-License-Identifier: Apache-2.0 |
| 2 | // SPDX-FileCopyrightText: Copyright 2018 Intel Corporation |
| James Feist | 053a664 | 2018-10-15 13:17:09 -0700 | [diff] [blame] | 3 | |
| 4 | #pragma once |
| Ed Tanous | 250432b | 2025-10-13 13:28:38 -0700 | [diff] [blame^] | 5 | #include <array> |
| James Feist | 053a664 | 2018-10-15 13:17:09 -0700 | [diff] [blame] | 6 | |
| 7 | namespace devices |
| 8 | { |
| 9 | |
| Johnathan Mantey | 7b21ef2 | 2022-08-08 12:57:55 -0700 | [diff] [blame] | 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 | |
| James Feist | 053a664 | 2018-10-15 13:17:09 -0700 | [diff] [blame] | 32 | struct ExportTemplate |
| 33 | { |
| Ed Tanous | 250432b | 2025-10-13 13:28:38 -0700 | [diff] [blame^] | 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; |
| Johnathan Mantey | 7b21ef2 | 2022-08-08 12:57:55 -0700 | [diff] [blame] | 39 | createsHWMon hasHWMonDir; |
| James Feist | 053a664 | 2018-10-15 13:17:09 -0700 | [diff] [blame] | 40 | }; |
| 41 | |
| Ed Tanous | 250432b | 2025-10-13 13:28:38 -0700 | [diff] [blame^] | 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}}); |
| Jae Hyun Yoo | 9cdeabb | 2018-10-16 11:47:09 -0700 | [diff] [blame] | 119 | } // namespace devices |