diff --git a/drivers/power/jz4770-battery.c b/drivers/power/jz4770-battery.c
index fc1074f..d53af73 100644
--- a/drivers/power/jz4770-battery.c
+++ b/drivers/power/jz4770-battery.c
@@ -138,7 +138,9 @@ static int jz_battery_get_property(struct power_supply *psy,
 		break;
 	case POWER_SUPPLY_PROP_HEALTH:
 		voltage = jz_battery_read_voltage(jz_battery);
-		if (voltage < info->voltage_min_design)
+		if (voltage < 0)
+			return voltage;
+		else if (voltage < info->voltage_min_design)
 			val->intval = POWER_SUPPLY_HEALTH_DEAD;
 		else
 			val->intval = POWER_SUPPLY_HEALTH_GOOD;
@@ -147,9 +149,11 @@ static int jz_battery_get_property(struct power_supply *psy,
 		val->intval = jz_battery_get_capacity(psy);
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-		val->intval = jz_battery_read_voltage(jz_battery);
-		if (val->intval < 0)
-			return val->intval;
+		voltage = jz_battery_read_voltage(jz_battery);
+		if (voltage < 0)
+			return voltage;
+		else
+			val->intval = voltage;
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
 		val->intval = info->voltage_max_design;
@@ -206,7 +210,7 @@ static void jz_battery_update(struct jz_battery *jz_battery)
 	}
 
 	voltage = jz_battery_read_voltage(jz_battery);
-	if (abs(voltage - jz_battery->voltage) < 50000) {
+	if (voltage >= 0 && abs(voltage - jz_battery->voltage) < 50000) {
 		jz_battery->voltage = voltage;
 		has_changed = true;
 	}
