From a60239e354d946d4f8b5b6cb325449cb02b3195f Mon Sep 17 00:00:00 2001 From: Laxminath Kasam Date: Thu, 10 Jan 2019 14:43:03 +0530 Subject: [PATCH] soc: soundwire: Add support for GPIO interrupt path In trinket target, interrupt for wakeup is provided via chip TLMM. Add required support to handle wakeup interrupt on SWR data line triggered over this TLMM line. Change-Id: I7fb6d7009a6271d54d0f11f99930b0d039f57129 Signed-off-by: Laxminath Kasam --- soc/swr-mstr-ctrl.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c index 74817af995..2235934a72 100644 --- a/soc/swr-mstr-ctrl.c +++ b/soc/swr-mstr-ctrl.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -2168,17 +2170,28 @@ static int swrm_device_down(struct device *dev) int swrm_register_wake_irq(struct swr_mstr_ctrl *swrm) { int ret = 0; + int irq, dir_apps_irq; if (!swrm->ipc_wakeup) { - swrm->wake_irq = platform_get_irq_byname(swrm->pdev, - "swr_wake_irq"); - if (swrm->wake_irq < 0) { - dev_err(swrm->dev, - "%s() error getting wake irq handle: %d\n", - __func__, swrm->wake_irq); - return -EINVAL; + irq = of_get_named_gpio(swrm->dev->of_node, + "qcom,swr-wakeup-irq", 0); + if (gpio_is_valid(irq)) { + swrm->wake_irq = gpio_to_irq(irq); + if (swrm->wake_irq < 0) { + dev_err(swrm->dev, + "Unable to configure irq\n"); + return swrm->wake_irq; + } + } else { + dir_apps_irq = platform_get_irq_byname(swrm->pdev, + "swr_wake_irq"); + if (dir_apps_irq < 0) { + dev_err(swrm->dev, + "TLMM connect gpio not found\n"); + return -EINVAL; + } + swrm->wake_irq = dir_apps_irq; } - ret = request_threaded_irq(swrm->wake_irq, NULL, swrm_wakeup_interrupt, IRQF_TRIGGER_HIGH | IRQF_ONESHOT,