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);