Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754967AbcDDLIR (ORCPT ); Mon, 4 Apr 2016 07:08:17 -0400 Received: from mail-ob0-f180.google.com ([209.85.214.180]:34075 "EHLO mail-ob0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753125AbcDDLIP (ORCPT ); Mon, 4 Apr 2016 07:08:15 -0400 MIME-Version: 1.0 In-Reply-To: <1459763770-2296-1-git-send-email-navam@xilinx.com> References: <1459763770-2296-1-git-send-email-navam@xilinx.com> Date: Mon, 4 Apr 2016 13:08:15 +0200 Message-ID: Subject: Re: [LINUX PATCH v2] gpio_keys: Added support to read the IRQ_FLAGS from devicetree From: Linus Walleij To: Nava kishore Manne Cc: Dmitry Torokhov , =?UTF-8?Q?Andersson=2C_Bj=C3=B6rn?= , navam@xilinx.com, Peng Fan , Linux Input , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2127 Lines: 63 On Mon, Apr 4, 2016 at 11:56 AM, Nava kishore Manne wrote: > This patch adds the support to read the IRQ_FLAGS from the device > instead of hard code the flags in gpio_keys_setup_key(). NACK > sw14 { > label = "sw14"; > gpios = <&gpio0 12 1>; > /* > * Triggering Type: > * > * 1 - edge rising > * 2 - edge falling > * 4 - level active high > * 8 - level active low > * > */ You are completely violating the existing GPIO flags from include/dt-bindings/gpio/gpio.h As you will see, for a twocell GPIO flags are already clearly defined for 0,1,2 and 3. (Bit 0 & 1). Further, these IRQ edge/level flags already exist in include/dt-bindings/interrupt-controller/irq.h but you should not be using those either, because they do not mix with a GPIO specifier, it's a bit like oil and water. The standard GPIO bindings already has GPIO_ACTIVE_HIGH and GPIO_ACTIVE_LOW which makes it pretty clear that a GPIO line marked as GPIO_ACTIVE_HIGH should trigger either on rising edge or level active high and vice versa. The only information you could *possibly* lack is whether the IRQ should be edge or level triggered. But level triggered GPIO buttons *does* *not* *make* *sense* *at* *all*. Think about it: The IRQ line goes level high or low because a user pressed a button with his/her thumb. Then that is wired in as a level IRQ. So what are we going to do? Wait in the interrupt handler until the user removes his/her thumb? Level IRQs on GPIOs only makes sense for devices off-chip where you can talk to the device and ACK the interrupt, and in this case "talk" does not mean wire up a speaker telling the user to remove the thumb from the button because we have recieved the interrupt, albeit that would be the real-world analogy. Please tell us what you are actually trying to solve. Yours, Linus Walleij