From: Mark Brown <broonie@kernel.org>
To: Stefan Wahren <stefan.wahren@i2se.com>
Cc: lgirdwood@gmail.com, shawn.guo@linaro.org, robh+dt@kernel.org,
pawel.moll@arm.com, mark.rutland@arm.com,
ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
festevam@gmail.com, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, kernel@pengutronix.de
Subject: Re: [PATCH 2/2] regulator: add mxs regulator driver
Date: Sun, 28 Sep 2014 11:16:50 +0100 [thread overview]
Message-ID: <20140928101650.GL27755@sirena.org.uk> (raw)
In-Reply-To: <1411779588-22031-3-git-send-email-stefan.wahren@i2se.com>
[-- Attachment #1: Type: text/plain, Size: 3109 bytes --]
On Sat, Sep 27, 2014 at 12:59:48AM +0000, Stefan Wahren wrote:
> + pr_debug("%s: min_uV %d, max_uV %d, min %d, max %d\n", __func__,
> + min_uV, max_uV, con->min_uV, con->max_uV);
> +
> + if (max_uV < con->min_uV || max_uV > con->max_uV)
> + return -EINVAL;
This is replicating checks done by the core.
> + val = (max_uV - con->min_uV) * sreg->rdesc.n_voltages /
> + (con->max_uV - con->min_uV);
Drivers should never look at their constraints, they should let the core
do that and just do what they're asked. In this case it is probably
best to implement a get_voltage_sel() operation and have the conversion
to voltage done by regulator_map_voltage_linear(), this will both make
the code look better and mean the driver gets the benefit of all the
error checking done by the core.
> + writel(val | regs, sreg->base_addr);
> + for (i = 20; i; i--) {
> + /* delay for fast mode */
> + if (readl(power_sts) & BM_POWER_STS_DC_OK)
> + return 0;
> +
> + udelay(1);
> + }
> +
> + writel(val | regs, sreg->base_addr);
> + start = jiffies;
> + while (1) {
> + /* delay for normal mode */
> + if (readl(power_sts) & BM_POWER_STS_DC_OK)
> + return 0;
This really needs a comment to explain what on earth is going on here -
the whole thing with writing the same thing twice with two delays is
more than a little odd. It looks like the driver is trying to busy wait
in cases where the change happens quickly but the comments about "fast"
and "normal" mode make this unclear.
> + pr_debug("%s: %s register val %d\n", __func__, sreg->name, val);
> +
> + switch (sreg->rdesc.id) {
> + case MXS_VDDA:
> + val >>= 16;
> + break;
> + case MXS_VDDD:
> + val >>= 20;
> + break;
> + }
> +
> + return val ? 1 : 0;
> +}
This seems buggy - it'll always return true for MXS_VDDD if MXS_VDDA
enabled won't it?
> +static unsigned int mxs_get_mode(struct regulator_dev *reg)
> +{
> + struct mxs_regulator *sreg = rdev_get_drvdata(reg);
> + u32 val = readl(sreg->base_addr) & sreg->mode_mask;
> +
> + return val ? REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL;
> +}
Please try to avoid the ternery operator, it does nothing for
legibility.
> + if (of_property_read_string(np, "regulator-name", &name)) {
> + dev_err(dev, "missing property regulator-name\n");
> + return -EINVAL;
> + }
Use different compatibles to identify the regulators, regulator-name
should never be mandatory.
> + switch (sreg->rdesc.id) {
> + case MXS_VDDIO:
> + sreg->mode_mask = BIT(17);
> + break;
> + case MXS_VDDA:
> + sreg->mode_mask = BIT(18);
> + break;
> + case MXS_VDDD:
> + sreg->mode_mask = BIT(22);
> + break;
> + }
Why is this not looked up from the data structure like the rest of the
data?
> + dev_info(dev, "%s found\n", name);
Don't add noise like this to the boot log, it provides no useful
information.
> + regulator_unregister(rdev);
> + iounmap(power_addr);
> + iounmap(base_addr);
Use devm_ versions of functions.
> +static int __init mxs_regulator_init(void)
> +{
> + return platform_driver_register(&mxs_regulator_driver);
> +}
> +postcore_initcall(mxs_regulator_init);
module_platform_driver().
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
next prev parent reply other threads:[~2014-09-28 10:16 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-27 0:59 [PATCH 0/2] regulator: add support for mxs regulator Stefan Wahren
2014-09-27 0:59 ` [PATCH 1/2] DT: add binding " Stefan Wahren
[not found] ` <1411779588-22031-2-git-send-email-stefan.wahren-eS4NqCHxEME@public.gmane.org>
2014-09-28 10:22 ` Mark Brown
2014-09-28 10:22 ` Mark Brown
[not found] ` <20140928102202.GM27755-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-09-29 6:00 ` Stefan Wahren
2014-09-29 6:00 ` Stefan Wahren
[not found] ` <5428F592.3020809-eS4NqCHxEME@public.gmane.org>
2014-09-29 10:23 ` Mark Brown
2014-09-29 10:23 ` Mark Brown
2014-09-29 11:09 ` Mark Rutland
2014-09-29 11:09 ` Mark Rutland
2014-09-29 11:53 ` Stefan Wahren
2014-09-29 11:53 ` Stefan Wahren
[not found] ` <54294832.8000702-eS4NqCHxEME@public.gmane.org>
2014-09-29 12:41 ` Mark Rutland
2014-09-29 12:41 ` Mark Rutland
2014-09-29 13:10 ` Stefan Wahren
2014-09-29 13:10 ` Stefan Wahren
2014-09-29 13:23 ` Mark Rutland
2014-10-03 11:46 ` Stefan Wahren
2014-10-03 11:46 ` Stefan Wahren
2014-09-27 0:59 ` [PATCH 2/2] regulator: add mxs regulator driver Stefan Wahren
2014-09-28 10:16 ` Mark Brown [this message]
2014-09-29 6:38 ` Stefan Wahren
[not found] ` <5428FE7B.8060700-eS4NqCHxEME@public.gmane.org>
2014-09-29 17:13 ` Mark Brown
2014-09-29 17:13 ` Mark Brown
[not found] ` <20140929171314.GW16977-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-09-30 6:40 ` Stefan Wahren
2014-09-30 6:40 ` Stefan Wahren
2014-10-01 13:23 ` Stefan Wahren
2014-10-01 13:23 ` Stefan Wahren
2014-10-01 15:57 ` Mark Brown
2014-10-02 16:18 ` Fabio Estevam
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=20140928101650.GL27755@sirena.org.uk \
--to=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=galak@codeaurora.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=kernel@pengutronix.de \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=shawn.guo@linaro.org \
--cc=stefan.wahren@i2se.com \
/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.