static int update_adc_result(struct bcmpmu_adc *padc,
			     struct bcmpmu_adc_req *req)
{
	int ret;
	int insurance = 100;

	req->raw = -EINVAL;
	if (req->sig == PMU_ADC_FG_CURRSMPL || req->sig == PMU_ADC_FG_RAW) {
		ret = padc->bcmpmu->write_dev(padc->bcmpmu,
					      PMU_REG_FG_FRZSMPL,
					      padc->bcmpmu->
					      regmap[PMU_REG_FG_FRZSMPL].mask,
					      padc->bcmpmu->
					      regmap[PMU_REG_FG_FRZSMPL].mask);
		if (ret != 0)
			return ret;
	}
	/* FG ADC channel can return negative value
	and -22 (-EINVAL) is a valid value for FG */
	do {
		ret = read_adc_result(padc, req);
		/* Here we get the raw value */
		if (ret != 0)
			return ret;
		
		insurance--;
	} while (req->raw == -EINVAL && insurance &&
			req->sig != PMU_ADC_FG_CURRSMPL);
 
	BUG_ON(insurance == 0 && req->raw == -EINVAL);

	BUG_ON(insurance == 0 && req->raw == -EINVAL);
	return 0;
}
Пример #2
0
static int update_adc_result(struct bcmpmu_adc *padc,
			     struct bcmpmu_adc_req *req)
{
	int ret;

	req->raw = -EINVAL;
	if (req->sig == PMU_ADC_FG_CURRSMPL ||
		req->sig == PMU_ADC_FG_FST_CURRSMPL ||
		req->sig == PMU_ADC_FG_RAW) {
		ret = padc->bcmpmu->write_dev(padc->bcmpmu,
					      PMU_REG_FG_FRZSMPL,
					      padc->bcmpmu->
					      regmap[PMU_REG_FG_FRZSMPL].mask,
					      padc->bcmpmu->
					      regmap[PMU_REG_FG_FRZSMPL].mask);
		if (ret != 0)
			return ret;
	}

	ret = read_adc_result(padc, req);/* Here we get the raw value */
	return ret;
}