diff options
| author | Harry Yang <harryy@codeaurora.org> | 2017-03-09 11:22:44 -0800 |
|---|---|---|
| committer | Harry Yang <harryy@codeaurora.org> | 2017-03-09 13:14:06 -0800 |
| commit | 240a6fcac510d7fbb71bb6785257a91199283ef7 (patch) | |
| tree | 6b244653623fc29196f5c7107a39f05b3c5e42c3 /drivers/power | |
| parent | c78ba94d64e9a29e697cb5f2b8dcd7998f54b995 (diff) | |
qcom: smb138x: Reduce die temperature samples for initial readings
Die temperature samples 10 times to take average to reduce error,
which extends time in reading and causes delay during boot up, where
the data is not really insterested.
To improve it, only take one sample for the first few user temp
readings.
Change-Id: Ifc10de8a624f1d50d303673ff553d4801337481b
Signed-off-by: Harry Yang <harryy@codeaurora.org>
Diffstat (limited to 'drivers/power')
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.h | 1 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb138x-charger.c | 13 |
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/power/supply/qcom/smb-lib.h b/drivers/power/supply/qcom/smb-lib.h index 21ccd3ce57c7..bf9084504d65 100644 --- a/drivers/power/supply/qcom/smb-lib.h +++ b/drivers/power/supply/qcom/smb-lib.h @@ -310,6 +310,7 @@ struct smb_charger { u32 wa_flags; enum cc2_sink_type cc2_sink_detach_flag; int boost_current_ua; + int temp_speed_reading_count; /* extcon for VBUS / ID notification to USB for uUSB */ struct extcon_dev *extcon; diff --git a/drivers/power/supply/qcom/smb138x-charger.c b/drivers/power/supply/qcom/smb138x-charger.c index 1c7c1e78699f..739d80cd8801 100644 --- a/drivers/power/supply/qcom/smb138x-charger.c +++ b/drivers/power/supply/qcom/smb138x-charger.c @@ -45,6 +45,7 @@ #define STACKED_DIODE_EN_BIT BIT(2) #define TDIE_AVG_COUNT 10 +#define MAX_SPEED_READING_TIMES 5 enum { OOB_COMP_WA_BIT = BIT(0), @@ -126,8 +127,16 @@ static int smb138x_get_prop_charger_temp(struct smb138x *chip, union power_supply_propval pval; int rc = 0, avg = 0, i; struct smb_charger *chg = &chip->chg; + int die_avg_count; - for (i = 0; i < TDIE_AVG_COUNT; i++) { + if (chg->temp_speed_reading_count < MAX_SPEED_READING_TIMES) { + chg->temp_speed_reading_count++; + die_avg_count = 1; + } else { + die_avg_count = TDIE_AVG_COUNT; + } + + for (i = 0; i < die_avg_count; i++) { pval.intval = 0; rc = smblib_get_prop_charger_temp(chg, &pval); if (rc < 0) { @@ -137,7 +146,7 @@ static int smb138x_get_prop_charger_temp(struct smb138x *chip, } avg += pval.intval; } - val->intval = avg / TDIE_AVG_COUNT; + val->intval = avg / die_avg_count; return rc; } |
