From patchwork Tue Mar 5 00:48:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adam Ford X-Patchwork-Id: 13581388 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EBFD5C54E49 for ; Tue, 5 Mar 2024 00:49:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=4x2qe4n8bSmsIFiDE0LHXVkWvn+WljLsmge4sN1SUTs=; b=ZFQoItY1e1kRbc /quyB0cOt1Bd0XwTxqtV5hzzmt8Lc9v05ziSp2gk8GUsyxH2gbttgbHi/jxpCl0TvEFEtqAG16vrI 3hHB6ruk4uOGT+Z1Kc8TPYVS7WahSE1gJft6mtbvqLflw+PsS47z1ds65tPyTLP7r6U1NjGnkyPUw gcb0CI3HzRmOktGMs95X/5GSErehO1tkt7osv9z3zA4KiZYbugsmNWSjS4gXnSy7l34tt09ApEy7L v8BMRcZeoOTZIDBHBt9W3C/uEa6WiuN9XE86XJG0AORPGRuwH8nXLoAPt4hQN7YZ3H8LGKDBthciU I/zz2OB827x0ZobYQNlg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rhIzd-0000000BH3N-3KZt; Tue, 05 Mar 2024 00:49:17 +0000 Received: from mail-io1-xd35.google.com ([2607:f8b0:4864:20::d35]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rhIza-0000000BH2N-04ad for linux-arm-kernel@lists.infradead.org; Tue, 05 Mar 2024 00:49:16 +0000 Received: by mail-io1-xd35.google.com with SMTP id ca18e2360f4ac-7c76a566218so269114839f.2 for ; Mon, 04 Mar 2024 16:49:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709599749; x=1710204549; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=rbMkt4JH9fQU1k/SM3hjf0aOsa5Ez6LXN7/VqqW0kvc=; b=A1If4/IdxeW4kxG+MYO0NEGsiCNKL4KA4z00BS9uqNn80D9YzdoOgj7NF3fJuPHckI pSqEyY+eHRkJNFPrnKgZF0AbDuge9mtdelRAGkLJIKzOnyoeUUEMxYM/Vqf5WmwLBHqW oR7c1cCEwECF66LdLzM3l+I6pPGr+1/f0j5EPHoZq3htyNh35sD/G2XLadfEA2uCDLU9 A9CIWDr5fQwZS/lo7ARu5tlsyKwAE3wCDd/XzthLTFPi2am/vMZTWiYFWsSltSTLa1QY YlVHHbPRk1/aQIDh0zZVMNkv/B7P5IhNx5RZbfFsOyQWXfVooB+WxjUp+6nHblv+Hvdo bwjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709599749; x=1710204549; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rbMkt4JH9fQU1k/SM3hjf0aOsa5Ez6LXN7/VqqW0kvc=; b=GOvTYHYZB3IVpCQiEbnbcW0pZOTuWAdwAJjwhnqab5WVGK871pTsDHTVjcQT9tCsRW YsS8839ZTNxmunEV1YcdoO0W2JwP6IebSrhGBOUqZwr5R43pN+bZ/2+sANewnqH+AJOd 5cPC8uVf2YGB0efQa+h+6Huj6NqdEgF8NI+WJuJH6fOfOenasfFbxGIY4/WYD+VD/PUl EwQdzOtTcyNF3gfnbovAMeBCkj1AN9ap/f/DwPsF+CXfBV9D/R9xRO1uJMedMYbw5Wx+ 8EhvNQDs0NShu6I8F6D2DNczSRqfjE/RYFwYTVORr5Hoh6Em4j9an31NB5CU8qplZdD2 agwg== X-Forwarded-Encrypted: i=1; AJvYcCVcm8y/qqtartz4x1O5LCMX7HI9mj85GUdOMEjwz1XcvfMNy8ebkLjQWhNqUk7gmSc1vPwF+G0Y7GoLEDPe9hjMEzKcRkmTp6aSGLJVrQl0E6UyN5s= X-Gm-Message-State: AOJu0YzxmHFcU74eJVt3PKMS+C0h3Ow79tTUvAk4Umz8DbpppcfF/1eF 4NLTA/vCY1UjADb5OqXlLns1+fI4uuC/ghlWteuF/NxRkWRBs0O1 X-Google-Smtp-Source: AGHT+IEw6edKSWyLjziH3r6j5+b+3S3cO5883mFBAzNRhvz6MbZxITGLrOquyH+Wdhvdz/oFR1TNWg== X-Received: by 2002:a6b:d802:0:b0:7c8:55d8:7f12 with SMTP id y2-20020a6bd802000000b007c855d87f12mr4434882iob.10.1709599749414; Mon, 04 Mar 2024 16:49:09 -0800 (PST) Received: from aford-System-Version.lan ([2601:447:d002:5be:8c4f:ad40:e7e2:538]) by smtp.gmail.com with ESMTPSA id i20-20020a02cc54000000b00474d40f8381sm1931209jaq.122.2024.03.04.16.49.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 16:49:08 -0800 (PST) From: Adam Ford To: dri-devel@lists.freedesktop.org Cc: aford@beaconembedded.com, laurent.pinchart@ideasonboard.com, Adam Ford , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH V2 1/2] drm/bridge: adv7511: Allow IRQ to share GPIO pins Date: Mon, 4 Mar 2024 18:48:57 -0600 Message-ID: <20240305004859.201085-1-aford173@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240304_164914_125569_73A94DBD X-CRM114-Status: GOOD ( 15.58 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The IRQ registration currently assumes that the GPIO is dedicated to it, but that may not necessarily be the case. If the board has another device sharing the GPIO, it won't be registered and the hot-plug detect fails to function. Currently, the handler reads two registers and blindly assumes one of them caused the interrupt and returns IRQ_HANDLED unless there is an error. In order to properly do this, the IRQ handler needs to check if it needs to handle the IRQ and return IRQ_NONE if there is nothing to handle. With the check added and the return code properly indicating whether or not it there was an IRQ, the IRQF_SHARED can be set to share a GPIO IRQ. Signed-off-by: Adam Ford Reviewed-by: Laurent Pinchart Reviewed-by: Dmitry Baryshkov --- V2: Add check to see if there is IRQ data to handle diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index b5518ff97165..f3b4616a8fb6 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -477,6 +477,11 @@ static int adv7511_irq_process(struct adv7511 *adv7511, bool process_hpd) if (ret < 0) return ret; + /* If there is no IRQ to handle, exit indicating no IRQ data */ + if (!(irq0 & (ADV7511_INT0_HPD | ADV7511_INT0_EDID_READY)) && + !(irq1 & ADV7511_INT1_DDC_ERROR)) + return -ENODATA; + regmap_write(adv7511->regmap, ADV7511_REG_INT(0), irq0); regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1); @@ -1318,7 +1323,8 @@ static int adv7511_probe(struct i2c_client *i2c) ret = devm_request_threaded_irq(dev, i2c->irq, NULL, adv7511_irq_handler, - IRQF_ONESHOT, dev_name(dev), + IRQF_ONESHOT | IRQF_SHARED, + dev_name(dev), adv7511); if (ret) goto err_unregister_audio;