Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1290179 > unrolled thread

[patch] regulator: pv88090: logical vs bitwise AND typo

Started byDan Carpenter <dan.carpenter@oracle.com>
First post2015-12-12 13:40 +0100
Last post2015-12-14 02:40 +0100
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [patch] regulator: pv88090: logical vs bitwise AND typo Dan Carpenter <dan.carpenter@oracle.com> - 2015-12-12 13:40 +0100
    RE: [patch] regulator: pv88090: logical vs bitwise AND typo "Opensource [James Seong-Won Ban]" <James.Ban.opensource@diasemi.com> - 2015-12-14 02:40 +0100

#1290179 — [patch] regulator: pv88090: logical vs bitwise AND typo

FromDan Carpenter <dan.carpenter@oracle.com>
Date2015-12-12 13:40 +0100
Subject[patch] regulator: pv88090: logical vs bitwise AND typo
Message-ID<qERCW-29F-5@gated-at.bofh.it>
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 <dan.carpenter@oracle.com>
---
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/

[toc] | [next] | [standalone]


#1290773

From"Opensource [James Seong-Won Ban]" <James.Ban.opensource@diasemi.com>
Date2015-12-14 02:40 +0100
Message-ID<qFqhj-7JY-7@gated-at.bofh.it>
In reply to#1290179
On Saturday, December 12, 2015 9:39 PM Dan Carpenter wrote:

> To: Liam Girdwood; Opensource [James Seong-Won Ban]
> Cc: Mark Brown; linux-kernel@vger.kernel.org; kernel-
> janitors@vger.kernel.org
> Subject: [patch] regulator: pv88090: logical vs bitwise AND typo
> 
> 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 <dan.carpenter@oracle.com>
> ---
> 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?

Hi Dan,

Basically conf2 and range are defined in OTP and should not be changed by user.
As you pointed out, it is not feasible to set the register at active state  because
the value can not be set at the same time.

Regards,
James
--
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/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web