From ccb9ed18cf886e70aff3738a4eb0fdb1f54679bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20St=C3=BCbner?= Date: Thu, 29 Dec 2011 12:52:07 +0100 Subject: [PATCH] --- yaml --- r: 283483 b: refs/heads/master c: 34aed73df3a9e75e313a7510b201f6755ae3e6bc h: refs/heads/master i: 283481: 8230abb43e73b0dc3046c6a43eb6c51da368296c 283479: 7e966c1f1f57faa27b72c941faafd6abcaeb77db v: v3 --- [refs] | 2 +- trunk/drivers/power/s3c_adc_battery.c | 25 ++++++++++++++++++++++--- trunk/include/linux/s3c_adc_battery.h | 4 ++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 6fdb84401a72..3acd3f40a774 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ded7fc7b055055427d0d04958482dbe3d23e087d +refs/heads/master: 34aed73df3a9e75e313a7510b201f6755ae3e6bc diff --git a/trunk/drivers/power/s3c_adc_battery.c b/trunk/drivers/power/s3c_adc_battery.c index e687ee7f18f2..8b804a566756 100644 --- a/trunk/drivers/power/s3c_adc_battery.c +++ b/trunk/drivers/power/s3c_adc_battery.c @@ -47,6 +47,22 @@ static void s3c_adc_bat_ext_power_changed(struct power_supply *psy) msecs_to_jiffies(JITTER_DELAY)); } +static int gather_samples(struct s3c_adc_client *client, int num, int channel) +{ + int value, i; + + /* default to 1 if nothing is set */ + if (num < 1) + num = 1; + + value = 0; + for (i = 0; i < num; i++) + value += s3c_adc_read(client, channel); + value /= num; + + return value; +} + static enum power_supply_property s3c_adc_backup_bat_props[] = { POWER_SUPPLY_PROP_VOLTAGE_NOW, POWER_SUPPLY_PROP_VOLTAGE_MIN, @@ -67,7 +83,8 @@ static int s3c_adc_backup_bat_get_property(struct power_supply *psy, if (bat->volt_value < 0 || jiffies_to_msecs(jiffies - bat->timestamp) > BAT_POLL_INTERVAL) { - bat->volt_value = s3c_adc_read(bat->client, + bat->volt_value = gather_samples(bat->client, + bat->pdata->backup_volt_samples, bat->pdata->backup_volt_channel); bat->volt_value *= bat->pdata->backup_volt_mult; bat->timestamp = jiffies; @@ -139,9 +156,11 @@ static int s3c_adc_bat_get_property(struct power_supply *psy, if (bat->volt_value < 0 || bat->cur_value < 0 || jiffies_to_msecs(jiffies - bat->timestamp) > BAT_POLL_INTERVAL) { - bat->volt_value = s3c_adc_read(bat->client, + bat->volt_value = gather_samples(bat->client, + bat->pdata->volt_samples, bat->pdata->volt_channel) * bat->pdata->volt_mult; - bat->cur_value = s3c_adc_read(bat->client, + bat->cur_value = gather_samples(bat->client, + bat->pdata->current_samples, bat->pdata->current_channel) * bat->pdata->current_mult; bat->timestamp = jiffies; } diff --git a/trunk/include/linux/s3c_adc_battery.h b/trunk/include/linux/s3c_adc_battery.h index fbe58b7e63eb..99dadbffdd4f 100644 --- a/trunk/include/linux/s3c_adc_battery.h +++ b/trunk/include/linux/s3c_adc_battery.h @@ -25,6 +25,10 @@ struct s3c_adc_bat_pdata { const unsigned int current_channel; const unsigned int backup_volt_channel; + const unsigned int volt_samples; + const unsigned int current_samples; + const unsigned int backup_volt_samples; + const unsigned int volt_mult; const unsigned int current_mult; const unsigned int backup_volt_mult;