From patchwork Sat Mar 11 23:14:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 737765 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vgg2N08Wnz9s7M for ; Sun, 12 Mar 2017 10:14:51 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="b0dn2naG"; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 592BAB91529; Sun, 12 Mar 2017 00:14:45 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP; Sun, 12 Mar 2017 00:14:45 +0100 (CET) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 74FDDB90EAA for ; Sun, 12 Mar 2017 00:14:43 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .linaro. - helo: .mail-lf0-f51.google. - helo-domain: .google.) FROM/MX_MATCHES_HELO(DOMAIN)=-2; rate: -7 Received: from mail-lf0-f51.google.com (mail-lf0-f51.google.com [209.85.215.51]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Sun, 12 Mar 2017 00:14:43 +0100 (CET) Received: by mail-lf0-f51.google.com with SMTP id z15so30274159lfd.1 for ; Sat, 11 Mar 2017 15:14:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=X2wCG/HbCj/5d6LSmgVOhwXlzE1UEtgXF46GDevuzec=; b=b0dn2naGpvF/BXqJIIml97rUCaK6XYwZKJqOMxDOWphFJoLXmuexfGnxL9apDN836d LwaaMOtjzq0Uf04WgXJSKhBXSvtbCmnnIsOtqVjMVbNFilzmf2LpSlOvgrAGDEs7BFl5 3uQSGhbd/HxBqlcbNS1Aehdd1yolP11RHRKx0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=X2wCG/HbCj/5d6LSmgVOhwXlzE1UEtgXF46GDevuzec=; b=eI1dXESLghyVDrOC80evj/42GHtJNGMWR2G2FbMkFOTsfiC/abxOQhXYGfvD2cSELD LhR5iMGQS4oj+Wpst3HIemmr3u2J2PQMrVltVT3oXxUNlt6Cf5v0wFiRaGL9dIG3qqED x9umF4RqMdI0HnPn4zEZDmUvF+rS02j11WsoeoLdCrhuMyb+Y2dIwksStScEEkSGwMFl QnhVrhq0CVxBOy4AqtRDHQoqbQekAf3I9aYNPaTCccHcPbREymz/cvwIN85HbzZpacxS rDq8loCsAtgsBye/hxqV15P033NxF50jZ4jHQQB/hMb3yd+EkgidFGwUFJl0wZE68WDz CBvg== X-Gm-Message-State: AMke39ncE8M/rtr0hakgm7kEfJCPli8SOAUJ6w49GJQtk0iC8ufOjmN1wNAnl6sK7Vw23WZU X-Received: by 10.25.207.81 with SMTP id f78mr6484250lfg.4.1489274082690; Sat, 11 Mar 2017 15:14:42 -0800 (PST) Received: from localhost.localdomain (c-357171d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.113.53]) by smtp.gmail.com with ESMTPSA id o91sm2756749lfg.1.2017.03.11.15.14.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 11 Mar 2017 15:14:41 -0800 (PST) From: Linus Walleij To: Hans Ulli Kroll , Florian Fainelli , Thomas Gleixner , Jason Cooper , Marc Zyngier Date: Sun, 12 Mar 2017 00:14:29 +0100 Message-Id: <20170311231429.15961-1-linus.walleij@linaro.org> X-Mailer: git-send-email 2.9.3 Subject: [OpenWrt-Devel] [PATCH 3/4] irqchip: faraday: fix the trigger types X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: openwrt-devel@openwrt.org, Janos Laube , linux-arm-kernel@lists.infradead.org, Paulius Zaleckas MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" The triggers in the driver were right for high level triggered IRQs but the edge detection on edge triggered IRQs was wrong. After studying a proper driver from Po-Yu Chuang I now know how to handle these right, and we can properly implement low level IRQs as well. The device trees for the Gemini had polarity switched around so these have been fixed to conform to the right polarity as well. Greentime Hu Signed-off-by: Linus Walleij --- drivers/irqchip/irq-ftintc010.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/irqchip/irq-ftintc010.c b/drivers/irqchip/irq-ftintc010.c index 48982a421549..8c52450b5075 100644 --- a/drivers/irqchip/irq-ftintc010.c +++ b/drivers/irqchip/irq-ftintc010.c @@ -26,7 +26,9 @@ #define FT010_IRQ_SOURCE(base_addr) (base_addr + 0x00) #define FT010_IRQ_MASK(base_addr) (base_addr + 0x04) #define FT010_IRQ_CLEAR(base_addr) (base_addr + 0x08) +/* Selects level- or edge-triggered */ #define FT010_IRQ_MODE(base_addr) (base_addr + 0x0C) +/* Selects active low/high or falling/rising edge */ #define FT010_IRQ_POLARITY(base_addr) (base_addr + 0x10) #define FT010_IRQ_STATUS(base_addr) (base_addr + 0x14) #define FT010_FIQ_SOURCE(base_addr) (base_addr + 0x20) @@ -84,22 +86,25 @@ static int ft010_irq_set_type(struct irq_data *d, unsigned int trigger) mode = readl(FT010_IRQ_MODE(f->base)); polarity = readl(FT010_IRQ_POLARITY(f->base)); - if (trigger & (IRQ_TYPE_LEVEL_HIGH)) { + if (trigger & (IRQ_TYPE_LEVEL_LOW)) { + irq_set_handler_locked(d, handle_level_irq); + mode &= ~BIT(offset); + polarity |= BIT(offset); + } else if (trigger & (IRQ_TYPE_LEVEL_HIGH)) { irq_set_handler_locked(d, handle_level_irq); - /* Disable edge detection */ mode &= ~BIT(offset); polarity &= ~BIT(offset); - } else if (trigger & IRQ_TYPE_EDGE_RISING) { + } else if (trigger & IRQ_TYPE_EDGE_FALLING) { irq_set_handler_locked(d, handle_edge_irq); mode |= BIT(offset); polarity |= BIT(offset); - } else if (trigger & IRQ_TYPE_EDGE_FALLING) { + } else if (trigger & IRQ_TYPE_EDGE_RISING) { irq_set_handler_locked(d, handle_edge_irq); mode |= BIT(offset); polarity &= ~BIT(offset); } else { irq_set_handler_locked(d, handle_bad_irq); - pr_warn("GEMINI IRQ: no supported trigger selected for line %d\n", + pr_warn("Faraday IRQ: no supported trigger selected for line %d\n", offset); }