Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3722191imm; Tue, 17 Jul 2018 09:14:09 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfQnOakZBfuQriRnTwiLvDnQTw2x64ZXaDg+6mzEF0HwgFrjQ/Az9mnbRBBhY9gMbr01tlY X-Received: by 2002:a65:62d8:: with SMTP id m24-v6mr2211729pgv.307.1531844049649; Tue, 17 Jul 2018 09:14:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531844049; cv=none; d=google.com; s=arc-20160816; b=QdmAWrpn5OCkm8dMeBT0waea0CS7XJ/RKgxzMENV1oLQmkmiaZYxdaDylgvZMCmg3h 1ofvxxkjZTxcNaaunAi/AkSh2APWRagf61VLmoBPF20QICoq2GSQcnGte1AR060c+OLC IaPMyPalOSLFenbYtTLbot10Dzt0HFg/AS9Th0Tye8UoauKx8BIuEW4yFBpOH6ILuOML bvntLNORzUXYagwVnkuE5N8LfbIViFe6m5ubNC2f6g3/9XxwCjUOlixB9vvhACwEfdeB /Q0DbSlqfPZMnpSYaVIWLE25aM73Mc0rB4e2fvsX02DKOmt2UIncnu1tXLZhWqwH5Gco 4dPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=KnG5C/UX75bKySjpKhm1+nD3w7q4ygAjbkqdm8WfYzA=; b=JKdLLCplZmPcuO21DYEJSC22Njb5zRmZMZI/6bz9o8LxLuY4jXW14E5RKcN9Bf5EFZ r5j+W/n/I509W+sVoQS+2L6a+SI1Y27xhPR6WEWpNohsBSXA/Coji6P5WUJCggcX9msu KpNl2ceVxVRc2HLheTRLL42Tq3LQUSOVCae4i+aKhQgjtZsFobZZw0yW0PeTBN5BLVHS I1PPy1wN5HAuXArjgbZDKaeYYwsNgSQ0kpUP8ZKq1hibuBc3KEnq+ivxYn9CnRCvHAV+ MHx43aGx8I04eFU0y1WpbVLbADrX90JBh95Yhqtd4Sl3k2q992K1Cm7WJ3GM1meERP1H Nj/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Ied9QGRi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u1-v6si1281708pga.71.2018.07.17.09.13.54; Tue, 17 Jul 2018 09:14:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Ied9QGRi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730054AbeGQQqE (ORCPT + 99 others); Tue, 17 Jul 2018 12:46:04 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:43081 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729508AbeGQQqD (ORCPT ); Tue, 17 Jul 2018 12:46:03 -0400 Received: by mail-lf0-f67.google.com with SMTP id m12-v6so1251432lfc.10; Tue, 17 Jul 2018 09:12:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=KnG5C/UX75bKySjpKhm1+nD3w7q4ygAjbkqdm8WfYzA=; b=Ied9QGRi9AB/X8s644eDDawMtdkYXZd+y657fpq4OH3LVTV13ANJ+Lzdn3j25Bd/hV vJ8EEIjSZqLRcgoMjy5v8CT5pWFoTPGRLfAjDDCEBsqLmwmVNcMsL6zETm+ix5urlwpd uMY6mPvVsoplfnx4+CwLPUOxwIpVvhZeffsKWPHYZnxUTB0gZ7gmmBp80Nr5AvET8LQG Sbkbfqwb04iAhW3nHufdP+dNL+MWLEJNBRDbB2mGthMRMvx8TEWrAy+1CetJp7nEL/yB XWMpSwH1USfWf1JqQHLPmdgQ4+77UH/AaTs0P/7sMWT60XFrRPBOzZ7cYOB604s+quwW EUjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=KnG5C/UX75bKySjpKhm1+nD3w7q4ygAjbkqdm8WfYzA=; b=OHQMjDpPXdwEkLRcZnPAKolDU5r6YTW2S+ZtTngbrgNk/bexVU6iKB2lC4zInxX/Hv 62bBt+HecBT5cS2Yxnp9lrXQHBxgeexJB26k0Xnijpy4FcIpEacA55of7kqaZwBaOtVz C3NRLQBQdek8hhMom+OZ8XiQJNeu5TqpJ5ji1uGV535hxnPOLcj9b8Uoa0VhXlSHU3F1 WYIIquqrS+lUnoQ2TXoNtFQV/1ctU6mm2C1jCuealTH9JgBXp/P+wIT/nQOvgVk9u+Tn zBvBnXuWNnT5z3xauS3DMkgHx4jZsfPt6PEqXXkzOynFXJYAScuzujfbZfIyVlBZr2MA pEDg== X-Gm-Message-State: AOUpUlGnbZW9XHqhzJP7qKxIfPJj8xan2LW8l/X3fcPKQrM1TWK9OHW6 Nuw2M/7Bm4W+o6AM3kQySns= X-Received: by 2002:a19:6902:: with SMTP id e2-v6mr1627426lfc.70.1531843958593; Tue, 17 Jul 2018 09:12:38 -0700 (PDT) Received: from localhost.localdomain (109-252-91-91.nat.spd-mgts.ru. [109.252.91.91]) by smtp.gmail.com with ESMTPSA id t2-v6sm226202ljj.46.2018.07.17.09.12.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Jul 2018 09:12:37 -0700 (PDT) From: Dmitry Osipenko To: Linus Walleij , Thierry Reding , Jonathan Hunter Cc: linux-tegra@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] gpio: tegra: Fix tegra_gpio_irq_set_type() Date: Tue, 17 Jul 2018 19:10:38 +0300 Message-Id: <20180717161038.21500-1-digetx@gmail.com> X-Mailer: git-send-email 2.18.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 36b312792b97 ("gpiolib: Respect error code of ->get_direction()") broke tegra_gpio_irq_set_type() because requesting of GPIO direction must be done after enabling GPIO function for a pin. This patch fixes drivers probe failure like this: gpio gpiochip0: (tegra-gpio): gpiochip_lock_as_irq: cannot get GPIO direction tegra-gpio 6000d000.gpio: unable to lock Tegra GPIO 144 as IRQ Fixes: 36b312792b97 ("gpiolib: Respect error code of ->get_direction()") Signed-off-by: Dmitry Osipenko --- drivers/gpio/gpio-tegra.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c index 94396caaca75..22e7c99ed69e 100644 --- a/drivers/gpio/gpio-tegra.c +++ b/drivers/gpio/gpio-tegra.c @@ -323,13 +323,6 @@ static int tegra_gpio_irq_set_type(struct irq_data *d, unsigned int type) return -EINVAL; } - ret = gpiochip_lock_as_irq(&tgi->gc, gpio); - if (ret) { - dev_err(tgi->dev, - "unable to lock Tegra GPIO %u as IRQ\n", gpio); - return ret; - } - spin_lock_irqsave(&bank->lvl_lock[port], flags); val = tegra_gpio_readl(tgi, GPIO_INT_LVL(tgi, gpio)); @@ -342,6 +335,14 @@ static int tegra_gpio_irq_set_type(struct irq_data *d, unsigned int type) tegra_gpio_mask_write(tgi, GPIO_MSK_OE(tgi, gpio), gpio, 0); tegra_gpio_enable(tgi, gpio); + ret = gpiochip_lock_as_irq(&tgi->gc, gpio); + if (ret) { + dev_err(tgi->dev, + "unable to lock Tegra GPIO %u as IRQ\n", gpio); + tegra_gpio_disable(tgi, gpio); + return ret; + } + if (type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) irq_set_handler_locked(d, handle_level_irq); else if (type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)) -- 2.18.0