static int pem_eeprom_regs()

in meta-facebook/recipes-utils/pem/files/pem.c [1029:1156]


static int pem_eeprom_regs(uint8_t num, int option, pem_eeprom_reg_t *eeprom_reg) {
  if (option != READ && option != WRITE)
    return -1;

  pem[num].fd = i2c_cdev_slave_open(pem[num].bus, pem[num].chip_addr[LTC4282],
                                    I2C_SLAVE_FORCE_CLAIM);
  if (pem[num].fd < 0) {
    ERR_PRINT("Fail to open i2c");
    return -1;
  }

  for(int reg = EE_CONTROL; reg <= EE_ILIM_ADJUST; reg++) {
    int value = 0;
    if (option == READ) {
      pem_reg_read(pem[num].fd, reg, &value);
      switch(reg) {
        case EE_CONTROL:
          eeprom_reg->control.reg_val.value = value;
          break;
        case EE_ALERT:
          eeprom_reg->alert.reg_val.value = value;
          break;
        case EE_FAULT:
          eeprom_reg->fault.reg_val.value = value;
          break;
        case EE_ADC_ALERT_LOG:
          eeprom_reg->adc_alert_log.reg_val.value = value;
          break;
        case EE_FET_BAD_FAULT_TIME:
          eeprom_reg->fet_bad_fault_time = value;
          break;
        case EE_GPIO_CONFIG:
          eeprom_reg->gpio_config.reg_val.value = value;
          break;
        case EE_VGPIO_ALARM_MIN:
          eeprom_reg->vgpio_alarm_min = value;
          break;
        case EE_VGPIO_ALARM_MAX:
          eeprom_reg->vgpio_alarm_max = value;
          break;
        case EE_VSOURCE_ALARM_MIN:
          eeprom_reg->vsource_alarm_min = value;
          break;
        case EE_VSOURCE_ALARM_MAX:
          eeprom_reg->vsource_alarm_max = value;
          break;
        case EE_VSENSE_ALARM_MIN:
          eeprom_reg->vsense_alarm_min = value;
          break;
        case EE_VSENSE_ALARM_MAX:
          eeprom_reg->vsense_alarm_max = value;
          break;
        case EE_POWER_ALARM_MIN:
          eeprom_reg->power_alarm_min = value;
          break;
        case EE_POWER_ALARM_MAX:
          eeprom_reg->power_alarm_max = value;
          break;
        case EE_CLOCK_DECIMATOR:
          eeprom_reg->clock_decimator.reg_val.value = value;
          break;
        case EE_ILIM_ADJUST:
          eeprom_reg->ilim_adjust.reg_val.value = value;
          break;
        default:
          continue;
      }
    } else if (option == WRITE) {
      switch(reg) {
        case EE_CONTROL:
          value = eeprom_reg->control.reg_val.value;
          break;
        case EE_ALERT:
          value = eeprom_reg->alert.reg_val.value;
          break;
        case EE_FAULT:
          value = eeprom_reg->fault.reg_val.value;
          break;
        case EE_ADC_ALERT_LOG:
          value = eeprom_reg->adc_alert_log.reg_val.value;
          break;
        case EE_FET_BAD_FAULT_TIME:
          value = eeprom_reg->fet_bad_fault_time;
          break;
        case EE_GPIO_CONFIG:
          value = eeprom_reg->gpio_config.reg_val.value;
          break;
        case EE_VGPIO_ALARM_MIN:
          value = eeprom_reg->vgpio_alarm_min;
          break;
        case EE_VGPIO_ALARM_MAX:
          value = eeprom_reg->vgpio_alarm_max;
          break;
        case EE_VSOURCE_ALARM_MIN:
          value = eeprom_reg->vsource_alarm_min;
          break;
        case EE_VSOURCE_ALARM_MAX:
          value = eeprom_reg->vsource_alarm_max;
          break;
        case EE_VSENSE_ALARM_MIN:
          value = eeprom_reg->vsense_alarm_min;
          break;
        case EE_VSENSE_ALARM_MAX:
          value = eeprom_reg->vsense_alarm_max;
          break;
        case EE_POWER_ALARM_MIN:
          value = eeprom_reg->power_alarm_min;
          break;
        case EE_POWER_ALARM_MAX:
          value = eeprom_reg->power_alarm_max;
          break;
        case EE_CLOCK_DECIMATOR:
          value = eeprom_reg->clock_decimator.reg_val.value;
          break;
        case EE_ILIM_ADJUST:
          value = eeprom_reg->ilim_adjust.reg_val.value;
          break;
        default:
          continue;
      }
      pem_reg_write(pem[num].fd, reg, value);
    }
  }

  close(pem[num].fd);

  return 0;
}