* Applied "regulator: s2mps11: Fix invalid selector mask and voltages for buck9" to the regulator tree
@ 2016-03-29 7:39 Mark Brown
2016-03-29 7:45 ` Krzysztof Kozlowski
0 siblings, 1 reply; 3+ messages in thread
From: Mark Brown @ 2016-03-29 7:39 UTC (permalink / raw)
To: Krzysztof Kozlowski, Javier Martinez Canillas, Mark Brown, stable
Cc: linux-kernel
The patch
regulator: s2mps11: Fix invalid selector mask and voltages for buck9
has been applied to the regulator tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 3b672623079bb3e5685b8549e514f2dfaa564406 Mon Sep 17 00:00:00 2001
From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Date: Mon, 28 Mar 2016 13:09:56 +0900
Subject: [PATCH] regulator: s2mps11: Fix invalid selector mask and voltages
for buck9
The buck9 regulator of S2MPS11 PMIC had incorrect vsel_mask (0xff
instead of 0x1f) thus reading entire register as buck9's voltage. This
effectively caused regulator core to interpret values as higher voltages
than they were and then to set real voltage much lower than intended.
The buck9 provides power to other regulators, including LDO13
and LDO19 which supply the MMC2 (SD card). On Odroid XU3/XU4 the lower
voltage caused SD card detection errors on Odroid XU3/XU4:
mmc1: card never left busy state
mmc1: error -110 whilst initialising SD card
During driver probe the regulator core was checking whether initial
voltage matches the constraints. With incorrect vsel_mask of 0xff and
default value of 0x50, the core interpreted this as 5 V which is outside
of constraints (3-3.775 V). Then the regulator core was adjusting the
voltage to match the constraints. With incorrect vsel_mask this new
voltage mapped to a vere low voltage in the driver.
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: <stable@vger.kernel.org>
---
drivers/regulator/s2mps11.c | 28 ++++++++++++++++++++++------
include/linux/mfd/samsung/s2mps11.h | 2 ++
2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index d24e2c783dc5..6dfa3502e1f1 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -308,7 +308,7 @@ static struct regulator_ops s2mps11_buck_ops = {
.enable_mask = S2MPS11_ENABLE_MASK \
}
-#define regulator_desc_s2mps11_buck6_10(num, min, step) { \
+#define regulator_desc_s2mps11_buck67810(num, min, step) { \
.name = "BUCK"#num, \
.id = S2MPS11_BUCK##num, \
.ops = &s2mps11_buck_ops, \
@@ -324,6 +324,22 @@ static struct regulator_ops s2mps11_buck_ops = {
.enable_mask = S2MPS11_ENABLE_MASK \
}
+#define regulator_desc_s2mps11_buck9 { \
+ .name = "BUCK9", \
+ .id = S2MPS11_BUCK9, \
+ .ops = &s2mps11_buck_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .owner = THIS_MODULE, \
+ .min_uV = MIN_3000_MV, \
+ .uV_step = STEP_25_MV, \
+ .n_voltages = S2MPS11_BUCK9_N_VOLTAGES, \
+ .ramp_delay = S2MPS11_RAMP_DELAY, \
+ .vsel_reg = S2MPS11_REG_B9CTRL2, \
+ .vsel_mask = S2MPS11_BUCK9_VSEL_MASK, \
+ .enable_reg = S2MPS11_REG_B9CTRL1, \
+ .enable_mask = S2MPS11_ENABLE_MASK \
+}
+
static const struct regulator_desc s2mps11_regulators[] = {
regulator_desc_s2mps11_ldo(1, STEP_25_MV),
regulator_desc_s2mps11_ldo(2, STEP_50_MV),
@@ -368,11 +384,11 @@ static const struct regulator_desc s2mps11_regulators[] = {
regulator_desc_s2mps11_buck1_4(3),
regulator_desc_s2mps11_buck1_4(4),
regulator_desc_s2mps11_buck5,
- regulator_desc_s2mps11_buck6_10(6, MIN_600_MV, STEP_6_25_MV),
- regulator_desc_s2mps11_buck6_10(7, MIN_600_MV, STEP_6_25_MV),
- regulator_desc_s2mps11_buck6_10(8, MIN_600_MV, STEP_6_25_MV),
- regulator_desc_s2mps11_buck6_10(9, MIN_3000_MV, STEP_25_MV),
- regulator_desc_s2mps11_buck6_10(10, MIN_750_MV, STEP_12_5_MV),
+ regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
+ regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_6_25_MV),
+ regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_6_25_MV),
+ regulator_desc_s2mps11_buck9,
+ regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
};
static struct regulator_ops s2mps14_reg_ops;
diff --git a/include/linux/mfd/samsung/s2mps11.h b/include/linux/mfd/samsung/s2mps11.h
index b288965e8101..2c14eeca46f0 100644
--- a/include/linux/mfd/samsung/s2mps11.h
+++ b/include/linux/mfd/samsung/s2mps11.h
@@ -173,10 +173,12 @@ enum s2mps11_regulators {
#define S2MPS11_LDO_VSEL_MASK 0x3F
#define S2MPS11_BUCK_VSEL_MASK 0xFF
+#define S2MPS11_BUCK9_VSEL_MASK 0x1F
#define S2MPS11_ENABLE_MASK (0x03 << S2MPS11_ENABLE_SHIFT)
#define S2MPS11_ENABLE_SHIFT 0x06
#define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1)
#define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1)
+#define S2MPS11_BUCK9_N_VOLTAGES (S2MPS11_BUCK9_VSEL_MASK + 1)
#define S2MPS11_RAMP_DELAY 25000 /* uV/us */
#define S2MPS11_CTRL1_PWRHOLD_MASK BIT(4)
--
2.8.0.rc3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: Applied "regulator: s2mps11: Fix invalid selector mask and voltages for buck9" to the regulator tree
2016-03-29 7:39 Applied "regulator: s2mps11: Fix invalid selector mask and voltages for buck9" to the regulator tree Mark Brown
@ 2016-03-29 7:45 ` Krzysztof Kozlowski
2016-03-29 14:59 ` Mark Brown
0 siblings, 1 reply; 3+ messages in thread
From: Krzysztof Kozlowski @ 2016-03-29 7:45 UTC (permalink / raw)
To: Mark Brown, Javier Martinez Canillas, stable; +Cc: linux-kernel
On 29.03.2016 16:39, Mark Brown wrote:
> The patch
>
> regulator: s2mps11: Fix invalid selector mask and voltages for buck9
>
> has been applied to the regulator tree at
>
> git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
>
> All being well this means that it will be integrated into the linux-next
> tree (usually sometime in the next 24 hours) and sent to Linus during
> the next merge window (or sooner if it is a bug fix), however if
> problems are discovered then the patch may be dropped or reverted.
>
> You may get further e-mails resulting from automated or manual testing
> and review of the tree, please engage with people reporting problems and
> send followup patches addressing any issues that are reported if needed.
>
> If any updates are required or you are submitting further changes they
> should be sent as incremental updates against current git, existing
> patches will not be replaced.
>
> Please add any relevant lists and maintainers to the CCs when replying
> to this mail.
>
> Thanks,
> Mark
>
>>From 3b672623079bb3e5685b8549e514f2dfaa564406 Mon Sep 17 00:00:00 2001
> From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> Date: Mon, 28 Mar 2016 13:09:56 +0900
> Subject: [PATCH] regulator: s2mps11: Fix invalid selector mask and voltages
> for buck9
>
> The buck9 regulator of S2MPS11 PMIC had incorrect vsel_mask (0xff
> instead of 0x1f) thus reading entire register as buck9's voltage. This
> effectively caused regulator core to interpret values as higher voltages
> than they were and then to set real voltage much lower than intended.
>
> The buck9 provides power to other regulators, including LDO13
> and LDO19 which supply the MMC2 (SD card). On Odroid XU3/XU4 the lower
> voltage caused SD card detection errors on Odroid XU3/XU4:
> mmc1: card never left busy state
> mmc1: error -110 whilst initialising SD card
>
> During driver probe the regulator core was checking whether initial
> voltage matches the constraints. With incorrect vsel_mask of 0xff and
> default value of 0x50, the core interpreted this as 5 V which is outside
> of constraints (3-3.775 V). Then the regulator core was adjusting the
> voltage to match the constraints. With incorrect vsel_mask this new
> voltage mapped to a vere low voltage in the driver.
>
> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
> Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
> Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
> Signed-off-by: Mark Brown <broonie@kernel.org>
> Cc: <stable@vger.kernel.org>
Hi Mark,
Hmm, the "Fixes" tag disappeared. I think it might be useful for stable
backport.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Applied "regulator: s2mps11: Fix invalid selector mask and voltages for buck9" to the regulator tree
2016-03-29 7:45 ` Krzysztof Kozlowski
@ 2016-03-29 14:59 ` Mark Brown
0 siblings, 0 replies; 3+ messages in thread
From: Mark Brown @ 2016-03-29 14:59 UTC (permalink / raw)
To: Krzysztof Kozlowski; +Cc: Javier Martinez Canillas, stable, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 258 bytes --]
On Tue, Mar 29, 2016 at 04:45:56PM +0900, Krzysztof Kozlowski wrote:
> Hmm, the "Fixes" tag disappeared. I think it might be useful for stable
> backport.
It was pointing at the initial commit of the driver so it doesn't
exactly narrow the range down any.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-03-29 14:59 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-29 7:39 Applied "regulator: s2mps11: Fix invalid selector mask and voltages for buck9" to the regulator tree Mark Brown
2016-03-29 7:45 ` Krzysztof Kozlowski
2016-03-29 14:59 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox