]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ath10k: include irq related functions in ahb
authorRaja Mani <rmani@qti.qualcomm.com>
Wed, 27 Jan 2016 09:54:31 +0000 (15:24 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Thu, 28 Jan 2016 08:47:26 +0000 (10:47 +0200)
Add irq related functions to register,handle,release,disable interrupt.

qca4019 supports msi interrupt, but it has the problem. Until the issue
gets sorted out, only legacy interrupt model is enabled and used.

Signed-off-by: Raja Mani <rmani@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/ahb.c
drivers/net/wireless/ath/ath10k/ahb.h

index 230507890fbf88c13d9b1e0a0ed82505333d18d0..29d0b6c6b35c17b3b987c448e434853e5656f8f7 100644 (file)
@@ -458,6 +458,50 @@ static void ath10k_ahb_halt_chip(struct ath10k *ar)
        ath10k_dbg(ar, ATH10K_DBG_AHB, "core %d reset done\n", core_id);
 }
 
+static irqreturn_t ath10k_ahb_interrupt_handler(int irq, void *arg)
+{
+       struct ath10k *ar = arg;
+       struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
+
+       if (!ath10k_pci_irq_pending(ar))
+               return IRQ_NONE;
+
+       ath10k_pci_disable_and_clear_legacy_irq(ar);
+       tasklet_schedule(&ar_pci->intr_tq);
+
+       return IRQ_HANDLED;
+}
+
+static int ath10k_ahb_request_irq_legacy(struct ath10k *ar)
+{
+       struct ath10k_ahb *ar_ahb = ath10k_ahb_priv(ar);
+       int ret;
+
+       ret = request_irq(ar_ahb->irq,
+                         ath10k_ahb_interrupt_handler,
+                         IRQF_SHARED, "ath10k_ahb", ar);
+       if (ret) {
+               ath10k_warn(ar, "failed to request legacy irq %d: %d\n",
+                           ar_ahb->irq, ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+static void ath10k_ahb_release_irq_legacy(struct ath10k *ar)
+{
+       struct ath10k_ahb *ar_ahb = ath10k_ahb_priv(ar);
+
+       free_irq(ar_ahb->irq, ar);
+}
+
+static void ath10k_ahb_irq_disable(struct ath10k *ar)
+{
+       ath10k_ce_disable_interrupts(ar);
+       ath10k_pci_disable_and_clear_legacy_irq(ar);
+}
+
 static int ath10k_ahb_probe(struct platform_device *pdev)
 {
        return 0;
index 4761eeb475d67f62a98bacd586860a66d9fb8d29..97c40e47dc02657e44152237dcf183f277aa506f 100644 (file)
@@ -26,6 +26,8 @@ struct ath10k_ahb {
        void __iomem *gcc_mem;
        void __iomem *tcsr_mem;
 
+       int irq;
+
        struct clk *cmd_clk;
        struct clk *ref_clk;
        struct clk *rtc_clk;