|
@@ -47,6 +47,22 @@ static void s3c_adc_bat_ext_power_changed(struct power_supply *psy)
|
|
msecs_to_jiffies(JITTER_DELAY));
|
|
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[] = {
|
|
static enum power_supply_property s3c_adc_backup_bat_props[] = {
|
|
POWER_SUPPLY_PROP_VOLTAGE_NOW,
|
|
POWER_SUPPLY_PROP_VOLTAGE_NOW,
|
|
POWER_SUPPLY_PROP_VOLTAGE_MIN,
|
|
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 ||
|
|
if (bat->volt_value < 0 ||
|
|
jiffies_to_msecs(jiffies - bat->timestamp) >
|
|
jiffies_to_msecs(jiffies - bat->timestamp) >
|
|
BAT_POLL_INTERVAL) {
|
|
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->pdata->backup_volt_channel);
|
|
bat->volt_value *= bat->pdata->backup_volt_mult;
|
|
bat->volt_value *= bat->pdata->backup_volt_mult;
|
|
bat->timestamp = jiffies;
|
|
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 ||
|
|
if (bat->volt_value < 0 || bat->cur_value < 0 ||
|
|
jiffies_to_msecs(jiffies - bat->timestamp) >
|
|
jiffies_to_msecs(jiffies - bat->timestamp) >
|
|
BAT_POLL_INTERVAL) {
|
|
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->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->pdata->current_channel) * bat->pdata->current_mult;
|
|
bat->timestamp = jiffies;
|
|
bat->timestamp = jiffies;
|
|
}
|
|
}
|