|
|
@@ -323,17 +323,22 @@ static int sbs_get_battery_presence_and_health(
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
- if (psp == POWER_SUPPLY_PROP_PRESENT) {
|
|
|
- /* Dummy command; if it succeeds, battery is present. */
|
|
|
- ret = sbs_read_word_data(client, sbs_data[REG_STATUS].addr);
|
|
|
- if (ret < 0)
|
|
|
- val->intval = 0; /* battery disconnected */
|
|
|
- else
|
|
|
- val->intval = 1; /* battery present */
|
|
|
- } else { /* POWER_SUPPLY_PROP_HEALTH */
|
|
|
+ /* Dummy command; if it succeeds, battery is present. */
|
|
|
+ ret = sbs_read_word_data(client, sbs_data[REG_STATUS].addr);
|
|
|
+
|
|
|
+ if (ret < 0) { /* battery not present*/
|
|
|
+ if (psp == POWER_SUPPLY_PROP_PRESENT) {
|
|
|
+ val->intval = 0;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (psp == POWER_SUPPLY_PROP_PRESENT)
|
|
|
+ val->intval = 1; /* battery present */
|
|
|
+ else /* POWER_SUPPLY_PROP_HEALTH */
|
|
|
/* SBS spec doesn't have a general health command. */
|
|
|
val->intval = POWER_SUPPLY_HEALTH_UNKNOWN;
|
|
|
- }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -635,6 +640,8 @@ static int sbs_get_property(struct power_supply *psy,
|
|
|
else
|
|
|
ret = sbs_get_battery_presence_and_health(client, psp,
|
|
|
val);
|
|
|
+
|
|
|
+ /* this can only be true if no gpio is used */
|
|
|
if (psp == POWER_SUPPLY_PROP_PRESENT)
|
|
|
return 0;
|
|
|
break;
|