From patchwork Sun Apr 14 01:35:44 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 2441511 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) by patchwork1.kernel.org (Postfix) with ESMTP id A35513FC71 for ; Sun, 14 Apr 2013 01:36:48 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1URBry-0006Wu-DW; Sun, 14 Apr 2013 01:36:38 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1URBrv-0001vC-Sq; Sun, 14 Apr 2013 01:36:35 +0000 Received: from mail-ia0-x230.google.com ([2607:f8b0:4001:c02::230]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1URBrm-0001uc-6E for linux-arm-kernel@lists.infradead.org; Sun, 14 Apr 2013 01:36:27 +0000 Received: by mail-ia0-f176.google.com with SMTP id i9so1120562iad.35 for ; Sat, 13 Apr 2013 18:36:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=D6Az+leWu1r0ZF1OvYt1BJtccBY75iUqlx7AyWlGWEg=; b=KlPTz7ReEU/RODvTKFPNSSC0rW6XqZyOmHYiZeoQXn18W4KOSGTpw9KxGcP1b+8nny /tigWkJToHRWO4hwoZgNibiK0v9Yv9JPY2cXzIg8LmBLOA7TF4DAFAHBaxxeTXd4yLZg Gb6Gm1cYbDYdV8K4HjGOp1NyO/LL3W0meeh1gCJNqv+dmAWS7z6LdH2K5mKIY8wSCHRx iejach9mSZprBNa2CGEpTG1Oe2goy4NcOTOK9mXp1uOn+/a4dmJfTsY6XdWojJSvhWzL ucZcc8UfUfiEryMBzxszsrysJA8toMJyKNy4LXhXV+4tqKyDBWxJ48cCO0gZZnIK15Ua U/vA== X-Received: by 10.50.45.230 with SMTP id q6mr2489087igm.39.1365903364888; Sat, 13 Apr 2013 18:36:04 -0700 (PDT) MIME-Version: 1.0 Received: by 10.64.71.2 with HTTP; Sat, 13 Apr 2013 18:35:44 -0700 (PDT) In-Reply-To: <51673D70.3010503@wwwdotorg.org> References: <1329321854-24490-1-git-send-email-b-cousson@ti.com> <4F47AD08.4030504@ti.com> <512D39DA.7020306@ti.com> <512D3AB1.1080202@wwwdotorg.org> <512D3EC2.6050408@ti.com> <20130302200524.D230F3E1571@localhost> <51391F41.5000303@ti.com> <514C79E1.4090106@wwwdotorg.org> <514CE0AB.6060207@ti.com> <515319D5.20105@wwwdotorg.org> <5155C902.7080207@wwwdotorg.org> <5165CB9D.1090202@wwwdotorg.org> <51671D7B.5060303@wwwdotorg.org> <51673D70.3010503@wwwdotorg.org> From: Javier Martinez Canillas Date: Sun, 14 Apr 2013 03:35:44 +0200 Message-ID: Subject: Re: [PATCH 3/5] gpio/omap: Add DT support to GPIO driver To: Stephen Warren X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130413_213626_324646_0AB26874 X-CRM114-Status: GOOD ( 27.32 ) X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (martinez.javier[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature Cc: Stephen Warren , Kevin Hilman , Linus Walleij , Tarun Kanti DebBarma , Grant Likely , Alexandre Courbot , Jon Hunter , "linux-omap@vger.kernel.org" , "devicetree-discuss@lists.ozlabs.org" , "linux-arm-kernel@lists.infradead.org" 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 Fri, Apr 12, 2013 at 12:47 AM, Stephen Warren wrote: > On 04/11/2013 04:16 PM, Linus Walleij wrote: >> On Thu, Apr 11, 2013 at 10:30 PM, Stephen Warren wrote: >>> On 04/10/2013 03:28 PM, Linus Walleij wrote: >> >>>> So the only reason I'm rambing on about this is that it breaks the >>> >>> I'm not sure I understand this paragraph; what is "it" in the line above. >>> >>> If "it" is this patch, then should "breaks" be re-establishes? >> >> No I'm replying to Javier Martinez Canillas mail in this thread: >> http://marc.info/?l=linux-arm-kernel&m=136334655902407&w=2 >> which is stating a question to grand, and contains the below >> hunk: >> >>> +static int gpio_irq_request(struct irq_data *d) >>> +{ >>> + struct gpio_bank *bank = irq_data_get_irq_chip_data(d); >>> + >>> + return gpio_request(irq_to_gpio(bank, d->irq), "gpio-irq"); >>> +} >> >> irq_to_gpio(). Notice that. not my_funny_driver_irq_to_gpio(). > > OK, right. sorry for being so confused/confusing. > > Yes, that code should certainly call e.g. omap_gpio__irq_to_gpio() not > irq_to_gpio(). Probably gpio_irq_request() wants renaming to something > more like omap_gpio__irq_request() too, so the names don't look like > they'd clash with global functions. (__ added for clarity but probably > only one _ at a time) Stephen, Linus, Is the following inlined patch [1] what you were thinking that would be the right approach? With this patch an explicit call to call gpio_request() before a call to chip->irq_set_type() is needed. I've tested both with DT and without DT where a explicit call to gpio_request() is made and it works in both cases. So it shouldn't have a functional change for non-DT cases as far as I know. If you agree with [1] then I'll split in two patches (one that adds the irq_request function pointer to irq_chip and another one that adds the implementation for gpio-omap) and send as a patch-set. I just thought that it would be easier for you if I posted here an inlined patch so you could have context. Thanks a lot for your feedback and best regards, Javier [1] diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 685e850..e035e64 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -811,6 +811,13 @@ static void gpio_unmask_irq(struct irq_data *d) spin_unlock_irqrestore(&bank->lock, flags); } +static int omap_gpio_irq_request(struct irq_data *d) +{ + struct gpio_bank *bank = irq_data_get_irq_chip_data(d); + + return omap_gpio_request(&bank->chip, d->hwirq); +} + static struct irq_chip gpio_irq_chip = { .name = "GPIO", .irq_shutdown = gpio_irq_shutdown, @@ -819,6 +826,7 @@ static struct irq_chip gpio_irq_chip = { .irq_unmask = gpio_unmask_irq, .irq_set_type = gpio_irq_type, .irq_set_wake = gpio_wake_enable, + .irq_request = omap_gpio_irq_request, }; /*---------------------------------------------------------------------*/ @@ -1028,6 +1036,7 @@ omap_mpuio_alloc_gc(struct gpio_bank *bank, unsigned int irq_start, ct->chip.irq_mask = irq_gc_mask_set_bit; ct->chip.irq_unmask = irq_gc_mask_clr_bit; ct->chip.irq_set_type = gpio_irq_type; + ct->chip.irq_request = omap_gpio_irq_request; if (bank->regs->wkup_en) ct->chip.irq_set_wake = gpio_wake_enable, diff --git a/include/linux/irq.h b/include/linux/irq.h index 0e8e3a6..85596cc 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -303,6 +303,7 @@ struct irq_chip { void (*irq_shutdown)(struct irq_data *data); void (*irq_enable)(struct irq_data *data); void (*irq_disable)(struct irq_data *data); + int (*irq_request)(struct irq_data *data); void (*irq_ack)(struct irq_data *data); void (*irq_mask)(struct irq_data *data); diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index fa17855..a4bd4f7 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -588,6 +588,12 @@ int __irq_set_trigger(struct irq_desc *desc, unsigned int irq, unmask = 1; } + if (chip->irq_request) { + ret = chip->irq_request(&desc->irq_data); + if (ret) + return ret; + } + /* caller masked out all except trigger mode flags */ ret = chip->irq_set_type(&desc->irq_data, flags);