Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp690354ybg; Mon, 1 Jun 2020 11:46:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyQ5FIs06IkXwBduktjYrhFu4Ofl2lAbSQnLw7fzetJ8vVGM4svF8Fw/nTadMRURsDwlIBl X-Received: by 2002:a50:a782:: with SMTP id i2mr23167305edc.33.1591037199379; Mon, 01 Jun 2020 11:46:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591037199; cv=none; d=google.com; s=arc-20160816; b=Ej3oTQUttWhLEvqEJhAJlJA6TrEbGbeS+AwCux3eK2T0I6a7+SD6M59+ZI31sl5pdu hBX4SOobTfkZsYgywGjaNT0D1Jq1Tdu3PlFagSu1gkdHGEwlSX1hamgikGbo8zzcXIwJ rJTTdmEbE+azbJVjQGZzxbSNhtXMpcTfQue85MoEYGckyJubHoe+MQ0y17KpTvKvGIzZ kiQRBI160W04RGFNY5nMiF+hFMfE0BYCiH3NUt2/yqQ4/GQWrS25DVwc/RD0B6ogG/an ORtJRL69e/DrdMbrKJpkFKqRCttaIzZiiazb8dM9c8E1SRqHGoO/EwP1Sz5ExvP+n3Uu qr0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=4ib9ALj+MoTgDUuG4lXisbAcUfQdjDPqtHf77cktfeM=; b=zbad5l1t1rxITsHwd3kToZlo8gakyjCPBO+YqGyU3r/jFlMSS58G4oleZPBeNOJK5W u5qwLM/RsQBnBoIgXQ7Jh3doZJvASzZLkqUlie5FuFBD+O0OtxvRIz9qVrELwaT0ax/D 70yf1mMq47wO8/MH24adRxdq+GDVjMGkiVgVL38FF5fCC21j167GDB+lGTjJksQ2mitq i8P9lS0b2VdwMTaGmtdxj5m7CgKH3MHjbKJta0XN1oxJZoHFTJaJi/e9Gidw2UgoRWN8 lpbNMAhnaXO6TSLWy+embEwW29L2EwKnQQD+jCgOIrKiE2yBWz8360tWV3W6H3RrgZ1s exHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HEXE8C1b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dp9si204800ejc.698.2020.06.01.11.46.15; Mon, 01 Jun 2020 11:46:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HEXE8C1b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730458AbgFASod (ORCPT + 99 others); Mon, 1 Jun 2020 14:44:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:57414 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730997AbgFASKb (ORCPT ); Mon, 1 Jun 2020 14:10:31 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7E3082068D; Mon, 1 Jun 2020 18:10:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591035030; bh=6s+RsgL4xCdQ+h6Wu8W/hQMwwgmM8A5E+6SPxAFengk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HEXE8C1bPisQ9rMMDlOHTrNzK3AFPP7RUxpUeLkNcFW8bnJSpgwwQ0LxxX0Zg132N A7G7wsEuICvfv3hJLhELhqV7zQ3aJjPUq0bdHfzmWmI/+9TglNkSk9bx+OsWt3xS4C GLQ8caP1/YzobcYdTLJ2YAeKLx/1dKQfJF+QrzBo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hans Verkuil , Linus Walleij , Russell King , Sasha Levin Subject: [PATCH 5.4 104/142] gpio: fix locking open drain IRQ lines Date: Mon, 1 Jun 2020 19:54:22 +0200 Message-Id: <20200601174048.752157963@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200601174037.904070960@linuxfoundation.org> References: <20200601174037.904070960@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Linus Walleij [ Upstream commit e9bdf7e655b9ee81ee912fae1d59df48ce7311b6 ] We provided the right semantics on open drain lines being by definition output but incidentally the irq set up function would only allow IRQs on lines that were "not output". Fix the semantics to allow output open drain lines to be used for IRQs. Reported-by: Hans Verkuil Signed-off-by: Linus Walleij Signed-off-by: Hans Verkuil Tested-by: Hans Verkuil Cc: Russell King Cc: stable@vger.kernel.org # v5.3+ Link: https://lore.kernel.org/r/20200527140758.162280-1-linus.walleij@linaro.org Signed-off-by: Linus Walleij Signed-off-by: Sasha Levin --- drivers/gpio/gpiolib.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index a8cf55eb54d8..abdf448b11a3 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -3894,7 +3894,9 @@ int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset) } } - if (test_bit(FLAG_IS_OUT, &desc->flags)) { + /* To be valid for IRQ the line needs to be input or open drain */ + if (test_bit(FLAG_IS_OUT, &desc->flags) && + !test_bit(FLAG_OPEN_DRAIN, &desc->flags)) { chip_err(chip, "%s: tried to flag a GPIO set as output for IRQ\n", __func__); @@ -3957,7 +3959,12 @@ void gpiochip_enable_irq(struct gpio_chip *chip, unsigned int offset) if (!IS_ERR(desc) && !WARN_ON(!test_bit(FLAG_USED_AS_IRQ, &desc->flags))) { - WARN_ON(test_bit(FLAG_IS_OUT, &desc->flags)); + /* + * We must not be output when using IRQ UNLESS we are + * open drain. + */ + WARN_ON(test_bit(FLAG_IS_OUT, &desc->flags) && + !test_bit(FLAG_OPEN_DRAIN, &desc->flags)); set_bit(FLAG_IRQ_IS_ENABLED, &desc->flags); } } -- 2.25.1