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.
drivers/power/ds2782_battery.c +14 -15
@@ -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, } };
Quoted 5 lines · Anton Vorontsov
drivers/power/ds2782_battery.c +0
-0
drivers/power/ds2782_battery.c line 48
Quoted 10 lines
drivers/power/ds2782_battery.c +3
-4@@ -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
Quoted 8 lines · Geert Uytterhoeven
Quoted 7 lines · Anton Vorontsov
drivers/power/ds2782_battery.c +0
-0@@ -43,10 +43,9 @@ struct ds278x_info;
Quoted 11 lines
drivers/power/ds2782_battery.c line 48
Quoted 8 lines
drivers/power/ds2782_battery.c +3
-4struct 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 thoughtmicro 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!
Signature · 3 lines
Anton Vorontsov email: [email protected] irc://irc.freenode.net/bd2
PATCH 1/1 Fix ds2782 battery driver units (was Re: [GIT PULL] battery-2.6.35.git)
Quoted 23 lines · Anton Vorontsov
Quoted 9 lines · Geert Uytterhoeven
Quoted 7 lines · Anton Vorontsov
drivers/power/ds2782_battery.c +0
-0@@ -43,10 +43,9 @@struct ds278x_info ;Quoted 12 lines
drivers/power/ds2782_battery.c line 49
Quoted 9 lines
drivers/power/ds2782_battery.c +3
-4struct 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 thoughtmicro Ampère', but that can't be correct for voltage (uV'?) and capacity (uAh'?).
Quoted 7 lines
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.
---
drivers/power/ds2782_battery.c +6 -6
@@ -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 ; }