int32_t pm8xxx_adc_scale_bl_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t bl_voltage = 0; uint32_t tablesize; int rc = 0; bl_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); tablesize = ARRAY_SIZE(adcmap_bl_therm); if (bl_voltage > adcmap_bl_therm[0].x || bl_voltage < adcmap_bl_therm[tablesize-1].x){ adc_chan_result->physical = PM8xxx_ADC_BL_THERM_INVALID_TEMP; } else { rc = pm8xxx_adc_map_linear( adcmap_bl_therm, tablesize, bl_voltage, &adc_chan_result->physical); } return rc; }
int32_t pm8xxx_adc_scale_batt_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t bat_voltage = 0; struct pm8xxx_adc_map_pt *adc_map = NULL; uint32_t adc_map_array_size; unsigned int phaseid = 0; bat_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); ext_bat_voltage = bat_voltage; if (phaseid == 0) phaseid = fih_get_product_phase(); if (phaseid <= PHASE_SP) { adc_map = adcmap_btm_threshold; adc_map_array_size = ARRAY_SIZE(adcmap_btm_threshold); } else { adc_map = adcmap_btm_threshold_pre_ap; adc_map_array_size = ARRAY_SIZE(adcmap_btm_threshold_pre_ap); } return pm8xxx_adc_map_batt_therm( adc_map, adc_map_array_size, bat_voltage, &adc_chan_result->physical); }
int32_t pm8xxx_adc_scale_batt_id(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t batt_id_voltage = 0; batt_id_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); adc_chan_result->physical = batt_id_voltage; adc_chan_result->physical = adc_chan_result->measurement; return 0; }
int32_t pm8xxx_adc_scale_pa_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t pa_voltage = 0; pa_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); return pm8xxx_adc_map_linear( adcmap_pa_therm, ARRAY_SIZE(adcmap_pa_therm), pa_voltage, &adc_chan_result->physical); }
int32_t pm8xxx_adc_scale_batt_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t bat_voltage = 0; bat_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); return pm8xxx_adc_map_batt_therm( adcmap_btm_threshold, ARRAY_SIZE(adcmap_btm_threshold), bat_voltage, &adc_chan_result->physical); }
int32_t pm8xxx_adc_scale_sys_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t sys_voltage = 0; sys_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); ext_sys_voltage = sys_voltage; //printk(KERN_ERR "temperature ADC sys = %lld\n", sys_voltage); return pm8xxx_adc_map_batt_therm( adcmap_sys_therm, ARRAY_SIZE(adcmap_sys_therm), sys_voltage, &adc_chan_result->physical); }
/* Scales the ADC code to 0.001 degrees C using the map * table for the XO thermistor. */ int32_t pm8xxx_adc_tdkntcg_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t xo_thm = 0; if (!chan_properties || !chan_properties->offset_gain_numerator || !chan_properties->offset_gain_denominator || !adc_properties || !adc_chan_result) return -EINVAL; xo_thm = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); xo_thm <<= 4; pm8xxx_adc_map_linear(adcmap_ntcg_104ef_104fb, ARRAY_SIZE(adcmap_ntcg_104ef_104fb), xo_thm, &adc_chan_result->physical); return 0; }
int32_t pm8xxx_adc_scale_batt_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t bat_voltage = 0; struct pm8xxx_adc_map_pt *adc_map = NULL; uint32_t adc_map_array_size; unsigned int phaseid = 0; bat_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); ext_bat_voltage = bat_voltage; if (ext_bat_voltage > 1700) { pr_err("[chg %s %d]ERROR!! Battery removed %lld", __func__, __LINE__, ext_bat_voltage); machine_power_off(); } if (phaseid == 0) phaseid = fih_get_product_phase(); if (phaseid <= PHASE_SP) { adc_map = adcmap_btm_threshold; adc_map_array_size = ARRAY_SIZE(adcmap_btm_threshold); } else { adc_map = adcmap_btm_threshold_pre_ap; adc_map_array_size = ARRAY_SIZE(adcmap_btm_threshold_pre_ap); } return pm8xxx_adc_map_batt_therm( adc_map, adc_map_array_size, bat_voltage, &adc_chan_result->physical); }
int32_t pm8xxx_adc_scale_batt_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t bat_voltage = 0; bat_voltage = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); #if defined(ORG_VER) #else adc_chan_result->measurement = bat_voltage; #endif return pm8xxx_adc_map_batt_therm( adcmap_btm_threshold, ARRAY_SIZE(adcmap_btm_threshold), bat_voltage, &adc_chan_result->physical); }
/* Scales the ADC code to 0.001 degrees C using the map * table for the XO thermistor. */ int32_t pm8xxx_adc_tdkntcg_therm(int32_t adc_code, const struct pm8xxx_adc_properties *adc_properties, const struct pm8xxx_adc_chan_properties *chan_properties, struct pm8xxx_adc_chan_result *adc_chan_result) { int64_t xo_thm = 0; uint32_t num1 = 0; uint32_t num2 = 0; uint32_t dnum = 0; uint32_t rt_r25 = 0; if (!chan_properties || !chan_properties->offset_gain_numerator || !chan_properties->offset_gain_denominator || !adc_properties || !adc_chan_result) return -EINVAL; xo_thm = pm8xxx_adc_scale_ratiometric_calib(adc_code, adc_properties, chan_properties); if (xo_thm < 0) xo_thm = -xo_thm; num1 = xo_thm << 14; num2 = (adc_properties->adc_vdd_reference - xo_thm) >> 1; dnum = (adc_properties->adc_vdd_reference - xo_thm); if (dnum == 0) rt_r25 = 0x7FFFFFFF ; else rt_r25 = (num1 + num2)/dnum ; pm8xxx_adc_map_linear(adcmap_ntcg_104ef_104fb, ARRAY_SIZE(adcmap_ntcg_104ef_104fb), rt_r25, &adc_chan_result->physical); return 0; }