Skip to contentSkip to conversation

ACPI battery: update battery status first when querying from sysfs

PATCH In review Zhang Rui 2 participants 4 messages Nov 2, 2010 ACPI

lore
Share & tools
lore

Zhang Rui

author
#0 lore raw

PATCH 2/2 ACPI battery: update battery status first when querying from sysfs

Sometimes the Battery driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect Battery status reported by the power supply sysfs I/F.

Update the Battery status first when querying from sysfs.

---
 drivers/acpi/battery.c |    3 +++
 1 file changed, 3 insertions(+)
drivers/acpi/battery.c +3 -0
Index: linux-2.6/drivers/acpi/battery.c
===================================================================
@@ -184,6 +184,9 @@ static int acpi_battery_get_property(str
 	int ret = 0;
 	struct acpi_battery *battery = to_acpi_battery(psy);
 
+	if (acpi_battery_update(battery))
+		return -ENODEV;
+
 	if (acpi_battery_present(battery)) {
 		/* run battery update only if it is present */
 		acpi_battery_get_state(battery);
#1 lore raw
Quoted 20 lines · Zhang Rui

Sometimes the Battery driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect Battery status reported by the power supply sysfs I/F.

Update the Battery status first when querying from sysfs.

---
 drivers/acpi/battery.c |    3 +++

 1 file changed, 3 insertions(+)

Index: linux-2.6/drivers/acpi/battery.c
===================================================================

drivers/acpi/battery.c static int acpi_battery_get_property(str · line 192

Quoted 9 lines
drivers/acpi/battery.c +3 -0
@@ -184,6 +184,9 @@ static int acpi_battery_get_property(str
        int ret = 0;
        struct acpi_battery *battery = to_acpi_battery(psy);
 
+       if (acpi_battery_update(battery))
+               return -ENODEV;
+
        if (acpi_battery_present(battery)) {
                /* run battery update only if it is present */
                acpi_battery_get_state(battery);

Hello Zhang,

i trying 2 times your patch and

 $ make
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  LD      drivers/acpi/acpi.o
  LD      drivers/acpi/built-in.o
  LD [M]  drivers/acpi/processor.o
  CC [M]  drivers/acpi/battery.o
drivers/acpi/battery.c: In function ‘acpi_battery_get_property’:
drivers/acpi/battery.c:187:2: error: implicit declaration of function
‘acpi_battery_update’
drivers/acpi/battery.c: At top level:
drivers/acpi/battery.c:611:12: error: static declaration of
‘acpi_battery_update’ follows non-static declaration
drivers/acpi/battery.c:187:6: note: previous implicit declaration of
‘acpi_battery_update’ was here
make[2]: *** [drivers/acpi/battery.o] Error 1
make[1]: *** [drivers/acpi] Error 2
make: *** [drivers] Error 2

i've the same error on 2.6.37-rc1 and last linus git.

Regards,

Signature · 6 lines
Sébastien Luttringer
www.seblu.net
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
author
#2 lore raw
Quoted 55 lines · Seblu
Quoted 20 lines · Zhang Rui

Sometimes the Battery driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect Battery status reported by the power supply sysfs I/F.

Update the Battery status first when querying from sysfs.

---
 drivers/acpi/battery.c |    3 +++
 1 file changed, 3 insertions(+)

Index: linux-2.6/drivers/acpi/battery.c
===================================================================

drivers/acpi/battery.c static int acpi_battery_get_property(str · line 192

Quoted 9 lines
drivers/acpi/battery.c +3 -0
@@ -184,6 +184,9 @@ static int acpi_battery_get_property(str
       int ret = 0;
       struct acpi_battery *battery = to_acpi_battery(psy);
 
+       if (acpi_battery_update(battery))
+               return -ENODEV;
+
       if (acpi_battery_present(battery)) {
               /* run battery update only if it is present */
               acpi_battery_get_state(battery);

Hello Zhang,

i trying 2 times your patch and

 $ make
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  LD      drivers/acpi/acpi.o
  LD      drivers/acpi/built-in.o
  LD [M]  drivers/acpi/processor.o
  CC [M]  drivers/acpi/battery.o
drivers/acpi/battery.c: In function ‘acpi_battery_get_property’:
drivers/acpi/battery.c:187:2: error: implicit declaration of function
‘acpi_battery_update’
drivers/acpi/battery.c: At top level:
drivers/acpi/battery.c:611:12: error: static declaration of
‘acpi_battery_update’ follows non-static declaration
drivers/acpi/battery.c:187:6: note: previous implicit declaration of
‘acpi_battery_update’ was here
make[2]: *** [drivers/acpi/battery.o] Error 1
make[1]: *** [drivers/acpi] Error 2
make: *** [drivers] Error 2
Quoted 2 lines

i've the same error on 2.6.37-rc1 and last linus git.

oops. wrong version attached.
how about this one?

Sometimes the Battery driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect Battery status reported by the power supply sysfs I/F.

Update the Battery status first when querying from sysfs.

---
 drivers/acpi/battery.c |    5 +++++
 1 file changed, 5 insertions(+)
drivers/acpi/battery.c +5 -0
Index: linux-2.6/drivers/acpi/battery.c
===================================================================
@@ -177,6 +177,8 @@ static int acpi_battery_is_charged(struc
 	return 0;
 }
 
+static int acpi_battery_update(struct acpi_battery *battery);
+
 static int acpi_battery_get_property(struct power_supply *psy,
 				     enum power_supply_property psp,
 				     union power_supply_propval *val)
@@ -184,6 +186,9 @@ static int acpi_battery_get_property(str
 	int ret = 0;
 	struct acpi_battery *battery = to_acpi_battery(psy);
 
+	if (acpi_battery_update(battery))
+		return -ENODEV;
+
 	if (acpi_battery_present(battery)) {
 		/* run battery update only if it is present */
 		acpi_battery_get_state(battery);

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw
Quoted 90 lines · Zhang Rui
Quoted 55 lines · Seblu
Quoted 20 lines · Zhang Rui

Sometimes the Battery driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect Battery status reported by the power supply sysfs I/F.

Update the Battery status first when querying from sysfs.

---
 drivers/acpi/battery.c |    3 +++

 1 file changed, 3 insertions(+)

Index: linux-2.6/drivers/acpi/battery.c
===================================================================

drivers/acpi/battery.c static int acpi_battery_get_property(str · line 192

Quoted 9 lines
drivers/acpi/battery.c +3 -0
@@ -184,6 +184,9 @@ static int acpi_battery_get_property(str
        int ret = 0;
        struct acpi_battery *battery = to_acpi_battery(psy);
 
+       if (acpi_battery_update(battery))
+               return -ENODEV;
+
        if (acpi_battery_present(battery)) {
                /* run battery update only if it is present */
                acpi_battery_get_state(battery);

Hello Zhang,

i trying 2 times your patch and

 $ make
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  LD      drivers/acpi/acpi.o
  LD      drivers/acpi/built-in.o
  LD [M]  drivers/acpi/processor.o
  CC [M]  drivers/acpi/battery.o
drivers/acpi/battery.c: In function ‘acpi_battery_get_property’:
drivers/acpi/battery.c:187:2: error: implicit declaration of function
‘acpi_battery_update’
drivers/acpi/battery.c: At top level:
drivers/acpi/battery.c:611:12: error: static declaration of
‘acpi_battery_update’ follows non-static declaration
drivers/acpi/battery.c:187:6: note: previous implicit declaration of
‘acpi_battery_update’ was here
make[2]: *** [drivers/acpi/battery.o] Error 1
make[1]: *** [drivers/acpi] Error 2
make: *** [drivers] Error 2
Quoted 2 lines

i've the same error on 2.6.37-rc1 and last linus git.

oops. wrong version attached.
how about this one?

Sometimes the Battery driver doesn't get notifications when it's plugged/unplugged. And this results in the incorrect Battery status reported by the power supply sysfs I/F.

Update the Battery status first when querying from sysfs.

---
 drivers/acpi/battery.c |    5 +++++

 1 file changed, 5 insertions(+)

Index: linux-2.6/drivers/acpi/battery.c
===================================================================

drivers/acpi/battery.c +2 -0
@@ -177,6 +177,8 @@ static int acpi_battery_is_charged(struc
        return 0;
  }
 
+static int acpi_battery_update(struct acpi_battery *battery);
+
  static int acpi_battery_get_property(struct power_supply *psy,
                                     enum power_supply_property psp,
                                     union power_supply_propval *val)

drivers/acpi/battery.c static int acpi_battery_get_property(str · line 194

Quoted 9 lines
drivers/acpi/battery.c +3 -0
@@ -184,6 +186,9 @@ static int acpi_battery_get_property(str
        int ret = 0;
        struct acpi_battery *battery = to_acpi_battery(psy);
 
+       if (acpi_battery_update(battery))
+               return -ENODEV;
+
        if (acpi_battery_present(battery)) {
                /* run battery update only if it is present */
                acpi_battery_get_state(battery);

I was not able to reproduce the problem with this patch. It smells good!

Signature · 6 lines
Sébastien Luttringer
www.seblu.net
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html