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