static int smb_sensor_read()

in meta-facebook/meta-cloudripper/recipes-cloudripper/platform-lib/files/pal/pal-sensors.c [971:1415]


static int smb_sensor_read(uint8_t sensor_num, float *value) {
  int ret = -1;
  char path[32];
  int num = 0;
  float read_val = 0;

  switch (sensor_num) {
    case SMB_SENSOR_VDDA_TEMP1:
      ret = read_attr(SMB_VDDA_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_PCIE_TEMP1:
      ret = read_attr(SMB_PCIE_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_IR3R3V_RIGHT_TEMP:
      ret = read_attr(SMB_PCIE_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_IR3R3V_LEFT_TEMP:
      ret = read_attr(SMB_VDDA_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_SW_CORE_TEMP1:
      ret = read_attr(SMB_XPDE_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_XPDE_HBM_TEMP1:
      ret = read_attr(SMB_XPDE_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_LM75B_U28_TEMP:
      ret = read_attr(SMB_LM75B_U28_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_LM75B_U25_TEMP:
      ret = read_attr(SMB_LM75B_U25_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_LM75B_U56_TEMP:
      ret = read_attr(SMB_LM75B_U56_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_LM75B_U55_TEMP:
      ret = read_attr(SMB_LM75B_U55_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_LM75B_U2_TEMP:
      ret = read_attr(SMB_LM75B_U2_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_LM75B_U13_TEMP:
      ret = read_attr(SMB_LM75B_U13_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_TMP421_U62_TEMP:
      ret = read_attr(SMB_TMP421_U62_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_TMP421_U63_TEMP:
      ret = read_attr(SMB_TMP421_U63_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_BMC_LM75B_TEMP:
      ret = read_attr(SMB_LM75B_BMC_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_GB_HIGH_TEMP:
      *value = 0;
      for (int id = SMB_SENSOR_GB_TEMP1; id <= SMB_SENSOR_GB_TEMP10; id++) {
        snprintf(path, sizeof(path), "temp%d_input", id - SMB_SENSOR_GB_TEMP1 + 1);
        ret = read_attr(SMB_GB_TEMP_DEVICE, path, &read_val);
        if (ret) {
          continue;
        } else {
          num++;
        }
        if (read_val > *value) {
          *value = read_val;
        }
      }
      if (num) {
        ret = 0;
      } else {
        ret = READING_NA;
      }
      break;
    case SMB_SENSOR_GB_TEMP1:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_GB_TEMP2:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_GB_TEMP3:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(3), value);
      break;
    case SMB_SENSOR_GB_TEMP4:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(4), value);
      break;
    case SMB_SENSOR_GB_TEMP5:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(5), value);
      break;
    case SMB_SENSOR_GB_TEMP6:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(6), value);
      break;
    case SMB_SENSOR_GB_TEMP7:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(7), value);
      break;
    case SMB_SENSOR_GB_TEMP8:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(8), value);
      break;
    case SMB_SENSOR_GB_TEMP9:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(9), value);
      break;
    case SMB_SENSOR_GB_TEMP10:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(10), value);
      break;
    case SMB_SENSOR_GB_HBM_TEMP1:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(11), value);
      break;
    case SMB_SENSOR_GB_HBM_TEMP2:
      ret = read_attr(SMB_GB_TEMP_DEVICE, TEMP(12), value);
      break;
    case SMB_DOM1_MAX_TEMP:
      ret = read_attr(SMB_DOM1_DEVICE, TEMP(1), value);
      break;
    case SMB_DOM2_MAX_TEMP:
      ret = read_attr(SMB_DOM2_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_FCM_LM75B_U1_TEMP:
      ret = read_attr(SMB_FCM_LM75B_U1_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_FCM_LM75B_U2_TEMP:
      ret = read_attr(SMB_FCM_LM75B_U2_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_1220_VMON1:
      ret = read_attr(SMB_1220_DEVICE, VOLT(0), value);
      *value *= 4.3;
      break;
    case SMB_SENSOR_1220_VMON2:
      ret = read_attr(SMB_1220_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_1220_VMON3:
      ret = read_attr(SMB_1220_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_1220_VMON4:
      ret = read_attr(SMB_1220_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_1220_VMON5:
      ret = read_attr(SMB_1220_DEVICE, VOLT(4), value);
      break;
    case SMB_SENSOR_1220_VMON6:
      ret = read_attr(SMB_1220_DEVICE, VOLT(5), value);
      break;
    case SMB_SENSOR_1220_VMON7:
      ret = read_attr(SMB_1220_DEVICE, VOLT(6), value);
      break;
    case SMB_SENSOR_1220_VMON8:
      ret = read_attr(SMB_1220_DEVICE, VOLT(7), value);
      break;
    case SMB_SENSOR_1220_VMON9:
      ret = read_attr(SMB_1220_DEVICE, VOLT(8), value);
      break;
    case SMB_SENSOR_1220_VMON10:
      ret = read_attr(SMB_1220_DEVICE, VOLT(9), value);
      break;
    case SMB_SENSOR_1220_VMON11:
      ret = read_attr(SMB_1220_DEVICE, VOLT(10), value);
      break;
    case SMB_SENSOR_1220_VMON12:
      ret = read_attr(SMB_1220_DEVICE, VOLT(11), value);
      break;
    case SMB_SENSOR_1220_VCCA:
      ret = read_attr(SMB_1220_DEVICE, VOLT(12), value);
      break;
    case SMB_SENSOR_1220_VCCINP:
      ret = read_attr(SMB_1220_DEVICE, VOLT(13), value);
      break;
    case SMB_SENSOR_VDDA_IN_VOLT:
      ret = read_attr(SMB_VDDA_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_PCIE_IN_VOLT:
      ret = read_attr(SMB_PCIE_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_VDDA_OUT_VOLT:
      ret = read_attr(SMB_VDDA_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_PCIE_OUT_VOLT:
      ret = read_attr(SMB_PCIE_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_IR3R3V_RIGHT_IN_VOLT:
      ret = read_attr(SMB_PCIE_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_IR3R3V_LEFT_IN_VOLT:
      ret = read_attr(SMB_VDDA_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_IR3R3V_RIGHT_OUT_VOLT:
      ret = read_attr(SMB_PCIE_DEVICE, VOLT(4), value);
      *value *= 2;
      break;
    case SMB_SENSOR_IR3R3V_LEFT_OUT_VOLT:
      ret = read_attr(SMB_VDDA_DEVICE, VOLT(4), value);
      *value *= 2;
      break;
    case SMB_SENSOR_SW_CORE_IN_VOLT:
      ret = read_attr(SMB_XPDE_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_SW_CORE_OUT_VOLT:
      ret = read_attr(SMB_XPDE_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_XPDE_HBM_IN_VOLT:
      ret = read_attr(SMB_XPDE_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_XPDE_HBM_OUT_VOLT:
      ret = read_attr(SMB_XPDE_DEVICE, VOLT(4), value);
      break;
    case SMB_SENSOR_FCM_HSC_IN_VOLT:
      ret = read_hsc_volt_1(SMB_FCM_HSC_DEVICE, 1, value);
      break;
    case SMB_SENSOR_FCM_HSC_OUT_VOLT:
      ret = read_hsc_volt_2(SMB_FCM_HSC_DEVICE, 1, value);
      break;
    case SMB_SENSOR_VDDA_OUT_CURR:
      ret = read_attr(SMB_VDDA_DEVICE, CURR(3), value);
      *value = *value * 1.0433 + 0.3926;
      break;
    case SMB_SENSOR_PCIE_OUT_CURR:
      ret = read_attr(SMB_PCIE_DEVICE, CURR(3), value);
      *value = *value * 0.9994 + 1.0221;
      break;
    case SMB_SENSOR_IR3R3V_RIGHT_OUT_CURR:
      ret = read_attr(SMB_PCIE_DEVICE, CURR(4), value);
      break;
    case SMB_SENSOR_IR3R3V_LEFT_OUT_CURR:
      ret = read_attr(SMB_VDDA_DEVICE, CURR(4), value);
      break;
    case SMB_SENSOR_SW_CORE_OUT_CURR:
      ret = read_attr(SMB_XPDE_DEVICE, CURR(3), value);
      break;
    case SMB_SENSOR_XPDE_HBM_OUT_CURR:
      ret = read_attr(SMB_XPDE_DEVICE, CURR(4), value);
      break;
    case SMB_SENSOR_FCM_HSC_OUT_CURR:
      ret = read_hsc_curr(SMB_FCM_HSC_DEVICE, 1, value);
      *value = *value * 4.4254 - 0.2048;
      if (*value < 0)
        *value = 0;
      break;
    case SMB_SENSOR_VDDA_OUT_POWER:
      ret = read_attr(SMB_VDDA_DEVICE,  POWER(3), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_PCIE_OUT_POWER:
      ret = read_attr(SMB_PCIE_DEVICE,  POWER(3), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_IR3R3V_RIGHT_OUT_POWER:
      ret = read_attr(SMB_PCIE_DEVICE,  POWER(4), value);
      *value = *value / 1000 * 2;
      break;
    case SMB_SENSOR_IR3R3V_LEFT_OUT_POWER:
      ret = read_attr(SMB_VDDA_DEVICE,  POWER(4), value);
      *value = *value / 1000 * 2;
      break;
    case SMB_SENSOR_SW_CORE_OUT_POWER:
      ret = read_attr(SMB_XPDE_DEVICE, POWER(3), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_XPDE_HBM_OUT_POWER:
      ret = read_attr(SMB_XPDE_DEVICE, POWER(4), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_FCM_HSC_IN_POWER:
      ret = read_hsc_power(SMB_FCM_HSC_DEVICE, 1, value);
      *value /= 1000;
      break;
    case SMB_SENSOR_XDPE_LEFT_1_IN_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_1_OUT_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_1_OUT_CURR:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, CURR(3), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_1_OUT_POWER:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, POWER(3), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_XDPE_LEFT_1_TEMP:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_2_IN_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_2_OUT_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(4), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_2_OUT_CURR:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, CURR(4), value);
      break;
    case SMB_SENSOR_XDPE_LEFT_2_OUT_POWER:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, POWER(4), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_XDPE_LEFT_2_TEMP:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_1_IN_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_1_OUT_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_1_OUT_CURR:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, CURR(3), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_1_OUT_POWER:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, POWER(3), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_XDPE_RIGHT_1_TEMP:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_2_IN_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_2_OUT_VOLT:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, VOLT(4), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_2_OUT_CURR:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, CURR(4), value);
      break;
    case SMB_SENSOR_XDPE_RIGHT_2_OUT_POWER:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, POWER(4), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_XDPE_RIGHT_2_TEMP:
      ret = read_attr(SMB_XPDE_LEFT_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_FAN1_FRONT_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 1, value);
      break;
    case SMB_SENSOR_FAN1_REAR_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 2, value);
      break;
    case SMB_SENSOR_FAN2_FRONT_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 3, value);
      break;
    case SMB_SENSOR_FAN2_REAR_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 4, value);
      break;
    case SMB_SENSOR_FAN3_FRONT_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 5, value);
      break;
    case SMB_SENSOR_FAN3_REAR_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 6, value);
      break;
    case SMB_SENSOR_FAN4_FRONT_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 7, value);
      break;
    case SMB_SENSOR_FAN4_REAR_TACH:
      ret = read_fan_rpm_f(SMB_FCM_TACH_DEVICE, 8, value);
      break;
    case SMB_BMC_ADC0_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(1), value);
      break;
    case SMB_BMC_ADC1_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(2), value);
      break;
    case SMB_BMC_ADC2_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(3), value);
      *value = *value * 3.2;
      break;
    case SMB_BMC_ADC3_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(4), value);
      *value = *value * 3.2;
      break;
    case SMB_BMC_ADC4_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(5), value);
      break;
    case SMB_BMC_ADC5_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(6), value);
      *value = *value * 2;
      break;
    case SMB_BMC_ADC6_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(7), value);
      break;
    case SMB_BMC_ADC7_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(8), value);
      *value = *value * 2;
      break;
    case SMB_BMC_ADC8_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(9), value);
      *value = *value * 2;
      break;
    case SMB_BMC_ADC9_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(10), value);
      break;
    case SMB_BMC_ADC10_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(11), value);
      break;
    case SMB_BMC_ADC11_VSEN:
      ret = read_attr(AST_ADC_DEVICE, VOLT(12), value);
      *value = *value * 2;
      break;
    case SMB_SENSOR_VDDCK_0_IN_VOLT:
      ret = read_attr(SMB_PXE1211_DEVICE, VOLT(1), value);
      break;
    case SMB_SENSOR_VDDCK_0_OUT_VOLT:
      ret = read_attr(SMB_PXE1211_DEVICE, VOLT(4), value);
      break;
    case SMB_SENSOR_VDDCK_0_OUT_CURR:
      ret = read_attr(SMB_PXE1211_DEVICE, CURR(4), value);
      break;
    case SMB_SENSOR_VDDCK_0_OUT_POWER:
      ret = read_attr(SMB_PXE1211_DEVICE, POWER(4), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_VDDCK_0_TEMP:
      ret = read_attr(SMB_PXE1211_DEVICE, TEMP(1), value);
      break;
    case SMB_SENSOR_VDDCK_1_IN_VOLT:
      ret = read_attr(SMB_PXE1211_DEVICE, VOLT(2), value);
      break;
    case SMB_SENSOR_VDDCK_1_OUT_VOLT:
      ret = read_attr(SMB_PXE1211_DEVICE, VOLT(5), value);
      break;
    case SMB_SENSOR_VDDCK_1_OUT_CURR:
      ret = read_attr(SMB_PXE1211_DEVICE, CURR(5), value);
      break;
    case SMB_SENSOR_VDDCK_1_OUT_POWER:
      ret = read_attr(SMB_PXE1211_DEVICE, POWER(5), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_VDDCK_1_TEMP:
      ret = read_attr(SMB_PXE1211_DEVICE, TEMP(2), value);
      break;
    case SMB_SENSOR_VDDCK_2_IN_VOLT:
      ret = read_attr(SMB_PXE1211_DEVICE, VOLT(3), value);
      break;
    case SMB_SENSOR_VDDCK_2_OUT_VOLT:
      ret = read_attr(SMB_PXE1211_DEVICE, VOLT(6), value);
      break;
    case SMB_SENSOR_VDDCK_2_OUT_CURR:
      ret = read_attr(SMB_PXE1211_DEVICE, CURR(6), value);
      break;
    case SMB_SENSOR_VDDCK_2_OUT_POWER:
      ret = read_attr(SMB_PXE1211_DEVICE, POWER(6), value);
      *value /= 1000;
      break;
    case SMB_SENSOR_VDDCK_2_TEMP:
      ret = read_attr(SMB_PXE1211_DEVICE, TEMP(3), value);
      break;
    default:
      ret = READING_NA;
      break;
  }
  return ret;
}