From patchwork Tue Dec 10 15:19:02 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Przemyslaw Marczak
X-Patchwork-Id: 299613
X-Patchwork-Delegate: promsoft@gmail.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Received: from theia.denx.de (theia.denx.de [85.214.87.163])
by ozlabs.org (Postfix) with ESMTP id 151B72C00A2
for ;
Wed, 11 Dec 2013 10:05:06 +1100 (EST)
Received: from localhost (localhost [127.0.0.1])
by theia.denx.de (Postfix) with ESMTP id A19534B549;
Tue, 10 Dec 2013 16:19:36 +0100 (CET)
X-Virus-Scanned: Debian amavisd-new at theia.denx.de
Received: from theia.denx.de ([127.0.0.1])
by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 9HPABNDTeeiM; Tue, 10 Dec 2013 16:19:34 +0100 (CET)
Received: from theia.denx.de (localhost [127.0.0.1])
by theia.denx.de (Postfix) with ESMTP id 95D174B4B2;
Tue, 10 Dec 2013 16:19:34 +0100 (CET)
Received: from localhost (localhost [127.0.0.1])
by theia.denx.de (Postfix) with ESMTP id B670E4B4B2
for ; Tue, 10 Dec 2013 16:19:28 +0100 (CET)
X-Virus-Scanned: Debian amavisd-new at theia.denx.de
Received: from theia.denx.de ([127.0.0.1])
by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id v2rX134Adf6L for ;
Tue, 10 Dec 2013 16:19:22 +0100 (CET)
X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5
NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested)
Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com
[210.118.77.12]) by theia.denx.de (Postfix) with ESMTPS id 777864B4A3
for ; Tue, 10 Dec 2013 16:19:15 +0100 (CET)
Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245])
by mailout2.w1.samsung.com
(Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit
(built Nov
17 2011)) with ESMTP id <0MXL009ETJW0OMC0@mailout2.w1.samsung.com>
for u-boot@lists.denx.de; Tue, 10 Dec 2013 15:19:12 +0000 (GMT)
X-AuditID: cbfec7f5-b7fd16d000007299-41-52a730f00103
Received: from eusync4.samsung.com ( [203.254.199.214])
by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id DD.CA.29337.0F037A25;
Tue, 10 Dec 2013 15:19:12 +0000 (GMT)
Received: from AMDC1186.digital.local ([106.116.147.185])
by eusync4.samsung.com
(Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit
(built Nov
17 2011)) with ESMTPA id <0MXL005L4JVXIW90@eusync4.samsung.com>; Tue,
10 Dec 2013 15:19:12 +0000 (GMT)
From: Przemyslaw Marczak
To: u-boot@lists.denx.de
Date: Tue, 10 Dec 2013 16:19:02 +0100
Message-id: <1386688742-17901-1-git-send-email-p.marczak@samsung.com>
X-Mailer: git-send-email 1.7.9.5
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFtrHJMWRmVeSWpSXmKPExsVy+t/xa7ofDJYHGdz9qGvx5uFmRouOIy2M
Fjsu32CxeLu3k92BxePsnR2MHn1bVjEGMEVx2aSk5mSWpRbp2yVwZdz7JVIwiafi0flWtgbG
e5xdjJwcEgImEs27V7FD2GISF+6tZ+ti5OIQEljKKDG7ZTUjhNPHJLH38H9WkCo2AQOJPZfO
MIPYIgISEr/6rwIVcXAwCxRItLaGgYSFBcIk9ndOBRvKIqAqcfzxWrBWXgFXiftPTrKClEsI
KEjMmWQzgZF7ASPDKkbR1NLkguKk9FwjveLE3OLSvHS95PzcTYwQP3/dwbj0mNUhRgEORiUe
Xol/S4OEWBPLiitzDzFKcDArifB66SwPEuJNSaysSi3Kjy8qzUktPsTIxMEp1cCoqXyoL+Po
aS/rKsEP/hZOnFNZKxP7VKIl3R43cdzf26HVlOxyMuPA6TLTBgHfScseavNYNy6I+XdJPnZ/
xKm2lBMTzu3lWsr1NUnpAvfbFf81c+/6CaWKXujIOZzdyZzhxG3M//70L2uGLVz/9bvvaIdo
HROS9xY5onftGsuNu89sQ/7b3FdiKc5INNRiLipOBABBJ7RQ0QEAAA==
Cc: Przemyslaw Marczak
Subject: [U-Boot] [PATCH] fuelgauge: max17042: fix i2c read issue which
causes infinity loop.
X-BeenThere: u-boot@lists.denx.de
X-Mailman-Version: 2.1.11
Precedence: list
List-Id: U-Boot discussion
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: u-boot-bounces@lists.denx.de
Errors-To: u-boot-bounces@lists.denx.de
Issues:
- reading i2c data by passing u16 pointer causes errors in read data.
- max17042 status register fields have not only Power On Reset meaning
so using proper mask is required.
Changes:
- read i2c data to type u32 instead of u16 - avoids buffer overflow
- compare FG status register using mask not just one bit value
Signed-off-by: Przemyslaw Marczak
Cc: Lukasz Majewski
---
drivers/power/fuel_gauge/fg_max17042.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/power/fuel_gauge/fg_max17042.c b/drivers/power/fuel_gauge/fg_max17042.c
index c285747..2cbf8cf 100644
--- a/drivers/power/fuel_gauge/fg_max17042.c
+++ b/drivers/power/fuel_gauge/fg_max17042.c
@@ -28,11 +28,14 @@ static int fg_write_regs(struct pmic *p, u8 addr, u16 *data, int num)
static int fg_read_regs(struct pmic *p, u8 addr, u16 *data, int num)
{
+ unsigned int dat = 0;
int ret = 0;
int i;
- for (i = 0; i < num; i++, addr++)
- ret |= pmic_reg_read(p, addr, (u32 *) (data + i));
+ for (i = 0; i < num; i++, addr++) {
+ ret |= pmic_reg_read(p, addr, &dat);
+ *(data + i) = (u16) dat;
+ }
return ret;
}
@@ -178,7 +181,7 @@ static int power_check_battery(struct pmic *p, struct pmic *bat)
ret |= pmic_reg_read(p, MAX17042_STATUS, &val);
debug("fg status: 0x%x\n", val);
- if (val == MAX17042_POR)
+ if (val && MAX17042_POR)
por_fuelgauge_init(p);
ret |= pmic_reg_read(p, MAX17042_VERSION, &val);