Skip to contentSkip to conversation

battery-2.6.35.git

GIT PULL New Anton Vorontsov 3 participants 4 messages Jul 27, 2010

lore
Share & tools
lore
#0 lore raw

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
index d762a0c..9b3b4b7 100644
@@ -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,
 	}
 };
 
#1 lore raw
Quoted 5 lines · Anton Vorontsov
drivers/power/ds2782_battery.c +0 -0
index d762a0c..9b3b4b7 100644

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

#2 lore raw
Quoted 8 lines · Geert Uytterhoeven
Quoted 7 lines · Anton Vorontsov
drivers/power/ds2782_battery.c +0 -0
index d762a0c..9b3b4b7 100644
@@ -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 -4
  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!

Signature · 3 lines
Anton Vorontsov
email: [email protected]
irc://irc.freenode.net/bd2
#3 lore raw

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
index d762a0c..9b3b4b7 100644
@@ -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 -4
 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'?).

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
index 9b3b4b7..d9a3b59 100644
@@ -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;
 }