Hello Linus,
Here is another small fixup for ds2782_battery driver.
At first I thought that this is not 2.6.35 regression, thus
I didn't send it earlier. But, Ben Hutchings convinced me that
this is actually 2.6.35 regression, so now I believe that this
fix should be OK.
It affects only minor platforms though, i.e. sh4, alpha, frv,
microblaze, mn10300. And I doubt that any of those platforms
have DS2782 batteries, so I will understand if you won't pull
it that late.
Thanks,
The following changes since commit 7e27d6e778cd87b6f2415515d7127eba53fe5d02:
Linus Torvalds (1):
Linux 2.6.35-rc3
are available in the git repository at:
git://git.infradead.org/users/cbou/battery-2.6.35.git master
Peter Huewe (1):
ds2782_battery: Rename get_current to fix build failure / name conflict
drivers/power/ds2782_battery.c | 29 ++++++++++++++---------------
1 files changed, 14 insertions(+), 15 deletions(-)
commit eb9650d6d989f24f21232a055d8fd45f1a9dcf99
Author: Peter Huewe <[email protected]>
Date: Thu May 13 01:54:57 2010 +0200
ds2782_battery: Rename get_current to fix build failure / name conflict
This patch changes the name of get_current function pointer to
get_battery_current to resolve a name conflict with the get_current
macro defined in current.h.
This conflict resulted in a build-failure[1] for the sh4 arch
allyesconfig:
drivers/power/ds2782_battery.c:216:48: error: macro "get_current"
passed 2 arguments, but takes just
This patch fixes the issue. To be consistent the other function pointers
(_voltage,_capacity) were renamed too.
Signed-off-by: Peter Huewe <[email protected]>
Acked-by: Ryan Mallon <[email protected]>
Acked-by: Mike Rapoport <[email protected]>
Signed-off-by: Anton Vorontsov <[email protected]>
diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
index d762a0c..9b3b4b7 100644
--- a/drivers/power/ds2782_battery.c
+++ b/drivers/power/ds2782_battery.c
@@ -43,10 +43,9 @@
struct ds278x_info;
struct ds278x_battery_ops {
- int (*get_current)(struct ds278x_info *info, int *current_uA);
- int (*get_voltage)(struct ds278x_info *info, int *voltage_uA);
- int (*get_capacity)(struct ds278x_info *info, int *capacity_uA);
-
+ int (*get_battery_current)(struct ds278x_info *info, int *current_uA);
+ int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uA);
+ int (*get_battery_capacity)(struct ds278x_info *info, int *capacity_uA);
};
#define to_ds278x_info(x) container_of(x, struct ds278x_info, battery)
@@ -213,11 +212,11 @@ static int ds278x_get_status(struct ds278x_info *info, int *status)
int current_uA;
int capacity;
- err = info->ops->get_current(info, ¤t_uA);
+ err = info->ops->get_battery_current(info, ¤t_uA);
if (err)
return err;
- err = info->ops->get_capacity(info, &capacity);
+ err = info->ops->get_battery_capacity(info, &capacity);
if (err)
return err;
@@ -246,15 +245,15 @@ static int ds278x_battery_get_property(struct power_supply *psy,
break;
case POWER_SUPPLY_PROP_CAPACITY:
- ret = info->ops->get_capacity(info, &val->intval);
+ ret = info->ops->get_battery_capacity(info, &val->intval);
break;
case POWER_SUPPLY_PROP_VOLTAGE_NOW:
- ret = info->ops->get_voltage(info, &val->intval);
+ ret = info->ops->get_battery_voltage(info, &val->intval);
break;
case POWER_SUPPLY_PROP_CURRENT_NOW:
- ret = info->ops->get_current(info, &val->intval);
+ ret = info->ops->get_battery_current(info, &val->intval);
break;
case POWER_SUPPLY_PROP_TEMP:
@@ -307,14 +306,14 @@ enum ds278x_num_id {
static struct ds278x_battery_ops ds278x_ops[] = {
[DS2782] = {
- .get_current = ds2782_get_current,
- .get_voltage = ds2782_get_voltage,
- .get_capacity = ds2782_get_capacity,
+ .get_battery_current = ds2782_get_current,
+ .get_battery_voltage = ds2782_get_voltage,
+ .get_battery_capacity = ds2782_get_capacity,
},
[DS2786] = {
- .get_current = ds2786_get_current,
- .get_voltage = ds2786_get_voltage,
- .get_capacity = ds2786_get_capacity,
+ .get_battery_current = ds2786_get_current,
+ .get_battery_voltage = ds2786_get_voltage,
+ .get_battery_capacity = ds2786_get_capacity,
}
};
On Tue, Jul 27, 2010 at 15:51, Anton Vorontsov <[email protected]> wrote:
> diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
> index d762a0c..9b3b4b7 100644
> --- a/drivers/power/ds2782_battery.c
> +++ b/drivers/power/ds2782_battery.c
> @@ -43,10 +43,9 @@
> struct ds278x_info;
>
> struct ds278x_battery_ops {
> - int (*get_current)(struct ds278x_info *info, int *current_uA);
> - int (*get_voltage)(struct ds278x_info *info, int *voltage_uA);
> - int (*get_capacity)(struct ds278x_info *info, int *capacity_uA);
> -
> + int (*get_battery_current)(struct ds278x_info *info, int *current_uA);
> + int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uA);
> + int (*get_battery_capacity)(struct ds278x_info *info, int *capacity_uA);
What's the meaning of these `uA' namings? At first I thought `micro Ampère', but
that can't be correct for voltage (`uV'?) and capacity (`uAh'?).
So I had a look at the sources, and noticed:
| static int ds2782_get_voltage(struct ds278x_info *info, int *voltage_uA)
| {
| s16 raw;
| int err;
|
| /*
| * Voltage is measured in units of 4.88mV. The voltage is stored as
^^^^
| * a 10-bit number plus sign, in the upper bits of a 16-bit register
| */
| err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw);
| if (err)
| return err;
| *voltage_uA = (raw / 32) * 4800;
^^^^
These don't match?
So the voltage_uA unit is 1 mV?
| return 0;
| }
|
| static int ds2786_get_voltage(struct ds278x_info *info, int *voltage_uA)
| {
| s16 raw;
| int err;
|
| /*
| * Voltage is measured in units of 1.22mV. The voltage is stored as
| * a 10-bit number plus sign, in the upper bits of a 16-bit register
| */
| err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw);
| if (err)
| return err;
| *voltage_uA = (raw / 8) * 1220;
^
32? Or the comments above are wrong.
| return 0;
| }
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
On Tue, Jul 27, 2010 at 04:03:14PM +0200, Geert Uytterhoeven wrote:
> On Tue, Jul 27, 2010 at 15:51, Anton Vorontsov <[email protected]> wrote:
> > diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
> > index d762a0c..9b3b4b7 100644
> > --- a/drivers/power/ds2782_battery.c
> > +++ b/drivers/power/ds2782_battery.c
> > @@ -43,10 +43,9 @@
> > struct ds278x_info;
> >
> > struct ds278x_battery_ops {
> > - int (*get_current)(struct ds278x_info *info, int *current_uA);
> > - int (*get_voltage)(struct ds278x_info *info, int *voltage_uA);
> > - int (*get_capacity)(struct ds278x_info *info, int *capacity_uA);
> > -
> > + int (*get_battery_current)(struct ds278x_info *info, int *current_uA);
> > + int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uA);
> > + int (*get_battery_capacity)(struct ds278x_info *info, int *capacity_uA);
>
> What's the meaning of these `uA' namings? At first I thought `micro Ampère', but
> that can't be correct for voltage (`uV'?) and capacity (`uAh'?).
Yeah, the names aren't quite right. But they were wrong before
that patch too, so a patch on top to fix these issues will work.
Cc'ing driver authors.
Thanks Geert!
--
Anton Vorontsov
email: [email protected]
irc://irc.freenode.net/bd2
On 07/28/2010 02:13 AM, Anton Vorontsov wrote:
> On Tue, Jul 27, 2010 at 04:03:14PM +0200, Geert Uytterhoeven wrote:
>
>> On Tue, Jul 27, 2010 at 15:51, Anton Vorontsov <[email protected]> wrote:
>>
>>> diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
>>> index d762a0c..9b3b4b7 100644
>>> --- a/drivers/power/ds2782_battery.c
>>> +++ b/drivers/power/ds2782_battery.c
>>> @@ -43,10 +43,9 @@
>>> struct ds278x_info;
>>>
>>> struct ds278x_battery_ops {
>>> - int (*get_current)(struct ds278x_info *info, int *current_uA);
>>> - int (*get_voltage)(struct ds278x_info *info, int *voltage_uA);
>>> - int (*get_capacity)(struct ds278x_info *info, int *capacity_uA);
>>> -
>>> + int (*get_battery_current)(struct ds278x_info *info, int *current_uA);
>>> + int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uA);
>>> + int (*get_battery_capacity)(struct ds278x_info *info, int *capacity_uA);
>>>
>> What's the meaning of these `uA' namings? At first I thought `micro Ampère', but
>> that can't be correct for voltage (`uV'?) and capacity (`uAh'?).
>>
> Yeah, the names aren't quite right. But they were wrong before
> that patch too, so a patch on top to fix these issues will work.
>
> Cc'ing driver authors.
>
> Thanks Geert!
>
Thanks for pointing this out. The following untested patch fixes the
units in the variable names.
~Ryan
---
Correct the unit names in the ds2782 battery driver. Changes voltage_uA
to voltage_uV and capacity_uA to capacity.
Signed-off-by: Ryan Mallon <[email protected]>
---
diff --git a/drivers/power/ds2782_battery.c b/drivers/power/ds2782_battery.c
index 9b3b4b7..d9a3b59 100644
--- a/drivers/power/ds2782_battery.c
+++ b/drivers/power/ds2782_battery.c
@@ -44,8 +44,8 @@ struct ds278x_info;
struct ds278x_battery_ops {
int (*get_battery_current)(struct ds278x_info *info, int *current_uA);
- int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uA);
- int (*get_battery_capacity)(struct ds278x_info *info, int *capacity_uA);
+ int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uV);
+ int (*get_battery_capacity)(struct ds278x_info *info, int *capacity);
};
#define to_ds278x_info(x) container_of(x, struct ds278x_info, battery)
@@ -137,7 +137,7 @@ static int ds2782_get_current(struct ds278x_info *info, int *current_uA)
return 0;
}
-static int ds2782_get_voltage(struct ds278x_info *info, int *voltage_uA)
+static int ds2782_get_voltage(struct ds278x_info *info, int *voltage_uV)
{
s16 raw;
int err;
@@ -149,7 +149,7 @@ static int ds2782_get_voltage(struct ds278x_info *info, int *voltage_uA)
err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw);
if (err)
return err;
- *voltage_uA = (raw / 32) * 4800;
+ *voltage_uV = (raw / 32) * 4800;
return 0;
}
@@ -177,7 +177,7 @@ static int ds2786_get_current(struct ds278x_info *info, int *current_uA)
return 0;
}
-static int ds2786_get_voltage(struct ds278x_info *info, int *voltage_uA)
+static int ds2786_get_voltage(struct ds278x_info *info, int *voltage_uV)
{
s16 raw;
int err;
@@ -189,7 +189,7 @@ static int ds2786_get_voltage(struct ds278x_info *info, int *voltage_uA)
err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw);
if (err)
return err;
- *voltage_uA = (raw / 8) * 1220;
+ *voltage_uV = (raw / 8) * 1220;
return 0;
}