From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965920AbdIZCTo (ORCPT ); Mon, 25 Sep 2017 22:19:44 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:31307 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934681AbdIZCTm (ORCPT ); Mon, 25 Sep 2017 22:19:42 -0400 X-AuditID: b6c32a38-d89ff70000001124-ad-59c9b93bdd16 MIME-version: 1.0 Content-transfer-encoding: 8BIT Content-type: text/plain; charset="UTF-8" Message-id: <59C9B93D.2080109@samsung.com> Date: Tue, 26 Sep 2017 11:19:41 +0900 From: Chanwoo Choi Organization: Samsung Electronics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Linus Walleij , MyungJoo Ham Cc: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, John Stultz , Guenter Roeck Subject: Re: [PATCH 5/8] extcon: gpio: Request reasonable interrupts In-reply-to: <20170924145622.4031-6-linus.walleij@linaro.org> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrPKsWRmVeSWpSXmKPExsWy7bCmvq71zpORBgsOGFic+a1rMeXPciaL zfP/MFpc3jWHzeLJwjNMFrcbV7A5sHncubaHzWPn9wZ2j74tqxg9Pm+SC2CJSrXJSE1MSS1S SM1Lzk/JzEu3VfIOjneONzUzMNQ1tLQwV1LIS8xNtVVy8QnQdcvMAdqtpFCWmFMKFApILC5W 0rezKcovLUlVyMgvLrFVijY0NNIzNDDXMzIy0jMxjrUyMgUqSUjN+NNyhKVghmzFklUTmBoY P4p1MXJySAiYSPTen8HSxcjFISSwg1Fi2qedjCAJIYHvjBLdm0Vgip53rGGHKNrNKLH6wi12 kASvgKDEj8n3gLo5OJgF5CWOXMoGCTMLaEps3b0eqv4eo8SGeR2MEPVaEk96H4D1sgioSlx+ /RYszgYU3//iBhuIzS+gKHH1x2OwuKhAhMTO+d/A6kUEwiX2HTvADDKUWaCDUeLNDoiEsICL xJvZN1lBbE4BW4lH39oYQYokBA6wSZy6fYwN4gUXidcT2lkhbGGJV8e3sINcLSEgLXHpqC1E fTujxOY591ggHKAN91c2QjUYS5zqamSC+I1P4t3XHlaIZl6JjjYhCNNDYuJfaYhqR4lHb5ex Q0LxMKPEuw7WCYxys5DCaxYivGYhhdcCRuZVjGKpBcW56anFhgUmesWJucWleel6yfm5mxjB iU3LYgfjnnM+hxgFOBiVeHgbmE5GCrEmlhVX5h5ilOBgVhLhvb4dKMSbklhZlVqUH19UmpNa fIjRFBjcE5mlRJPzgUk3ryTe0MTSwMTMCJi6LA0NlcR5RddfixASSE8sSc1OTS1ILYLpY+Lg lGpglN3mGsfrFbt+6+75LDe3PRdWqrqRLzX7ioFI2N8LOtq2IS+cZzKvW9HwL4lB9erDBbOs HdWN96hFGs8OZFB+luBWnVn7wHuhW1QQxw8dXd0vn9eZZm/SuhwysWu5QnTn/K9zhQJMy9/I G+1jv7yaYdPq6rXNMzPk5ob8vqV5O7L8gp/1M3ZHJZbijERDLeai4kQAynvLyYIDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrMLMWRmVeSWpSXmKPExsVy+t9jAV3rnScjDXbOUrY481vXYsqf5UwW m+f/YbS4vGsOm8WThWeYLG43rmBzYPO4c20Pm8fO7w3sHn1bVjF6fN4kF8ASxWWTkpqTWZZa pG+XwJXxp+UIS8EM2YolqyYwNTB+FOti5OSQEDCReN6xhr2LkYtDSGAno8T2n7/YQBK8AoIS PybfY+li5OBgFpCXOHIpGyTMLKAuMWneImaI+geMEs/XfmWFqNeSeNL7gB3EZhFQlbj8+i0j iM0GFN//4gbYTH4BRYmrPx4zgswUFYiQ6D5RCRIWEQiXmL3gPTPE/A5GicmbNUFsYQEXiTez b7JC7DrMKPH353GwXZwCthKPvrUxTmAUmIXk1FkIp85CcuoCRuZVjJKpBcW56bnFRgWGeanl esWJucWleel6yfm5mxiBQb3tsFbfDsb7S+IPMQpwMCrx8DYwnYwUYk0sK67MPcQowcGsJMJ7 fTtQiDclsbIqtSg/vqg0J7X4EKM0B4uSOO/tvGORQgLpiSWp2ampBalFMFkmDk6pBsblp853 ui1ZcqtAJ0P91P6ekjvCR56Gi/Bz7EoI7VxcluUlu6d247yXDUp/GRcvu+awq67vT2bdDUfX Ct31hdNE0hVurHto+0NC1vj0t5QoRiXOVNamEzbcE1hWcniteN0WFMOQp1KUqZ603Sfm6vs/ n+ef97use2O39Gv9d+azL1/4utzJIEyJpTgj0VCLuag4EQAssAG9ZgIAAA== X-CMS-MailID: 20170926021939epcas1p12e593c580db6d38b1d672d5bd67ae59a X-Msg-Generator: CA X-Sender-IP: 182.195.42.142 X-Local-Sender: =?UTF-8?B?7LWc7LCs7JqwG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbU2VuaW9yIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?Q2hhbndvbyBDaG9pG1RpemVuIFBsYXRmb3JtIExhYi4bU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtTZW5pb3IgRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1RFTEUbQzEwVjgxMTE=?= CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20170924150052epcas2p1d9069ef18771b6aceba7e1361d47a65e X-RootMTR: 20170924150052epcas2p1d9069ef18771b6aceba7e1361d47a65e References: <20170924145622.4031-1-linus.walleij@linaro.org> <20170924145622.4031-6-linus.walleij@linaro.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Linus, On 2017년 09월 24일 23:56, Linus Walleij wrote: > The only thing that makes sense is to request a falling edge interrupt > if the line is active low and a rising edge interrupt if the line is > active high, so just do that and get rid of the assignment from > platform data. The GPIO descriptor knows if the line is active high > or low. > > Also make irq a local variable in probe(), it's not used anywhere else. > > Signed-off-by: Linus Walleij > --- > drivers/extcon/extcon-gpio.c | 29 +++++++++++++++++++---------- > 1 file changed, 19 insertions(+), 10 deletions(-) Looks good to me. Acked-by: Chanwoo Choi > > diff --git a/drivers/extcon/extcon-gpio.c b/drivers/extcon/extcon-gpio.c > index 86f3ec6d6014..6d9cb4ed11c2 100644 > --- a/drivers/extcon/extcon-gpio.c > +++ b/drivers/extcon/extcon-gpio.c > @@ -30,26 +30,22 @@ > /** > * struct gpio_extcon_data - A simple GPIO-controlled extcon device state container. > * @edev: Extcon device. > - * @irq: Interrupt line for the external connector. > * @work: Work fired by the interrupt. > * @debounce_jiffies: Number of jiffies to wait for the GPIO to stabilize, from the debounce > * value. > * @gpiod: GPIO descriptor for this external connector. > * @extcon_id: The unique id of specific external connector. > * @debounce: Debounce time for GPIO IRQ in ms. > - * @irq_flags: IRQ Flags (e.g., IRQF_TRIGGER_LOW). > * @check_on_resume: Boolean describing whether to check the state of gpio > * while resuming from sleep. > */ > struct gpio_extcon_data { > struct extcon_dev *edev; > - int irq; > struct delayed_work work; > unsigned long debounce_jiffies; > struct gpio_desc *gpiod; > unsigned int extcon_id; > unsigned long debounce; > - unsigned long irq_flags; > bool check_on_resume; > }; > > @@ -77,21 +73,34 @@ static int gpio_extcon_probe(struct platform_device *pdev) > { > struct gpio_extcon_data *data; > struct device *dev = &pdev->dev; > + unsigned long irq_flags; > + int irq; > int ret; > > data = devm_kzalloc(dev, sizeof(struct gpio_extcon_data), GFP_KERNEL); > if (!data) > return -ENOMEM; > > - if (!data->irq_flags || data->extcon_id > EXTCON_NONE) > + if (data->extcon_id > EXTCON_NONE) > return -EINVAL; > > data->gpiod = devm_gpiod_get(dev, "extcon", GPIOD_IN); > if (IS_ERR(data->gpiod)) > return PTR_ERR(data->gpiod); > - data->irq = gpiod_to_irq(data->gpiod); > - if (data->irq <= 0) > - return data->irq; > + irq = gpiod_to_irq(data->gpiod); > + if (irq <= 0) > + return irq; > + > + /* > + * It is unlikely that this is an acknowledged interrupt that goes > + * away after handling, what we are looking for are falling edges > + * if the signal is active low, and rising edges if the signal is > + * active high. > + */ > + if (gpiod_is_active_low(data->gpiod)) > + irq_flags = IRQF_TRIGGER_FALLING; > + else > + irq_flags = IRQF_TRIGGER_RISING; > > /* Allocate the memory of extcon devie and register extcon device */ > data->edev = devm_extcon_dev_allocate(dev, &data->extcon_id); > @@ -110,8 +119,8 @@ static int gpio_extcon_probe(struct platform_device *pdev) > * Request the interrupt of gpio to detect whether external connector > * is attached or detached. > */ > - ret = devm_request_any_context_irq(dev, data->irq, > - gpio_irq_handler, data->irq_flags, > + ret = devm_request_any_context_irq(dev, irq, > + gpio_irq_handler, irq_flags, > pdev->name, data); > if (ret < 0) > return ret; > -- Best Regards, Chanwoo Choi Samsung Electronics