From: Rob Herring <robh@kernel.org>
To: Frank Li <Frank.Li@nxp.com>
Cc: "Uwe Kleine-König" <ukleinek@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Shawn Guo" <shawnguo@kernel.org>,
"Sascha Hauer" <s.hauer@pengutronix.de>,
"Pengutronix Kernel Team" <kernel@pengutronix.de>,
"Fabio Estevam" <festevam@gmail.com>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
linux-pwm@vger.kernel.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, "Liu Ying" <victor.liu@nxp.com>
Subject: Re: [PATCH 2/3] pwm: imx27: Add 32k clock for pwm in i.MX8QXP MIPI subsystem
Date: Fri, 12 Jul 2024 08:06:34 -0600 [thread overview]
Message-ID: <20240712140634.GA595171-robh@kernel.org> (raw)
In-Reply-To: <20240711-pwm-v1-2-4d5766f99b8b@nxp.com>
On Thu, Jul 11, 2024 at 05:08:57PM -0400, Frank Li wrote:
> From: Liu Ying <victor.liu@nxp.com>
>
> PWM in i.MX8QXP MIPI subsystem needs the clock '32k'. Use it if the DTS
> provides that.
>
> Signed-off-by: Liu Ying <victor.liu@nxp.com>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> drivers/pwm/pwm-imx27.c | 33 ++++++++++++++++++++++++++++-----
> 1 file changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pwm/pwm-imx27.c b/drivers/pwm/pwm-imx27.c
> index 9e2bbf5b4a8ce..032bce7d1fdd3 100644
> --- a/drivers/pwm/pwm-imx27.c
> +++ b/drivers/pwm/pwm-imx27.c
> @@ -15,6 +15,7 @@
> #include <linux/delay.h>
> #include <linux/err.h>
> #include <linux/io.h>
> +#include <linux/iopoll.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/of.h>
> @@ -82,6 +83,7 @@
> struct pwm_imx27_chip {
> struct clk *clk_ipg;
> struct clk *clk_per;
> + struct clk *clk_32k;
> void __iomem *mmio_base;
>
> /*
> @@ -101,23 +103,36 @@ static int pwm_imx27_clk_prepare_enable(struct pwm_imx27_chip *imx)
> {
> int ret;
>
> + if (imx->clk_32k) {
> + ret = clk_prepare_enable(imx->clk_32k);
IIRC, no need for the 'if' here. clk_prepare_enable() returns success
for a NULL clock which is what devm_clk_get_optional() returns if the
clock doesn't exist.
> + if (ret)
> + goto err1;
> + }
> +
> ret = clk_prepare_enable(imx->clk_ipg);
> if (ret)
> - return ret;
> + goto err2;
>
> ret = clk_prepare_enable(imx->clk_per);
> - if (ret) {
> - clk_disable_unprepare(imx->clk_ipg);
> - return ret;
> - }
> + if (ret)
> + goto err3;
>
> return 0;
> +err3:
> + clk_disable_unprepare(imx->clk_ipg);
> +err2:
> + if (imx->clk_32k)
> + clk_disable_unprepare(imx->clk_32k);
> +err1:
> + return ret;
> }
>
> static void pwm_imx27_clk_disable_unprepare(struct pwm_imx27_chip *imx)
> {
> clk_disable_unprepare(imx->clk_per);
> clk_disable_unprepare(imx->clk_ipg);
> + if (imx->clk_32k)
> + clk_disable_unprepare(imx->clk_32k);
Same here.
> }
>
> static int pwm_imx27_get_state(struct pwm_chip *chip,
> @@ -223,6 +238,7 @@ static int pwm_imx27_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> struct pwm_imx27_chip *imx = to_pwm_imx27_chip(chip);
> unsigned long long c;
> unsigned long long clkrate;
> + int val;
Goes in next patch.
> int ret;
> u32 cr;
>
> @@ -325,6 +341,13 @@ static int pwm_imx27_probe(struct platform_device *pdev)
> return dev_err_probe(&pdev->dev, PTR_ERR(imx->clk_per),
> "failed to get peripheral clock\n");
>
> + imx->clk_32k = devm_clk_get_optional(&pdev->dev, "32k");
> + if (IS_ERR(imx->clk_32k)) {
> + dev_err(&pdev->dev, "getting 32k clock failed with %ld\n",
> + PTR_ERR(imx->clk_32k));
dev_err_probe.
> + return PTR_ERR(imx->clk_32k);
> + }
> +
> chip->ops = &pwm_imx27_ops;
>
> imx->mmio_base = devm_platform_ioremap_resource(pdev, 0);
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2024-07-12 14:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-11 21:08 [PATCH 0/3] pwm: imx: add 32k clock for 8qm/qxp and workaround a chip issue Frank Li
2024-07-11 21:08 ` [PATCH 1/3] dt-bindings: pwm: imx: Add compatible string imx8qxp-mipi-pwm Frank Li
2024-07-12 14:09 ` Rob Herring
2024-07-11 21:08 ` [PATCH 2/3] pwm: imx27: Add 32k clock for pwm in i.MX8QXP MIPI subsystem Frank Li
2024-07-12 14:06 ` Rob Herring [this message]
2024-07-11 21:08 ` [PATCH 3/3] pwm: imx27: workaround of the pwm output bug when decrease the duty cycle Frank Li
2024-07-12 6:26 ` Stefan Wahren
2024-07-12 14:40 ` Frank Li
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=20240712140634.GA595171-robh@kernel.org \
--to=robh@kernel.org \
--cc=Frank.Li@nxp.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=ukleinek@kernel.org \
--cc=victor.liu@nxp.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.