From patchwork Fri Mar 6 19:26:57 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Grygorii.Strashko@linaro.org" X-Patchwork-Id: 5957441 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E86F1BF440 for ; Fri, 6 Mar 2015 19:27:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 24F4D203A1 for ; Fri, 6 Mar 2015 19:27:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D667E20390 for ; Fri, 6 Mar 2015 19:27:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756160AbbCFT1N (ORCPT ); Fri, 6 Mar 2015 14:27:13 -0500 Received: from mail-la0-f46.google.com ([209.85.215.46]:38734 "EHLO mail-la0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755730AbbCFT1J (ORCPT ); Fri, 6 Mar 2015 14:27:09 -0500 Received: by labgf13 with SMTP id gf13so35104556lab.5 for ; Fri, 06 Mar 2015 11:27:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=E3jLQKxKhOgyF0xcdZ1EM/t+kyeYG/8BtaehBrCEs/8=; b=nBcZfXsvUCDYAXo7/J1AYrML/m/HpJ0u2wYZhAYI3tJGOUdf0tjdG8xMcV+cvJg4hc d/VVpbIXOhJ+LpXhjxxpx1co6CBMOxEMuC3Manxb0cTXoMLeEU1JNwWUZmsAm+hwT9P2 OvAQBYSQqoFCzgZzvBEZ93aclC5Qc7wQY5sTfrS4oyLRjHph/dCgN2bHCtFzBFD1usO2 wAwiMIDT2yAlni7kSvk1MCQ2jNIy7g161iawjaRppxV9zinOHp0iuu8pJOYNqbduFGUn Si/tnn8X+POr+a00IibP8xVerTlqS51qyTWd/IGlx63w2ks5Vl/yGoyJDTf5ZueV8LQk P0JQ== X-Gm-Message-State: ALoCoQkhku8kjTNDpFZDHeJvmsHxS5E02I85dV9ujxQ+4LSVPlL0UxFwmArVzh5gL3w8Wnja/jG5 X-Received: by 10.152.182.196 with SMTP id eg4mr14406673lac.70.1425670027981; Fri, 06 Mar 2015 11:27:07 -0800 (PST) Received: from localhost ([195.238.92.128]) by mx.google.com with ESMTPSA id lf3sm1972252lbc.2.2015.03.06.11.27.07 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 06 Mar 2015 11:27:07 -0800 (PST) From: To: Linus Walleij , ssantosh@kernel.org, Javier Martinez Canillas , tony@atomide.com Cc: Alexandre Courbot , linux-omap@vger.kernel.org, linux-gpio@vger.kernel.org, Grygorii Strashko Subject: [RFC/RFT PATCH 2/2] gpio: omap: ensure that runtime pm will disable unused gpio banks Date: Fri, 6 Mar 2015 21:26:57 +0200 Message-Id: <1425670017-19598-2-git-send-email-grygorii.strashko@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1425670017-19598-1-git-send-email-grygorii.strashko@linaro.org> References: <1425670017-19598-1-git-send-email-grygorii.strashko@linaro.org> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Grygorii Strashko Now there are two points related to Runtime PM usage: 1) bank state doesn't need to be checked in places where Rintime PM is used, bacause Runtime PM maintains its own usage counter: if (!BANK_USED(bank)) pm_runtime_get_sync(bank->dev); so, it's safe to drop such checks. 2) There is a call of pm_runtime_get_sync() in omap_gpio_irq_type(), but no corresponding put. As result, GPIO devices could be powered on forever if at least one GPIO was used as IRQ. Hence, allow powering off GPIO banks by adding missed pm_runtime_put(bank->dev) at the end of omap_gpio_irq_type(). Signed-off-by: Grygorii Strashko --- drivers/gpio/gpio-omap.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 2b2fc4b..b1176c5 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -497,8 +497,7 @@ static int omap_gpio_irq_type(struct irq_data *d, unsigned type) unsigned long flags; unsigned offset; - if (!BANK_USED(bank)) - pm_runtime_get_sync(bank->dev); + pm_runtime_get_sync(bank->dev); #ifdef CONFIG_ARCH_OMAP1 if (d->irq > IH_MPUIO_BASE) @@ -530,6 +529,8 @@ static int omap_gpio_irq_type(struct irq_data *d, unsigned type) else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) __irq_set_handler_locked(d->irq, handle_edge_irq); + pm_runtime_put(bank->dev); + return retval; } @@ -680,8 +681,7 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset) * If this is the first gpio_request for the bank, * enable the bank module. */ - if (!BANK_USED(bank)) - pm_runtime_get_sync(bank->dev); + pm_runtime_get_sync(bank->dev); spin_lock_irqsave(&bank->lock, flags); /* Set trigger to none. You need to enable the desired trigger with @@ -713,8 +713,7 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset) * If this is the last gpio to be freed in the bank, * disable the bank module. */ - if (!BANK_USED(bank)) - pm_runtime_put(bank->dev); + pm_runtime_put(bank->dev); } /* @@ -807,8 +806,7 @@ static unsigned int omap_gpio_irq_startup(struct irq_data *d) unsigned long flags; unsigned offset = GPIO_INDEX(bank, gpio); - if (!BANK_USED(bank)) - pm_runtime_get_sync(bank->dev); + pm_runtime_get_sync(bank->dev); spin_lock_irqsave(&bank->lock, flags); omap_gpio_init_irq(bank, gpio, offset); @@ -835,8 +833,7 @@ static void omap_gpio_irq_shutdown(struct irq_data *d) * If this is the last IRQ to be freed in the bank, * disable the bank module. */ - if (!BANK_USED(bank)) - pm_runtime_put(bank->dev); + pm_runtime_put(bank->dev); } static void omap_gpio_ack_irq(struct irq_data *d)