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; }
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; }