From patchwork Mon Mar 25 09:33:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 2329561 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork2.kernel.org (Postfix) with ESMTP id C0AC1DF24C for ; Mon, 25 Mar 2013 09:36:42 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1UK3mX-0006q8-Ei; Mon, 25 Mar 2013 09:33:33 +0000 Received: from moutng.kundenserver.de ([212.227.17.10]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1UK3mT-0006oO-Td for linux-arm-kernel@lists.infradead.org; Mon, 25 Mar 2013 09:33:30 +0000 Received: from klappe2.localnet (HSI-KBW-46-223-90-92.hsi.kabel-badenwuerttemberg.de [46.223.90.92]) by mrelayeu.kundenserver.de (node=mreu1) with ESMTP (Nemesis) id 0Lm8JB-1UtfVn0sAz-00ZM1Z; Mon, 25 Mar 2013 10:33:18 +0100 From: Arnd Bergmann To: Barry Song <21cnbao@gmail.com> Subject: Re: [PATCH 1/8] pinctrl: sirf: convert to linear irq domain Date: Mon, 25 Mar 2013 09:33:16 +0000 User-Agent: KMail/1.12.2 (Linux/3.8.0-13-generic; KDE/4.3.2; x86_64; ; ) References: <1363779679-16880-1-git-send-email-arnd@arndb.de> <1363779679-16880-2-git-send-email-arnd@arndb.de> In-Reply-To: MIME-Version: 1.0 Message-Id: <201303250933.16921.arnd@arndb.de> X-Provags-ID: V02:K0:LesJLdhj+7SdyKDXBWx2xSAp2EB9VyLE4evvaPfO9PR CaGcmRPrFzloVcMllcP2RIy18b48foCjWFyqGkdNiNMKqJRMu9 u5GiWHv3yD+pCtuJ1p1V/spvdIu2MQ+5EjQfz7k+Do1i48mEB5 RJFjtzyRgsZ6fP/3aR3YwagOqsk+N1nEVs87yMZb6tt4+1WopS Q6TPVzzVSe5DVqsvL4oVSy34yIvs81ZedT3JL7YiwMNlBpD0SC ydx+h8+7w/mnuOyDvYAZddoq4fj6bnU2y2P8Hfj7TQYfxbMRzT avUDEPCntRE71aBeZ5Mhslw5wRNcdpV6x1ttj5C+HZuOoYYL5V dAViVtOoa8He+paygq2c= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130325_053330_211881_62BDEC9C X-CRM114-Status: GOOD ( 12.21 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [212.227.17.10 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: olof@lixom.net, Linus Walleij , linux-arm-kernel@lists.infradead.org, workgroup.linux@csr.com X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org On Monday 25 March 2013, Barry Song wrote: > > @@ -1770,9 +1767,8 @@ static int sirfsoc_gpio_probe(struct device_node *np) > > goto out; > > } > > > > - bank->domain = irq_domain_add_legacy(np, SIRFSOC_GPIO_BANK_SIZE, > > - SIRFSOC_GPIO_IRQ_START + i * SIRFSOC_GPIO_BANK_SIZE, 0, > > - &sirfsoc_gpio_irq_simple_ops, bank); > > + bank->domain = irq_domain_add_linear(np, SIRFSOC_GPIO_BANK_SIZE, > > + &sirfsoc_gpio_irq_simple_ops, bank); > > this line breaks the gpio/irq mapping and gpio irq_domain: > > printk("%s gpio_to_irq: %d %d %d\n", __func__, > gpio_to_irq(0), gpio_to_irq(32), gpio_to_irq(65)); > > result: > sdhci_sirf_probe gpio_to_irq: 0 0 0 > > for the old codes, it works: > sdhci_sirf_probe gpio_to_irq: 128 160 193 Does it work if you add the hunk below? I think the problem is that with irq_domain_add_linear, we don't create a mapping for all the interrupts right away. Arnd diff --git a/drivers/pinctrl/pinctrl-sirf.c b/drivers/pinctrl/pinctrl-sirf.c index d02498b..5f031ca 100644 --- a/drivers/pinctrl/pinctrl-sirf.c +++ b/drivers/pinctrl/pinctrl-sirf.c @@ -1347,7 +1347,7 @@ static inline int sirfsoc_gpio_to_irq(struct gpio_chip *chip, unsigned offset) struct sirfsoc_gpio_bank *bank = container_of(to_of_mm_gpio_chip(chip), struct sirfsoc_gpio_bank, chip); - return irq_find_mapping(bank->domain, offset); + return irq_create_mapping(bank->domain, offset); } static inline int sirfsoc_gpio_to_offset(unsigned int gpio)