public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
@ 2011-09-02  6:45 Ramakrishna Pallala
  0 siblings, 0 replies; 5+ messages in thread
From: Ramakrishna Pallala @ 2011-09-02  6:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Anton Vorontsov, dwmw2, MyungJoo Ham, KyungMin Park, Wolfram Sang,
	Ramakrishna Pallala, durgadoss.r

In max17042_get_property(...), the values returned by
max17042_read_reg are directly assigned to the variables,
even if the read results in an error.

This patch checks for the return code from max17042_read_reg and
exits the function if there is any error.

Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
---
 drivers/power/max17042_battery.c |   85 ++++++++++++++++++++++++++------------
 1 files changed, 58 insertions(+), 27 deletions(-)

diff --git a/drivers/power/max17042_battery.c b/drivers/power/max17042_battery.c
index 98bfab3..cae910d 100644
--- a/drivers/power/max17042_battery.c
+++ b/drivers/power/max17042_battery.c
@@ -84,55 +84,79 @@ static int max17042_get_property(struct power_supply *psy,
 {
 	struct max17042_chip *chip = container_of(psy,
 				struct max17042_chip, battery);
+	int ret;
 
 	switch (psp) {
 	case POWER_SUPPLY_PROP_PRESENT:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_STATUS);
-		if (val->intval & MAX17042_STATUS_BattAbsent)
+		ret = max17042_read_reg(chip->client, MAX17042_STATUS);
+		if (ret < 0)
+			return ret;
+
+		if (ret & MAX17042_STATUS_BattAbsent)
 			val->intval = 0;
 		else
 			val->intval = 1;
 		break;
 	case POWER_SUPPLY_PROP_CYCLE_COUNT:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_Cycles);
+		ret = max17042_read_reg(chip->client, MAX17042_Cycles);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret;
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_MinMaxVolt);
-		val->intval >>= 8;
+		ret = max17042_read_reg(chip->client, MAX17042_MinMaxVolt);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret >> 8;
 		val->intval *= 20000; /* Units of LSB = 20mV */
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_V_empty);
-		val->intval >>= 7;
+		ret = max17042_read_reg(chip->client, MAX17042_V_empty);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret >> 7;
 		val->intval *= 10000; /* Units of LSB = 10mV */
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_VCELL) * 83; /* 1000 / 12 = 83 */
+		ret = max17042_read_reg(chip->client, MAX17042_VCELL);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret * 83; /* 1000 / 12 = 83 */
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_AvgVCELL) * 83;
+		ret = max17042_read_reg(chip->client, MAX17042_AvgVCELL);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret * 83; /* 1000 / 12 = 83 */
 		break;
 	case POWER_SUPPLY_PROP_CAPACITY:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_SOC) / 256;
+		ret = max17042_read_reg(chip->client, MAX17042_SOC);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret >> 8;
 		break;
 	case POWER_SUPPLY_PROP_CHARGE_FULL:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_RepSOC);
-		if ((val->intval / 256) >= MAX17042_BATTERY_FULL)
+		ret = max17042_read_reg(chip->client, MAX17042_RepSOC);
+		if (ret < 0)
+			return ret;
+
+		if ((ret >> 8) >= MAX17042_BATTERY_FULL)
 			val->intval = 1;
-		else if (val->intval >= 0)
+		else if (ret >= 0)
 			val->intval = 0;
 		break;
 	case POWER_SUPPLY_PROP_TEMP:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_TEMP);
+		ret = max17042_read_reg(chip->client, MAX17042_TEMP);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret;
 		/* The value is signed. */
 		if (val->intval & 0x8000) {
 			val->intval = (0x7fff & ~val->intval) + 1;
@@ -144,8 +168,11 @@ static int max17042_get_property(struct power_supply *psy,
 		break;
 	case POWER_SUPPLY_PROP_CURRENT_NOW:
 		if (chip->pdata->enable_current_sense) {
-			val->intval = max17042_read_reg(chip->client,
-					MAX17042_Current);
+			ret = max17042_read_reg(chip->client, MAX17042_Current);
+			if (ret < 0)
+				return ret;
+
+			val->intval = ret;
 			if (val->intval & 0x8000) {
 				/* Negative */
 				val->intval = ~val->intval & 0x7fff;
@@ -160,8 +187,12 @@ static int max17042_get_property(struct power_supply *psy,
 		break;
 	case POWER_SUPPLY_PROP_CURRENT_AVG:
 		if (chip->pdata->enable_current_sense) {
-			val->intval = max17042_read_reg(chip->client,
-					MAX17042_AvgCurrent);
+			ret = max17042_read_reg(chip->client,
+						MAX17042_AvgCurrent);
+			if (ret < 0)
+				return ret;
+
+			val->intval = ret;
 			if (val->intval & 0x8000) {
 				/* Negative */
 				val->intval = ~val->intval & 0x7fff;
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
@ 2011-09-05  1:24 MyungJoo Ham
  2011-09-07  8:30 ` Pallala, Ramakrishna
  0 siblings, 1 reply; 5+ messages in thread
From: MyungJoo Ham @ 2011-09-05  1:24 UTC (permalink / raw)
  To: Ramakrishna Pallala, linux-kernel@vger.kernel.org
  Cc: Anton Vorontsov, dwmw2@infradead.org, 박경민,
	Wolfram Sang, durgadoss.r@intel.com

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=euc-kr, Size: 763 bytes --]

Sender : Ramakrishna Pallala<ramakrishna.pallala@intel.com> Date : 2011-09-02 15:45 (GMT+09:00)
> 
> In max17042_get_property(...), the values returned by
> max17042_read_reg are directly assigned to the variables,
> even if the read results in an error.
> 
> This patch checks for the return code from max17042_read_reg and
> exits the function if there is any error.
> 
> Signed-off-by: Ramakrishna Pallala 
> ---
> drivers/power/max17042_battery.c |   85 ++++++++++++++++++++++++++------------
> 1 files changed, 58 insertions(+), 27 deletions(-)
> 

Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
  2011-09-05  1:24 [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge MyungJoo Ham
@ 2011-09-07  8:30 ` Pallala, Ramakrishna
  2011-11-26  0:15   ` Anton Vorontsov
  0 siblings, 1 reply; 5+ messages in thread
From: Pallala, Ramakrishna @ 2011-09-07  8:30 UTC (permalink / raw)
  To: myungjoo.ham@samsung.com, linux-kernel@vger.kernel.org
  Cc: Anton Vorontsov, dwmw2@infradead.org, 박경민,
	Wolfram Sang, R, Durgadoss

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="ks_c_5601-1987", Size: 1237 bytes --]

Hi MyungJoo,

> -----Original Message-----
> From: MyungJoo Ham [mailto:myungjoo.ham@samsung.com]
> Sent: Monday, September 05, 2011 6:55 AM
> To: Pallala, Ramakrishna; linux-kernel@vger.kernel.org
> Cc: Anton Vorontsov; dwmw2@infradead.org; ¹Ú°æ¹Î; Wolfram Sang; R, Durgadoss
> Subject: Re: [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
> 
> Sender : Ramakrishna Pallala<ramakrishna.pallala@intel.com> Date : 2011-09-02 15:45
> (GMT+09:00)
> >
> > In max17042_get_property(...), the values returned by
> > max17042_read_reg are directly assigned to the variables,
> > even if the read results in an error.
> >
> > This patch checks for the return code from max17042_read_reg and
> > exits the function if there is any error.
> >
> > Signed-off-by: Ramakrishna Pallala
> > ---
> > drivers/power/max17042_battery.c |   85 ++++++++++++++++++++++++++------------
> > 1 files changed, 58 insertions(+), 27 deletions(-)
> >
> 
> Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>

Thanks for the Ack.
When can I expect the patch to be merged ?

Thanks,
Ram
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
  2011-09-07  8:30 ` Pallala, Ramakrishna
@ 2011-11-26  0:15   ` Anton Vorontsov
  2011-11-28  6:01     ` Pallala, Ramakrishna
  0 siblings, 1 reply; 5+ messages in thread
From: Anton Vorontsov @ 2011-11-26  0:15 UTC (permalink / raw)
  To: Pallala, Ramakrishna
  Cc: myungjoo.ham@samsung.com, linux-kernel@vger.kernel.org,
	dwmw2@infradead.org, �ڰ���,
	Wolfram Sang, R, Durgadoss

On Wed, Sep 07, 2011 at 02:00:29PM +0530, Pallala, Ramakrishna wrote:
> > > In max17042_get_property(...), the values returned by
> > > max17042_read_reg are directly assigned to the variables,
> > > even if the read results in an error.
> > >
> > > This patch checks for the return code from max17042_read_reg and
> > > exits the function if there is any error.
> > >
> > > Signed-off-by: Ramakrishna Pallala
> > > ---
> > > drivers/power/max17042_battery.c |   85 ++++++++++++++++++++++++++------------
> > > 1 files changed, 58 insertions(+), 27 deletions(-)
> > >
> > 
> > Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
> 
> Thanks for the Ack.
> When can I expect the patch to be merged ?

Merged, much thanks!

Note that I had to manually fix conflicts with

	commit cf7a8c03db792894f436db5f3ffc44d947b9b068
	Author: MyungJoo Ham <myungjoo.ham@samsung.com>
	Date:   Wed Aug 17 10:18:34 2011 +0900

	    max17042_battery: Bugfix of incorrect voltage register value interpretation


So, the resulting patch in battery-2.6.git tree as follows, please
check if everything is OK:

- - - -
From: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
Date: Sat, 26 Nov 2011 04:11:15 +0400
Subject: [PATCH] max17042_battery: Fix error handling

In max17042_get_property(...), the values returned by
max17042_read_reg are directly assigned to the variables,
even if the read results in an error.

This patch checks for the return code from max17042_read_reg and
exits the function if there is any error.

Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
---
 drivers/power/max17042_battery.c |   85 ++++++++++++++++++++++++++------------
 1 files changed, 58 insertions(+), 27 deletions(-)

diff --git a/drivers/power/max17042_battery.c b/drivers/power/max17042_battery.c
index a6dc9c7..10ffa8c 100644
--- a/drivers/power/max17042_battery.c
+++ b/drivers/power/max17042_battery.c
@@ -84,55 +84,79 @@ static int max17042_get_property(struct power_supply *psy,
 {
 	struct max17042_chip *chip = container_of(psy,
 				struct max17042_chip, battery);
+	int ret;
 
 	switch (psp) {
 	case POWER_SUPPLY_PROP_PRESENT:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_STATUS);
-		if (val->intval & MAX17042_STATUS_BattAbsent)
+		ret = max17042_read_reg(chip->client, MAX17042_STATUS);
+		if (ret < 0)
+			return ret;
+
+		if (ret & MAX17042_STATUS_BattAbsent)
 			val->intval = 0;
 		else
 			val->intval = 1;
 		break;
 	case POWER_SUPPLY_PROP_CYCLE_COUNT:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_Cycles);
+		ret = max17042_read_reg(chip->client, MAX17042_Cycles);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret;
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_MinMaxVolt);
-		val->intval >>= 8;
+		ret = max17042_read_reg(chip->client, MAX17042_MinMaxVolt);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret >> 8;
 		val->intval *= 20000; /* Units of LSB = 20mV */
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_V_empty);
-		val->intval >>= 7;
+		ret = max17042_read_reg(chip->client, MAX17042_V_empty);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret >> 7;
 		val->intval *= 10000; /* Units of LSB = 10mV */
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-		val->intval = max17042_read_reg(chip->client, MAX17042_VCELL)
-			    * 625 / 8;
+		ret = max17042_read_reg(chip->client, MAX17042_VCELL);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret * 625 / 8;
 		break;
 	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-		val->intval = max17042_read_reg(chip->client, MAX17042_AvgVCELL)
-			    * 625 / 8;
+		ret = max17042_read_reg(chip->client, MAX17042_AvgVCELL);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret * 625 / 8;
 		break;
 	case POWER_SUPPLY_PROP_CAPACITY:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_SOC) / 256;
+		ret = max17042_read_reg(chip->client, MAX17042_SOC);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret >> 8;
 		break;
 	case POWER_SUPPLY_PROP_CHARGE_FULL:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_RepSOC);
-		if ((val->intval / 256) >= MAX17042_BATTERY_FULL)
+		ret = max17042_read_reg(chip->client, MAX17042_RepSOC);
+		if (ret < 0)
+			return ret;
+
+		if ((ret >> 8) >= MAX17042_BATTERY_FULL)
 			val->intval = 1;
-		else if (val->intval >= 0)
+		else if (ret >= 0)
 			val->intval = 0;
 		break;
 	case POWER_SUPPLY_PROP_TEMP:
-		val->intval = max17042_read_reg(chip->client,
-				MAX17042_TEMP);
+		ret = max17042_read_reg(chip->client, MAX17042_TEMP);
+		if (ret < 0)
+			return ret;
+
+		val->intval = ret;
 		/* The value is signed. */
 		if (val->intval & 0x8000) {
 			val->intval = (0x7fff & ~val->intval) + 1;
@@ -144,8 +168,11 @@ static int max17042_get_property(struct power_supply *psy,
 		break;
 	case POWER_SUPPLY_PROP_CURRENT_NOW:
 		if (chip->pdata->enable_current_sense) {
-			val->intval = max17042_read_reg(chip->client,
-					MAX17042_Current);
+			ret = max17042_read_reg(chip->client, MAX17042_Current);
+			if (ret < 0)
+				return ret;
+
+			val->intval = ret;
 			if (val->intval & 0x8000) {
 				/* Negative */
 				val->intval = ~val->intval & 0x7fff;
@@ -159,8 +186,12 @@ static int max17042_get_property(struct power_supply *psy,
 		break;
 	case POWER_SUPPLY_PROP_CURRENT_AVG:
 		if (chip->pdata->enable_current_sense) {
-			val->intval = max17042_read_reg(chip->client,
-					MAX17042_AvgCurrent);
+			ret = max17042_read_reg(chip->client,
+						MAX17042_AvgCurrent);
+			if (ret < 0)
+				return ret;
+
+			val->intval = ret;
 			if (val->intval & 0x8000) {
 				/* Negative */
 				val->intval = ~val->intval & 0x7fff;
-- 
1.7.5.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
  2011-11-26  0:15   ` Anton Vorontsov
@ 2011-11-28  6:01     ` Pallala, Ramakrishna
  0 siblings, 0 replies; 5+ messages in thread
From: Pallala, Ramakrishna @ 2011-11-28  6:01 UTC (permalink / raw)
  To: Anton Vorontsov
  Cc: myungjoo.ham@samsung.com, linux-kernel@vger.kernel.org,
	dwmw2@infradead.org, �ڰ���,
	Wolfram Sang, R, Durgadoss

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 1756 bytes --]



> -----Original Message-----
> From: Anton Vorontsov [mailto:cbouatmailru@gmail.com]
> Sent: Saturday, November 26, 2011 5:46 AM
> To: Pallala, Ramakrishna
> Cc: myungjoo.ham@samsung.com; linux-kernel@vger.kernel.org; dwmw2@infradead.org; �ڰ���;
> Wolfram Sang; R, Durgadoss
> Subject: Re: [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge
> 
> On Wed, Sep 07, 2011 at 02:00:29PM +0530, Pallala, Ramakrishna wrote:
> > > > In max17042_get_property(...), the values returned by
> > > > max17042_read_reg are directly assigned to the variables,
> > > > even if the read results in an error.
> > > >
> > > > This patch checks for the return code from max17042_read_reg and
> > > > exits the function if there is any error.
> > > >
> > > > Signed-off-by: Ramakrishna Pallala
> > > > ---
> > > > drivers/power/max17042_battery.c |   85 ++++++++++++++++++++++++++------------
> > > > 1 files changed, 58 insertions(+), 27 deletions(-)
> > > >
> > >
> > > Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
> >
> > Thanks for the Ack.
> > When can I expect the patch to be merged ?
> 
> Merged, much thanks!
> 
> Note that I had to manually fix conflicts with
> 
> 	commit cf7a8c03db792894f436db5f3ffc44d947b9b068
> 	Author: MyungJoo Ham <myungjoo.ham@samsung.com>
> 	Date:   Wed Aug 17 10:18:34 2011 +0900
> 
> 	    max17042_battery: Bugfix of incorrect voltage register value interpretation
> 
> 
> So, the resulting patch in battery-2.6.git tree as follows, please
> check if everything is OK:

The patch looks good.
Thanks for resolving the conflicts :)

Thanks,
Ram
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-11-28  6:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-05  1:24 [PATCHv1 1/1] [Power Supply]: Fix error handling in max17042 fuel gauge MyungJoo Ham
2011-09-07  8:30 ` Pallala, Ramakrishna
2011-11-26  0:15   ` Anton Vorontsov
2011-11-28  6:01     ` Pallala, Ramakrishna
  -- strict thread matches above, loose matches on Subject: below --
2011-09-02  6:45 Ramakrishna Pallala

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox