From: Jon Hunter <jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Laxman Dewangan
<ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"Maciej S. Szmigiero"
<mail-APzI5cXaD1zVlRWJc41N0YvC60bnQu0Y@public.gmane.org>,
Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
Thierry Reding
<thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Alexandre Courbot
<gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Liam Girdwood <lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Subject: Re: Tegra boots failing due to as3722 I/O errors
Date: Wed, 30 Mar 2016 12:31:47 +0100 [thread overview]
Message-ID: <56FBB923.4000302@nvidia.com> (raw)
In-Reply-To: <20160329190319.GE2350-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
Hi Mark,
On 29/03/16 20:03, Mark Brown wrote:
> * PGP Signed by an unknown key
>
> Hi,
>
> Currently the Jetson TK1 is failing to get regulators for MMC with at
> least my regulator tree and probably -next also due to:
>
> [ 1.665750] as3722 4-0040: AS3722 with revision 0x1 found
> [ 1.682945] +VDDIO_SDMMC3: failed to get the current voltage(-22)
> [ 1.689135] as3722-regulator as3722-regulator: regulator 13 register failed -22
> [ 1.697593] as3722-regulator: probe of as3722-regulator failed with error -22
>
> The get voltage operation here is just a simple mapping of a bitfield in
> the regmap which suggests that the underlying problem is somewhere
> further down the stack like the MFD or I2C drivers. The error is
> -EINVAL which suggests something like the register not being marked as
> readable but the _VOLTAGE_REG registers appear to be marked as readable
> in the MFD.
>
> Full log for one boot at:
>
> https://storage.kernelci.org/broonie-regulator/v4.6-rc1-24-ga7e614dd1f91/arm-multi_v7_defconfig+CONFIG_SMP=n/lab-mhart/boot-tegra124-jetson-tk1.html
Thanks for the report. I took a quick look at this and it turns out
that i2c and regmap are all working fine. The problem is the
VDDIO_SDMMC3 LDO (aka. LDO6) on the as3722 has a bypass mode which is
not represented by the voltage ranges for the LDO. On boot the LDO is
in bypass and returns a value which is not recognised and hence an
EINVAL is returned. The following change fixes the problem. The 0x3F
value represents the bypass mode. I will send out a formal patch.
Cheers
Jon
diff --git a/drivers/regulator/as3722-regulator.c b/drivers/regulator/as3722-regulator.c
index 8b046ee..f16d0e5 100644
--- a/drivers/regulator/as3722-regulator.c
+++ b/drivers/regulator/as3722-regulator.c
@@ -438,6 +438,13 @@ static const struct regulator_linear_range as3722_ldo_ranges[] = {
REGULATOR_LINEAR_RANGE(1725000, 0x40, 0x7F, 25000),
};
+static const struct regulator_linear_range as3722_ldo6_ranges[] = {
+ REGULATOR_LINEAR_RANGE(0, 0x00, 0x00, 0),
+ REGULATOR_LINEAR_RANGE(825000, 0x01, 0x24, 25000),
+ REGULATOR_LINEAR_RANGE(3300000, 0x3F, 0x3F, 0),
+ REGULATOR_LINEAR_RANGE(1725000, 0x40, 0x7F, 25000),
+};
+
static struct regulator_ops as3722_ldo_ops = {
.is_enabled = regulator_is_enabled_regmap,
.enable = regulator_enable_regmap,
@@ -863,6 +870,16 @@ static int as3722_regulator_probe(struct platform_device *pdev)
as3722_regs->desc[id].n_linear_ranges =
ARRAY_SIZE(as3722_sd2345_ranges);
break;
+ case AS3722_REGULATOR_ID_LDO6:
+ if (reg_config->ext_control)
+ ops = &as3722_ldo_extcntrl_ops;
+ else
+ ops = &as3722_ldo_ops;
+ as3722_regs->desc[id].enable_time = 500;
+ as3722_regs->desc[id].linear_ranges = as3722_ldo6_ranges;
+ as3722_regs->desc[id].n_linear_ranges =
+ ARRAY_SIZE(as3722_ldo6_ranges);
+ break;
default:
if (reg_config->ext_control)
ops = &as3722_ldo_extcntrl_ops;
WARNING: multiple messages have this Message-ID (diff)
From: Jon Hunter <jonathanh@nvidia.com>
To: Mark Brown <broonie@kernel.org>,
Laxman Dewangan <ldewangan@nvidia.com>,
"Maciej S. Szmigiero" <mail@maciej.szmigiero.name>,
Lee Jones <lee.jones@linaro.org>,
Stephen Warren <swarren@wwwdotorg.org>,
"Thierry Reding" <thierry.reding@gmail.com>,
Alexandre Courbot <gnurou@gmail.com>
Cc: <linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
"Liam Girdwood" <lgirdwood@gmail.com>
Subject: Re: Tegra boots failing due to as3722 I/O errors
Date: Wed, 30 Mar 2016 12:31:47 +0100 [thread overview]
Message-ID: <56FBB923.4000302@nvidia.com> (raw)
In-Reply-To: <20160329190319.GE2350@sirena.org.uk>
Hi Mark,
On 29/03/16 20:03, Mark Brown wrote:
> * PGP Signed by an unknown key
>
> Hi,
>
> Currently the Jetson TK1 is failing to get regulators for MMC with at
> least my regulator tree and probably -next also due to:
>
> [ 1.665750] as3722 4-0040: AS3722 with revision 0x1 found
> [ 1.682945] +VDDIO_SDMMC3: failed to get the current voltage(-22)
> [ 1.689135] as3722-regulator as3722-regulator: regulator 13 register failed -22
> [ 1.697593] as3722-regulator: probe of as3722-regulator failed with error -22
>
> The get voltage operation here is just a simple mapping of a bitfield in
> the regmap which suggests that the underlying problem is somewhere
> further down the stack like the MFD or I2C drivers. The error is
> -EINVAL which suggests something like the register not being marked as
> readable but the _VOLTAGE_REG registers appear to be marked as readable
> in the MFD.
>
> Full log for one boot at:
>
> https://storage.kernelci.org/broonie-regulator/v4.6-rc1-24-ga7e614dd1f91/arm-multi_v7_defconfig+CONFIG_SMP=n/lab-mhart/boot-tegra124-jetson-tk1.html
Thanks for the report. I took a quick look at this and it turns out
that i2c and regmap are all working fine. The problem is the
VDDIO_SDMMC3 LDO (aka. LDO6) on the as3722 has a bypass mode which is
not represented by the voltage ranges for the LDO. On boot the LDO is
in bypass and returns a value which is not recognised and hence an
EINVAL is returned. The following change fixes the problem. The 0x3F
value represents the bypass mode. I will send out a formal patch.
Cheers
Jon
diff --git a/drivers/regulator/as3722-regulator.c b/drivers/regulator/as3722-regulator.c
index 8b046ee..f16d0e5 100644
--- a/drivers/regulator/as3722-regulator.c
+++ b/drivers/regulator/as3722-regulator.c
@@ -438,6 +438,13 @@ static const struct regulator_linear_range as3722_ldo_ranges[] = {
REGULATOR_LINEAR_RANGE(1725000, 0x40, 0x7F, 25000),
};
+static const struct regulator_linear_range as3722_ldo6_ranges[] = {
+ REGULATOR_LINEAR_RANGE(0, 0x00, 0x00, 0),
+ REGULATOR_LINEAR_RANGE(825000, 0x01, 0x24, 25000),
+ REGULATOR_LINEAR_RANGE(3300000, 0x3F, 0x3F, 0),
+ REGULATOR_LINEAR_RANGE(1725000, 0x40, 0x7F, 25000),
+};
+
static struct regulator_ops as3722_ldo_ops = {
.is_enabled = regulator_is_enabled_regmap,
.enable = regulator_enable_regmap,
@@ -863,6 +870,16 @@ static int as3722_regulator_probe(struct platform_device *pdev)
as3722_regs->desc[id].n_linear_ranges =
ARRAY_SIZE(as3722_sd2345_ranges);
break;
+ case AS3722_REGULATOR_ID_LDO6:
+ if (reg_config->ext_control)
+ ops = &as3722_ldo_extcntrl_ops;
+ else
+ ops = &as3722_ldo_ops;
+ as3722_regs->desc[id].enable_time = 500;
+ as3722_regs->desc[id].linear_ranges = as3722_ldo6_ranges;
+ as3722_regs->desc[id].n_linear_ranges =
+ ARRAY_SIZE(as3722_ldo6_ranges);
+ break;
default:
if (reg_config->ext_control)
ops = &as3722_ldo_extcntrl_ops;
next prev parent reply other threads:[~2016-03-30 11:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-29 19:03 Tegra boots failing due to as3722 I/O errors Mark Brown
2016-03-29 19:03 ` Mark Brown
[not found] ` <20160329190319.GE2350-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-03-30 11:31 ` Jon Hunter [this message]
2016-03-30 11:31 ` Jon Hunter
[not found] ` <56FBB923.4000302-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-03-30 13:15 ` Jon Hunter
2016-03-30 13:15 ` Jon Hunter
[not found] ` <56FBD164.7040707-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-03-30 16:46 ` Mark Brown
2016-03-30 16:46 ` Mark Brown
[not found] ` <20160330164646.GH2350-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2016-03-31 14:45 ` Jon Hunter
2016-03-31 14:45 ` Jon Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56FBB923.4000302@nvidia.com \
--to=jonathanh-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
--cc=broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=ldewangan-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mail-APzI5cXaD1zVlRWJc41N0YvC60bnQu0Y@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
--cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.