From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: lee.jones@linaro.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mfd: qcom_rpm: handle message RAM clock
Date: Thu, 18 Aug 2016 07:17:01 -0700 [thread overview]
Message-ID: <20160818141701.GS26240@tuxbot> (raw)
In-Reply-To: <1471525219-647-1-git-send-email-linus.walleij@linaro.org>
On Thu 18 Aug 06:00 PDT 2016, Linus Walleij wrote:
> The MSM8660, APQ8060, IPQ806x and MSM8960 have a GCC clock
> to the message RAM used by the RPM. This needs to be enabled
> for messages to pass through. This is a crude solution that
> simply prepare/enable at probe() and disable/unprepare
> at remove(). More elaborate PM is probably possible to
> add later.
>
> The construction uses IS_ERR() to gracefully handle the
> platforms that do not provide a message RAM clock. It will
> bail out of probe only if the clock is hitting a probe
> deferral situation.
>
Even more convenient is that clk_prepare_enable() and
clk_disable_unprepare() accepts a NULL.
So set rpm->ramclk = NULL in the error path and move the
clk_enable/disable() out of their conditional.
> Of course this requires the proper device tree set-up:
>
> rpm: rpm@104000 {
> compatible = "qcom,rpm-msm8660";
> clocks = <&gcc RPM_MSG_RAM_H_CLK>;
> clock-names = "ram";
> ...
> };
>
Please write a few lines in the binding document as well:
Documentation/devicetree/bindings/mfd/qcom-rpm.txt
> I have provided this in the MSM8660 device tree, and will
> provide patches for the other targets.
>
> Cc: Björn Andersson <bjorn.andersson@linaro.org>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
> drivers/mfd/qcom_rpm.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
[..]
> @@ -501,6 +503,20 @@ static int qcom_rpm_probe(struct platform_device *pdev)
> mutex_init(&rpm->lock);
> init_completion(&rpm->ack);
>
> + /* Enable message RAM clock */
> + rpm->ramclk = devm_clk_get(&pdev->dev, "ram");
> + if (IS_ERR(rpm->ramclk)) {
> + ret = PTR_ERR(rpm->ramclk);
> + if (ret == -EPROBE_DEFER)
> + return ret;
> + /*
> + * Fall through in all other cases, as the clock is
> + * optional. (Does not exist on all platforms.)
> + */
rpm->ramclk = NULL;
> + } else {
> + clk_prepare_enable(rpm->ramclk);
> + }
> +
> irq_ack = platform_get_irq_byname(pdev, "ack");
> if (irq_ack < 0) {
> dev_err(&pdev->dev, "required ack interrupt missing\n");
> @@ -620,6 +636,10 @@ static int qcom_rpm_probe(struct platform_device *pdev)
>
> static int qcom_rpm_remove(struct platform_device *pdev)
> {
> + struct qcom_rpm *rpm = dev_get_drvdata(&pdev->dev);
> +
> + if (!IS_ERR(rpm->ramclk))
> + clk_disable_unprepare(rpm->ramclk);
I suggest that you do this after of_platform_depopulate().
> of_platform_depopulate(&pdev->dev);
> return 0;
> }
Regards,
Bjorn
prev parent reply other threads:[~2016-08-18 14:22 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-18 13:00 [PATCH] mfd: qcom_rpm: handle message RAM clock Linus Walleij
2016-08-18 14:17 ` Bjorn Andersson [this message]
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=20160818141701.GS26240@tuxbot \
--to=bjorn.andersson@linaro.org \
--cc=lee.jones@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.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.