* 273 + (295 - 450 * ADC_VALUE / ADC_READ_MAX) / 2 * = -225 * ADC_VALUE / ADC_READ_MAX + 420.5 */ {"ECTemp", LM4_ADC_SEQ0, -225, ADC_READ_MAX, 420, LM4_AIN_NONE, 0x0e /* TS0 | IE0 | END0 */, 0, 0}, /* * The charger current is measured with a 0.005-ohm * resistor. IBAT is 20X the voltage across that resistor when * charging, and either 8X or 16X (default) when discharging, if it's * even enabled (default is not). Nothing looks at this except the * console command, so let's just leave it at unity gain. The ADC * returns 0x000-0xFFF for 0.0-3.3V. You do the math. */ {"ChargerCurrent", LM4_ADC_SEQ1, 1, 1, 0, LM4_AIN(11), 0x06 /* IE0 | END0 */, LM4_GPIO_B, (1<<5)}, /* * TODO(crosbug.com/p/23827): We don't know what to expect here, but * it's an analog input that's pulled high. We're using it as a battery * presence indicator for now. We'll return just 0 - ADC_READ_MAX for * now. */ {"BatteryTemp", LM4_ADC_SEQ2, 1, 1, 0, LM4_AIN(10), 0x06 /* IE0 | END0 */, LM4_GPIO_B, (1<<4)}, }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); /* PWM channels. Must be in the exactly same order as in enum pwm_channel. */ const struct pwm_t pwm_channels[] = { {4, 0},
const struct adc_t adc_channels[] = { /* EC internal temperature is calculated by * 273 + (295 - 450 * ADC_VALUE / ADC_READ_MAX) / 2 * = -225 * ADC_VALUE / ADC_READ_MAX + 420.5 */ {"ECTemp", LM4_ADC_SEQ0, -225, ADC_READ_MAX, 420, LM4_AIN_NONE, 0x0e /* TS0 | IE0 | END0 */, 0, 0}, /* IOUT == ICMNT is on PE3/AIN0 */ /* We have 0.01-ohm resistors, and IOUT is 40X the differential * voltage, so 1000mA ==> 400mV. * ADC returns 0x000-0xFFF, which maps to 0.0-3.3V (as configured). * mA = 1000 * ADC_VALUE / ADC_READ_MAX * 3300 / 400 */ {"ChargerCurrent", LM4_ADC_SEQ1, 33000, ADC_READ_MAX * 4, 0, LM4_AIN(0), 0x06 /* IE0 | END0 */, LM4_GPIO_E, (1<<3)}, }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); /* PWM channels. Must be in the exactly same order as in enum pwm_channel. */ const struct pwm_t pwm_channels[] = { {4, PWM_CONFIG_ACTIVE_LOW}, {3, PWM_CONFIG_ACTIVE_LOW}, {0, PWM_CONFIG_ACTIVE_LOW}, }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); /* I2C ports */ const struct i2c_port_t i2c_ports[] = { {"batt_chg", 0, 100},