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;
}
Ejemplo n.º 2
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 (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);
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
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);
}
Ejemplo n.º 5
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;

	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);
}
Ejemplo n.º 7
0
/* 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;
}