2010-07-27 13:51:22

by Anton Vorontsov

[permalink] [raw]
Subject: [GIT PULL] battery-2.6.35.git

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, &current_uA);
+ err = info->ops->get_battery_current(info, &current_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,
}
};


2010-07-27 14:03:17

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [GIT PULL] battery-2.6.35.git

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

2010-07-27 14:13:38

by Anton Vorontsov

[permalink] [raw]
Subject: Re: [GIT PULL] battery-2.6.35.git

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

2010-07-27 21:04:39

by Ryan Mallon

[permalink] [raw]
Subject: [PATCH] Fix ds2782 battery driver units (was Re: [GIT PULL] battery-2.6.35.git)

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;
}