diff options
author | Fugang Duan <fugang.duan@nxp.com> | 2017-06-05 11:31:10 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:26:40 +0800 |
commit | 9f0efcd4b25a5926006213f08fbb2cf281423d17 (patch) | |
tree | 5a222b46afc216bb68fcca5d9f07a9d8edbebb32 /drivers/irqchip | |
parent | e14e981b45079bb919c7cf9a7938f5d419cc6276 (diff) |
MLK-15005-03 irqchip: irqsteer: add ipg clock support
Some subsystems have lpcg sw_bit to control the ipg_clk to LIS,
so add the ipg clock for the module.
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/irqchip')
-rw-r--r-- | drivers/irqchip/irq-imx-irqsteer.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c index f2affacc7498..1a961f4ea06c 100644 --- a/drivers/irqchip/irq-imx-irqsteer.c +++ b/drivers/irqchip/irq-imx-irqsteer.c @@ -8,6 +8,7 @@ #include <linux/kernel.h> #include <linux/module.h> +#include <linux/clk.h> #include <linux/interrupt.h> #include <linux/irq.h> #include <linux/irqchip/chained_irq.h> @@ -27,6 +28,7 @@ struct irqsteer_irqchip_data { spinlock_t lock; struct platform_device *pdev; void __iomem *regs; + struct clk *ipg_clk; int irq; int channum; struct irq_domain *domain; @@ -170,10 +172,23 @@ static int imx_irqsteer_probe(struct platform_device *pdev) return -ENODEV; } + irqsteer_data->ipg_clk = devm_clk_get(&pdev->dev, "ipg"); + if (IS_ERR(irqsteer_data->ipg_clk)) { + ret = PTR_ERR(irqsteer_data->ipg_clk); + dev_err(&pdev->dev, "failed to get ipg clk: %d\n", ret); + return ret; + } + irqsteer_data->channum = channum; irqsteer_data->pdev = pdev; spin_lock_init(&irqsteer_data->lock); + ret = clk_prepare_enable(irqsteer_data->ipg_clk); + if (ret) { + dev_err(&pdev->dev, "failed to enable ipg clk: %d\n", ret); + return ret; + } + imx_irqsteer_init(irqsteer_data); irqsteer_data->domain = irq_domain_add_linear(np, @@ -204,6 +219,7 @@ static int imx_irqsteer_remove(struct platform_device *pdev) irq_domain_remove(irqsteer_data->domain); platform_set_drvdata(pdev, NULL); + clk_disable_unprepare(irqsteer_data->ipg_clk); return 0; } |