Merge branch 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[deliverable/linux.git] / drivers / power / s3c_adc_battery.c
index d32d0d70f9ba951c21204a6fccaf9a2d61951f67..8b804a566756a11c06ce08a8cdadc10828e6bcc0 100644 (file)
@@ -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;
        }
@@ -421,17 +440,7 @@ static struct platform_driver s3c_adc_bat_driver = {
        .resume         = s3c_adc_bat_resume,
 };
 
-static int __init s3c_adc_bat_init(void)
-{
-       return platform_driver_register(&s3c_adc_bat_driver);
-}
-module_init(s3c_adc_bat_init);
-
-static void __exit s3c_adc_bat_exit(void)
-{
-       platform_driver_unregister(&s3c_adc_bat_driver);
-}
-module_exit(s3c_adc_bat_exit);
+module_platform_driver(s3c_adc_bat_driver);
 
 MODULE_AUTHOR("Vasily Khoruzhick <anarsoul@gmail.com>");
 MODULE_DESCRIPTION("iPAQ H1930/H1940/RX1950 battery controller driver");
This page took 0.025917 seconds and 5 git commands to generate.