From patchwork Thu Nov 17 01:18:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Torokhov X-Patchwork-Id: 9433345 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 06E796021C for ; Thu, 17 Nov 2016 01:18:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E79D2290E8 for ; Thu, 17 Nov 2016 01:18:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D9679291C4; Thu, 17 Nov 2016 01:18:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E0F9290E8 for ; Thu, 17 Nov 2016 01:18:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752694AbcKQBSl (ORCPT ); Wed, 16 Nov 2016 20:18:41 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:36737 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752679AbcKQBSk (ORCPT ); Wed, 16 Nov 2016 20:18:40 -0500 Received: by mail-pg0-f66.google.com with SMTP id x23so16061746pgx.3; Wed, 16 Nov 2016 17:18:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=+l0bcXWWti00XXB7KyiC+rL+pCHLK1FISd9S1YmJqEM=; b=OzJ+jax3WPUX+StP6/tALfkMtdGQBeQz0kNSQZYZsT7TUjE50jwtlm3pk0l1BHIoPw wpjZ0a8jp+DYSD/Urm2Jk/vxZ4VO0DmQAc3vqktxi7+XuCsRNnmFxUgPIDJ4eectOdEw eS5EKVDJPCdaAVWGaePwQ8ku2fGlDUfCvtFCzfpjyYPq+ireKS3ezAEnbIvnc2a+PnTN 7zm91M/ZaHJPfI13qx5Olsclj5gMmVxpV5Tdz/YpMXaKmcQMWX/I2r4Oms81wd3n6e6Q Uj6Nu6wpZ1dUGnQJARwStep9KmfJ84lqjGPEDmSqF7Ro8Jmn8KSR95TWjD9uq+sSsCku frGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=+l0bcXWWti00XXB7KyiC+rL+pCHLK1FISd9S1YmJqEM=; b=RdIIxgWltxwJal9uyGB9YFZTT9VvRVZ6XsVcOglhdjxYpXmvrz2VHXnMfUbv8OW5YO I9T6EaVpb1o07lNQ3jYoofgMyDv32TdVRsrND0GyAEkLzdgzYIVIQwVLfMGfcsYCgLaT DKaK4cyHzvrxNHYEH6N3a8uJ/6PBFffZ7vjQaSug6xxXTWYUyrTOigmrgvxsSEpQ5TE0 mCRWOKIPuer7JzItvOtFanerDlfRXWOfZknylak5rLv2f1zweIOxaESPWOMvcP7CfBef xBVQo1RzPY/PVqAuZJxCkoRltiYPiGBWYjIL8EewOmKaOZpII10/S3FGmmMtrwuz+Zm7 HkVA== X-Gm-Message-State: ABUngvfLbc7BpdNNly6Quexut8GVRDfQTtGW+zUM5TQuRyuc1kcRdMNs84vnEoTdHeP0mQ== X-Received: by 10.99.164.9 with SMTP id c9mr1248810pgf.141.1479345519645; Wed, 16 Nov 2016 17:18:39 -0800 (PST) Received: from dtor-ws ([2620:0:1000:1311:3cd2:f2c4:6a77:ec7e]) by smtp.gmail.com with ESMTPSA id j68sm547231pfk.95.2016.11.16.17.18.38 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Wed, 16 Nov 2016 17:18:38 -0800 (PST) Date: Wed, 16 Nov 2016 17:18:36 -0800 From: Dmitry Torokhov To: Sudeep Holla Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Linus Walleij , Geert Uytterhoeven , Mika Westerberg Subject: Re: [PATCH v3 -next] Input: gpio_keys: set input direction explicitly for gpio keys Message-ID: <20161117011836.GB8133@dtor-ws> References: <1479303734-16198-1-git-send-email-sudeep.holla@arm.com> <1479321502-22265-1-git-send-email-sudeep.holla@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1479321502-22265-1-git-send-email-sudeep.holla@arm.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Wed, Nov 16, 2016 at 06:38:22PM +0000, Sudeep Holla wrote: > Commit 700a38b27eef ("Input: gpio_keys - switch to using generic device > properties") switched to use generic device properties for GPIO keys and > commit 5feeca3c1e39 ("Input: gpio_keys - add support for GPIO descriptors") > switched from legacy GPIO numbers to GPIO descriptors. > > Previously devm_gpio_request_one was explicitly passed GPIOF_DIR_IN flag > to set the GPIO direction as input. However devm_get_gpiod_from_child > doesn't have such provisions and hence fwnode_get_named_gpiod can't set > it as input. > > This breaks few platforms with the following error: > " gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ > unable to lock HW IRQ for IRQ > genirq: Failed to request resources for POWER (irq ) on irqchip > gpio_keys: Unable to claim irq ; error -22 > gpio-keys: probe failed with error -22 " > > This patch fixes the issue by setting input direction explicitly for > gpio input keys. It also remove the existing GPIOF_DIR_IN flag setting > for the legacy gpios and merges into single gpiod_direction_input call. > > Fixes: 700a38b27eef ("Input: gpio_keys - switch to using generic device properties") > Cc: Dmitry Torokhov > Cc: Linus Walleij > Cc: Geert Uytterhoeven > Cc: Mika Westerberg > Signed-off-by: Sudeep Holla > --- > drivers/input/keyboard/gpio_keys.c | 10 +++++++++- > drivers/input/keyboard/gpio_keys_polled.c | 10 +++++++++- > 2 files changed, 18 insertions(+), 2 deletions(-) > > v2->v3: > - Added error handling and error message > > diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c > index 5576f2ae0b71..ed38a05b3039 100644 > --- a/drivers/input/keyboard/gpio_keys.c > +++ b/drivers/input/keyboard/gpio_keys.c > @@ -502,7 +502,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev, > * Legacy GPIO number, so request the GPIO here and > * convert it to descriptor. > */ > - unsigned flags = GPIOF_IN; > + unsigned flags = 0; > > if (button->active_low) > flags |= GPIOF_ACTIVE_LOW; Sudeep, I looked into this aa bit deeper, and I have issue with this part: in absence of GPIOF_IN devm_gpio_request_one() will attempt to configure GPIO line as output, which may not work. Because of this I think we should move gpiod_direction_input() call into the "modern" branch and leave legacy branch as is. Does the version below work for you? Thanks! diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index 5576f2a..582462d 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -496,6 +496,13 @@ static int gpio_keys_setup_key(struct platform_device *pdev, error); return error; } + } else { + error = gpiod_direction_input(bdata->gpiod); + if (error) { + dev_err(dev, "Failed to configure GPIO %d as input: %d\n", + desc_to_gpio(bdata->gpiod), error); + return error; + } } } else if (gpio_is_valid(button->gpio)) { /* diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c index 72b3503..bed4f20 100644 --- a/drivers/input/keyboard/gpio_keys_polled.c +++ b/drivers/input/keyboard/gpio_keys_polled.c @@ -314,6 +314,14 @@ static int gpio_keys_polled_probe(struct platform_device *pdev) fwnode_handle_put(child); return error; } + + error = gpiod_direction_input(bdata->gpiod); + if (error) { + dev_err(dev, "Failed to configure GPIO %d as input: %d\n", + desc_to_gpio(bdata->gpiod), error); + fwnode_handle_put(child); + return error; + } } else if (gpio_is_valid(button->gpio)) { /* * Legacy GPIO number so request the GPIO here and