All of lore.kernel.org
 help / color / mirror / Atom feed
From: Clark Wang <xiaoning.wang@nxp.com>
To: aisheng.dong@nxp.com, robh+dt@kernel.org, shawnguo@kernel.org,
	s.hauer@pengutronix.de, festevam@gmail.com
Cc: kernel@pengutronix.de, linux-imx@nxp.com,
	linux-i2c@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH V2 07/18] i2c: imx-lpi2c: manage irq resource request/release in runtime pm
Date: Tue,  6 Apr 2021 19:32:55 +0800	[thread overview]
Message-ID: <20210406113306.2633595-8-xiaoning.wang@nxp.com> (raw)
In-Reply-To: <20210406113306.2633595-1-xiaoning.wang@nxp.com>

From: Fugang Duan <fugang.duan@nxp.com>

Manage irq resource request/release in runtime pm to save irq domain's
power.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Clark Wang <xiaoning.wang@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
---
V2 changes:
 - Change to use request_irq/free_irq.
---
 drivers/i2c/busses/i2c-imx-lpi2c.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c
index 89b7b0795f51..333209ba81c1 100644
--- a/drivers/i2c/busses/i2c-imx-lpi2c.c
+++ b/drivers/i2c/busses/i2c-imx-lpi2c.c
@@ -94,6 +94,7 @@ enum lpi2c_imx_pincfg {
 
 struct lpi2c_imx_struct {
 	struct i2c_adapter	adapter;
+	int			irq;
 	struct clk		*clk_per;
 	struct clk		*clk_ipg;
 	void __iomem		*base;
@@ -571,7 +572,7 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
 {
 	struct lpi2c_imx_struct *lpi2c_imx;
 	unsigned int temp;
-	int irq, ret;
+	int ret;
 
 	lpi2c_imx = devm_kzalloc(&pdev->dev, sizeof(*lpi2c_imx), GFP_KERNEL);
 	if (!lpi2c_imx)
@@ -581,9 +582,9 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
 	if (IS_ERR(lpi2c_imx->base))
 		return PTR_ERR(lpi2c_imx->base);
 
-	irq = platform_get_irq(pdev, 0);
-	if (irq < 0)
-		return irq;
+	lpi2c_imx->irq = platform_get_irq(pdev, 0);
+	if (lpi2c_imx->irq < 0)
+		return lpi2c_imx->irq;
 
 	lpi2c_imx->adapter.owner	= THIS_MODULE;
 	lpi2c_imx->adapter.algo		= &lpi2c_imx_algo;
@@ -609,13 +610,6 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
 	if (ret)
 		lpi2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ;
 
-	ret = devm_request_irq(&pdev->dev, irq, lpi2c_imx_isr, 0,
-			       pdev->name, lpi2c_imx);
-	if (ret) {
-		dev_err(&pdev->dev, "can't claim irq %d\n", irq);
-		return ret;
-	}
-
 	i2c_set_adapdata(&lpi2c_imx->adapter, lpi2c_imx);
 	platform_set_drvdata(pdev, lpi2c_imx);
 
@@ -668,6 +662,7 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev)
 {
 	struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
 
+	free_irq(lpi2c_imx->irq, lpi2c_imx);
 	lpi2c_imx_clocks_unprepare(lpi2c_imx);
 	pinctrl_pm_select_sleep_state(dev);
 
@@ -677,10 +672,21 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev)
 static int __maybe_unused lpi2c_runtime_resume(struct device *dev)
 {
 	struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
+	int ret = 0;
 
 	pinctrl_pm_select_default_state(dev);
+	ret = lpi2c_imx_clocks_prepare(lpi2c_imx);
+	if (ret)
+		return ret;
 
-	return lpi2c_imx_clocks_prepare(lpi2c_imx);
+	ret = request_irq(lpi2c_imx->irq, lpi2c_imx_isr, 0,
+			       dev_name(dev), lpi2c_imx);
+	if (ret) {
+		dev_err(dev, "can't claim irq %d\n", lpi2c_imx->irq);
+		return ret;
+	}
+
+	return ret;
 }
 
 static const struct dev_pm_ops lpi2c_pm_ops = {
-- 
2.25.1


WARNING: multiple messages have this Message-ID (diff)
From: Clark Wang <xiaoning.wang@nxp.com>
To: aisheng.dong@nxp.com, robh+dt@kernel.org, shawnguo@kernel.org,
	s.hauer@pengutronix.de, festevam@gmail.com
Cc: kernel@pengutronix.de, linux-imx@nxp.com,
	linux-i2c@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH V2 07/18] i2c: imx-lpi2c: manage irq resource request/release in runtime pm
Date: Tue,  6 Apr 2021 19:32:55 +0800	[thread overview]
Message-ID: <20210406113306.2633595-8-xiaoning.wang@nxp.com> (raw)
In-Reply-To: <20210406113306.2633595-1-xiaoning.wang@nxp.com>

From: Fugang Duan <fugang.duan@nxp.com>

Manage irq resource request/release in runtime pm to save irq domain's
power.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Clark Wang <xiaoning.wang@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
---
V2 changes:
 - Change to use request_irq/free_irq.
---
 drivers/i2c/busses/i2c-imx-lpi2c.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c
index 89b7b0795f51..333209ba81c1 100644
--- a/drivers/i2c/busses/i2c-imx-lpi2c.c
+++ b/drivers/i2c/busses/i2c-imx-lpi2c.c
@@ -94,6 +94,7 @@ enum lpi2c_imx_pincfg {
 
 struct lpi2c_imx_struct {
 	struct i2c_adapter	adapter;
+	int			irq;
 	struct clk		*clk_per;
 	struct clk		*clk_ipg;
 	void __iomem		*base;
@@ -571,7 +572,7 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
 {
 	struct lpi2c_imx_struct *lpi2c_imx;
 	unsigned int temp;
-	int irq, ret;
+	int ret;
 
 	lpi2c_imx = devm_kzalloc(&pdev->dev, sizeof(*lpi2c_imx), GFP_KERNEL);
 	if (!lpi2c_imx)
@@ -581,9 +582,9 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
 	if (IS_ERR(lpi2c_imx->base))
 		return PTR_ERR(lpi2c_imx->base);
 
-	irq = platform_get_irq(pdev, 0);
-	if (irq < 0)
-		return irq;
+	lpi2c_imx->irq = platform_get_irq(pdev, 0);
+	if (lpi2c_imx->irq < 0)
+		return lpi2c_imx->irq;
 
 	lpi2c_imx->adapter.owner	= THIS_MODULE;
 	lpi2c_imx->adapter.algo		= &lpi2c_imx_algo;
@@ -609,13 +610,6 @@ static int lpi2c_imx_probe(struct platform_device *pdev)
 	if (ret)
 		lpi2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ;
 
-	ret = devm_request_irq(&pdev->dev, irq, lpi2c_imx_isr, 0,
-			       pdev->name, lpi2c_imx);
-	if (ret) {
-		dev_err(&pdev->dev, "can't claim irq %d\n", irq);
-		return ret;
-	}
-
 	i2c_set_adapdata(&lpi2c_imx->adapter, lpi2c_imx);
 	platform_set_drvdata(pdev, lpi2c_imx);
 
@@ -668,6 +662,7 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev)
 {
 	struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
 
+	free_irq(lpi2c_imx->irq, lpi2c_imx);
 	lpi2c_imx_clocks_unprepare(lpi2c_imx);
 	pinctrl_pm_select_sleep_state(dev);
 
@@ -677,10 +672,21 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev)
 static int __maybe_unused lpi2c_runtime_resume(struct device *dev)
 {
 	struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
+	int ret = 0;
 
 	pinctrl_pm_select_default_state(dev);
+	ret = lpi2c_imx_clocks_prepare(lpi2c_imx);
+	if (ret)
+		return ret;
 
-	return lpi2c_imx_clocks_prepare(lpi2c_imx);
+	ret = request_irq(lpi2c_imx->irq, lpi2c_imx_isr, 0,
+			       dev_name(dev), lpi2c_imx);
+	if (ret) {
+		dev_err(dev, "can't claim irq %d\n", lpi2c_imx->irq);
+		return ret;
+	}
+
+	return ret;
 }
 
 static const struct dev_pm_ops lpi2c_pm_ops = {
-- 
2.25.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2021-04-06 11:33 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-06 11:32 [PATCH V2 00/18] i2c: imx-lpi2c: New features and bug fixes Clark Wang
2021-04-06 11:32 ` Clark Wang
2021-04-06 11:32 ` [PATCH V2 01/18] i2c: imx-lpi2c: directly retrun ISR when detect a NACK Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-04-06 11:32 ` [PATCH V2 02/18] i2c: imx-lpi2c: add ipg clk for lpi2c driver Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-05-21  6:14   ` Aisheng Dong
2021-05-21  6:14     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 03/18] ARM: dts: imx7ulp: add the missing lpi2c ipg clock Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-05-21  6:17   ` Aisheng Dong
2021-05-21  6:17     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 04/18] ARM: dts: imx7ulp: add the missing lpi2c nodes Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-05-21  6:25   ` Aisheng Dong
2021-05-21  6:25     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 05/18] ARM64: dts: imx8: add the missing lpi2c ipg clock Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-05-11  2:59   ` Shawn Guo
2021-05-11  2:59     ` Shawn Guo
2021-05-21  6:28   ` Aisheng Dong
2021-05-21  6:28     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 06/18] ARM64: dts: imx8: change i2c irq number to non-combined Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-05-21  6:32   ` Aisheng Dong
2021-05-21  6:32     ` Aisheng Dong
2021-04-06 11:32 ` Clark Wang [this message]
2021-04-06 11:32   ` [PATCH V2 07/18] i2c: imx-lpi2c: manage irq resource request/release in runtime pm Clark Wang
2021-05-21  6:38   ` Aisheng Dong
2021-05-21  6:38     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 08/18] i2c: imx-lpi2c: add debug message when i2c peripheral clk doesn't work Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-05-21  6:43   ` Aisheng Dong
2021-05-21  6:43     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 09/18] i2c: imx-lpi2c: increase PM timeout to avoid operate clk frequently Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-04-06 11:32 ` [PATCH V2 10/18] i2c: imx-lpi2c: add bus recovery feature Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-04-07  0:34   ` kernel test robot
2021-04-07  0:34     ` kernel test robot
2021-04-07  0:34     ` kernel test robot
2021-05-21  6:44   ` Aisheng Dong
2021-05-21  6:44     ` Aisheng Dong
2021-04-06 11:32 ` [PATCH V2 11/18] dt-bindings: i2c: imx-lpi2c: Add bus recovery example Clark Wang
2021-04-06 11:32   ` Clark Wang
2021-04-06 13:24   ` Rob Herring
2021-04-06 13:24     ` Rob Herring
2021-05-21  7:02   ` Aisheng Dong
2021-05-21  7:02     ` Aisheng Dong
2021-04-06 11:33 ` [PATCH V2 12/18] i2c: imx-lpi2c: fix i2c timing issue Clark Wang
2021-04-06 11:33   ` Clark Wang
2021-04-06 11:33 ` [PATCH V2 13/18] i2c: imx-lpi2c: fix type char overflow issue when calculating the clock cycle Clark Wang
2021-04-06 11:33   ` Clark Wang
2021-04-06 11:33 ` [PATCH V2 14/18] i2c: imx-lpi2c: add edma mode support Clark Wang
2021-04-06 11:33   ` Clark Wang
2021-04-06 11:41   ` Clark Wang
2021-04-06 11:41     ` Clark Wang
2021-04-06 11:33 ` [PATCH V2 15/18] dt-bindings: i2c: imx-lpi2c: Add dma configuration example Clark Wang
2021-04-06 11:33   ` Clark Wang
2021-04-09 16:33   ` Rob Herring
2021-04-09 16:33     ` Rob Herring
2021-04-06 11:33 ` [PATCH V2 16/18] ARM: dts: imx7ulp: add dma configurations for lpi2c Clark Wang
2021-04-06 11:33   ` Clark Wang
2021-04-06 11:33 ` [PATCH V2 17/18] ARM: dts: imx7ulp: add the missing status property of lpi2c5 Clark Wang
2021-04-06 11:33   ` Clark Wang
2021-04-06 11:33 ` [PATCH V2 18/18] i2c: imx-lpi2c: fix pio mode cannot send 256+ bytes in one frame Clark Wang
2021-04-06 11:33   ` Clark Wang

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=20210406113306.2633595-8-xiaoning.wang@nxp.com \
    --to=xiaoning.wang@nxp.com \
    --cc=aisheng.dong@nxp.com \
    --cc=devicetree@vger.kernel.org \
    --cc=festevam@gmail.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@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.