Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752603AbbLLMjM (ORCPT ); Sat, 12 Dec 2015 07:39:12 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:26480 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751624AbbLLMjL (ORCPT ); Sat, 12 Dec 2015 07:39:11 -0500 Date: Sat, 12 Dec 2015 15:38:43 +0300 From: Dan Carpenter To: Liam Girdwood , James Ban Cc: Mark Brown , linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org Subject: [patch] regulator: pv88090: logical vs bitwise AND typo Message-ID: <20151212123843.GB21408@mwanda> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Source-IP: userv0022.oracle.com [156.151.31.74] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1869 Lines: 49 These were supposed to be bitwise AND instead of logical. Also kernel style is for the operator to be on the first line and I removed some extra parenthesis. Fixes: c90456e36d9c ('regulator: pv88090: new regulator driver') Signed-off-by: Dan Carpenter --- At the end we use these values for: index = ((range << 1) | conf2); So, in theory, "index" is a number between 0-3. The problem is that we use it as an index into the pv88090_buck_vol[] array which has only 3 elements so it's potentially reading one step beyond then end. Possibly the hardware spec says that range and conf2 can not both be set at the same time. I don't know. James, can you take a look at this? diff --git a/drivers/regulator/pv88090-regulator.c b/drivers/regulator/pv88090-regulator.c index 3ec5f2b..29c16d9 100644 --- a/drivers/regulator/pv88090-regulator.c +++ b/drivers/regulator/pv88090-regulator.c @@ -392,17 +392,17 @@ static int pv88090_i2c_probe(struct i2c_client *i2c, if (ret < 0) return ret; - conf2 = ((conf2 >> PV88090_BUCK_VDAC_RANGE_SHIFT) - && PV88090_BUCK_VDAC_RANGE_MASK); + conf2 = (conf2 >> PV88090_BUCK_VDAC_RANGE_SHIFT) & + PV88090_BUCK_VDAC_RANGE_MASK; ret = regmap_read(chip->regmap, PV88090_REG_BUCK_FOLD_RANGE, &range); if (ret < 0) return ret; - range = ((range - >> (PV88080_BUCK_VRANGE_GAIN_SHIFT + i - 1)) - && PV88080_BUCK_VRANGE_GAIN_MASK); + range = (range >> + (PV88080_BUCK_VRANGE_GAIN_SHIFT + i - 1)) & + PV88080_BUCK_VRANGE_GAIN_MASK; index = ((range << 1) | conf2); pv88090_regulator_info[i].desc.min_uV -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/