Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758347AbYAFXMS (ORCPT ); Sun, 6 Jan 2008 18:12:18 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754911AbYAFXMH (ORCPT ); Sun, 6 Jan 2008 18:12:07 -0500 Received: from py-out-1112.google.com ([64.233.166.178]:29325 "EHLO py-out-1112.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752823AbYAFXMF (ORCPT ); Sun, 6 Jan 2008 18:12:05 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=nHeRpvaIksmmtTBag6dC34HFwAGHsRHLKjMUiCK88jQcK4YcPZWdzyQOG6F+VD2d4zn7R2WMbabfkUUsxFQaiBdAQsk2b0mIsUdVQeHDRzmqhy7iULQ0E/LwumKuyIBDMEfTviwwO9jxBl9dW8R6juw4oPzVpLekSCgNM1KInsY= Message-ID: Date: Mon, 7 Jan 2008 02:12:01 +0300 From: Dmitry To: cbouatmailru@gmail.com Subject: Re: [PATCH 3/3] Cc: linux-kernel@vger.kernel.org, cbou@mail.ru, dwmw2@infradead.org In-Reply-To: <20080106225306.GA22551@zarina> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20080106123016.GA13324@doriath.ww600.siemens.net> <20080106225306.GA22551@zarina> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8032 Lines: 188 Hi, 2008/1/7, Anton Vorontsov : > On Sun, Jan 06, 2008 at 03:30:16PM +0300, Dmitry Baryshkov wrote: > > Support using VOLTAGE_* properties for apm calculations. It's pretty > > dummy, but useful for batteries for which we can only get voltages. > > Here Signed-off-by: line is missing, please provide one so I could > apply the patch. Signed-off-by: Dmitry Baryshkov :) > > Thanks! > > > diff --git a/drivers/power/apm_power.c b/drivers/power/apm_power.c > > index bbf3ee1..526c96e 100644 > > --- a/drivers/power/apm_power.c > > +++ b/drivers/power/apm_power.c > > @@ -13,6 +13,12 @@ > > #include > > #include > > > > +typedef enum { > > + SOURCE_ENERGY, > > + SOURCE_CHARGE, > > + SOURCE_VOLTAGE, > > +} apm_source; > > + > > #define PSY_PROP(psy, prop, val) psy->get_property(psy, \ > > POWER_SUPPLY_PROP_##prop, val) > > > > @@ -87,7 +93,7 @@ static void find_main_battery(void) > > } > > } > > > > -static int calculate_time(int status, int using_charge) > > +static int calculate_time(int status, apm_source source) > > { > > union power_supply_propval full; > > union power_supply_propval empty; > > @@ -106,20 +112,34 @@ static int calculate_time(int status, int using_charge) > > return -1; > > } > > > > - if (using_charge) { > > + switch (source) { > > + case SOURCE_CHARGE: > > full_prop = POWER_SUPPLY_PROP_CHARGE_FULL; > > full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN; > > empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; > > empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; > > cur_avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG; > > cur_now_prop = POWER_SUPPLY_PROP_CHARGE_NOW; > > - } else { > > + break; > > + case SOURCE_ENERGY: > > full_prop = POWER_SUPPLY_PROP_ENERGY_FULL; > > full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN; > > empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY; > > empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; > > cur_avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG; > > cur_now_prop = POWER_SUPPLY_PROP_ENERGY_NOW; > > + break; > > + case SOURCE_VOLTAGE: > > + full_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX; > > + full_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN; > > + empty_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN; > > + empty_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN; > > + cur_avg_prop = POWER_SUPPLY_PROP_VOLTAGE_AVG; > > + cur_now_prop = POWER_SUPPLY_PROP_VOLTAGE_NOW; > > + break; > > + default: > > + printk(KERN_ERR "Unsupported source: %d\n", source); > > + return -1; > > } > > > > if (_MPSY_PROP(full_prop, &full)) { > > @@ -146,7 +166,7 @@ static int calculate_time(int status, int using_charge) > > return -((cur.intval - empty.intval) * 60L) / I.intval; > > } > > > > -static int calculate_capacity(int using_charge) > > +static int calculate_capacity(apm_source source) > > { > > enum power_supply_property full_prop, empty_prop; > > enum power_supply_property full_design_prop, empty_design_prop; > > @@ -154,20 +174,33 @@ static int calculate_capacity(int using_charge) > > union power_supply_propval empty, full, cur; > > int ret; > > > > - if (using_charge) { > > + switch (source) { > > + case SOURCE_CHARGE: > > full_prop = POWER_SUPPLY_PROP_CHARGE_FULL; > > empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY; > > full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN; > > empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN; > > now_prop = POWER_SUPPLY_PROP_CHARGE_NOW; > > avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG; > > - } else { > > + break; > > + case SOURCE_ENERGY: > > full_prop = POWER_SUPPLY_PROP_ENERGY_FULL; > > empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY; > > full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN; > > empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN; > > now_prop = POWER_SUPPLY_PROP_ENERGY_NOW; > > avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG; > > + case SOURCE_VOLTAGE: > > + full_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX; > > + empty_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN; > > + full_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN; > > + empty_design_prop = POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN; > > + now_prop = POWER_SUPPLY_PROP_VOLTAGE_NOW; > > + avg_prop = POWER_SUPPLY_PROP_VOLTAGE_AVG; > > + break; > > + default: > > + printk(KERN_ERR "Unsupported source: %d\n", source); > > + return -1; > > } > > > > if (_MPSY_PROP(full_prop, &full)) { > > @@ -234,10 +267,12 @@ static void apm_battery_apm_get_power_status(struct apm_power_info *info) > > info->battery_life = capacity.intval; > > } else { > > /* try calculate using energy */ > > - info->battery_life = calculate_capacity(0); > > + info->battery_life = calculate_capacity(SOURCE_ENERGY); > > /* if failed try calculate using charge instead */ > > if (info->battery_life == -1) > > - info->battery_life = calculate_capacity(1); > > + info->battery_life = calculate_capacity(SOURCE_CHARGE); > > + if (info->battery_life == -1) > > + info->battery_life = calculate_capacity(SOURCE_VOLTAGE); > > } > > > > /* charging status */ > > @@ -263,18 +298,22 @@ static void apm_battery_apm_get_power_status(struct apm_power_info *info) > > !MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full)) { > > info->time = time_to_full.intval / 60; > > } else { > > - info->time = calculate_time(status.intval, 0); > > + info->time = calculate_time(status.intval, SOURCE_ENERGY); > > if (info->time == -1) > > - info->time = calculate_time(status.intval, 1); > > + info->time = calculate_time(status.intval, SOURCE_CHARGE); > > + if (info->time == -1) > > + info->time = calculate_time(status.intval, SOURCE_VOLTAGE); > > } > > } else { > > if (!MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty) || > > !MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty)) { > > info->time = time_to_empty.intval / 60; > > } else { > > - info->time = calculate_time(status.intval, 0); > > + info->time = calculate_time(status.intval, SOURCE_ENERGY); > > + if (info->time == -1) > > + info->time = calculate_time(status.intval, SOURCE_CHARGE); > > if (info->time == -1) > > - info->time = calculate_time(status.intval, 1); > > + info->time = calculate_time(status.intval, SOURCE_VOLTAGE); > > } > > } > > > > -- > > With best wishes > > Dmitry > > > > -- > Anton Vorontsov > email: cbou@mail.ru > backup email: ya-cbou@yandex.ru > irc://irc.freenode.net/bd2 > -- With best wishes Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/