Received: by 2002:ab2:3141:0:b0:1ed:23cc:44d1 with SMTP id i1csp1387331lqg; Sun, 3 Mar 2024 07:44:26 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVTvu3Izu8rMDPBl2F7ZrW1J3HHkfGCqETQF4vSPcd/aNaIoPwzw1UcNStoKO/vq4nCwnjgIwc4MpYCP2R26ZC0us+MUtIGCYJh+6jt+w== X-Google-Smtp-Source: AGHT+IHvJy/z56uD3oUYnPAoEnLD2xTdsGzqHVms55N2RsL6II9oTzegUYTOIz//2n6XHiUgbqtD X-Received: by 2002:ac8:5a52:0:b0:42e:df0d:2cec with SMTP id o18-20020ac85a52000000b0042edf0d2cecmr5662080qta.39.1709480666589; Sun, 03 Mar 2024 07:44:26 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709480666; cv=pass; d=google.com; s=arc-20160816; b=moB5cdMaWhC0aj5kZSNByvajihf6MjgNbpS9lVY3NC5ssXHs70IubONbzLoLlvbwXq g+YoFHoAvYV1z+dF3vul6pAvRIkKxQH/UUXgHGIddzg7cqTOhpa7qE1bS7LXQp9gRsKw 8JTnS61WSKsOTQX7bgFMFP/tlAUMYt8i1B+Lgn7QuXXDASNnq/kx/lOe5zTyDqK55qKc 2VfUn8Tet8iDUS/1l+iHQIN6SBqUAJSEEXaRCHBpLcSgcuHdFYLdqyDmjhsfmuzB7KAS gxDDzmhr5yiSd029hMfnVrm/ICQ4HUwqzT4FIOHRQpGn3HponMl4n8MV5qAKiB8ST4eL 5xdQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=eS5rXsUD0/yP0O/b336cGPihzWh42DmpRxXHDyRlWmk=; fh=MV0Sle1QIF28fpY7uA45eG92K5G8DENr+XV3EU6jwFA=; b=py1fh11EwX/5FMwG0qJB6o0ka3rGOdokHDB146X5WfwsCCJghHkr6X2cnjW9ZstZJ3 i3j9mPy5xardQXuworbibNs1zlHVxbO/3WmpVkHHatp66gfgjQ6fEEICFa0PIA1xYGKK SJe8gPnVpW+kZH4+I2HTcrh8616hXXPp1aBDWHZHYi/NJQel5rIwyXgKqwzJsIwpEG8B VGNGfTLgU3bIRfyn988zsmehNrs6y56sQHJxEocVMZHZUvUOLXeFv9Ub94gSGonOA+OB MbqV5yZBeYnOhufu6icwfTNgMwXNXpXrXYknUaozkh5RwXTFiaX96D8E2pF7vOv2f1ST V6ig==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=g0qOn8Wt; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89808-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89808-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id u19-20020a05620a121300b00788229cf85dsi1616110qkj.740.2024.03.03.07.44.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Mar 2024 07:44:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-89808-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=g0qOn8Wt; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-89808-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-89808-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 2427D1C21D78 for ; Sun, 3 Mar 2024 15:44:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id AADEC67C5E; Sun, 3 Mar 2024 15:44:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g0qOn8Wt" Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45F51BE66; Sun, 3 Mar 2024 15:44:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709480656; cv=none; b=DFZs4aXyZyD+MqXjKb3eGcus2CWei8/fznJWShqHLtfZHmklq3vmtpUtCjchvIDpyAUjaSv8kvLTCM1uRQ8LjholQOm7eR7P7OLKgUQcJ/OluPW8VLmtAvfc/MI4CxU9kzDIqq7bUBhmgHjR0rmZ+iNo0XG7t/CFtGdgnNVILZU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709480656; c=relaxed/simple; bh=Pq1xs9swixQ3S4BcqZ6BTxVKKAgiy8m15Wu0wILEoqo=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=nYQk+UuMEarAE/W9wJw0HI3wEglAsIe7C+eMTtBA4lABeNGwRhJ+Za29i+TrbhTbACgKWFDa3VIyef8F6hxVlg35obHydwBJYvdjCnEpflJZVrxqPIjmDJgkOjlUtdHrHHfDFB3XaUPof/KwIM/bciyROU4yFBweBMQ9S6i7dxM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g0qOn8Wt; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-1dcce5e84bcso29488525ad.1; Sun, 03 Mar 2024 07:44:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709480654; x=1710085454; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=eS5rXsUD0/yP0O/b336cGPihzWh42DmpRxXHDyRlWmk=; b=g0qOn8WtUI6GN/E8Z2atSLut+4+UXZ31x+4bF5vlyXZihF9Usk3W3jrXK3LsLinLym u50N9vA8gJIMw/0cVr2R60S/iA4Q8zNtA21TT4c0yzHdsS6SdOBviRbQjC2z88IYC3cG 1TbtmYkxaKIfvhsoOP5RlQQXjeNfhLkbi3VEWrGJv7I2Wvqi12O2tM/ajOt4tHD32I2G BnLocGnRxOpQcW6I4kCnFpiEfj3tkOmGpAtKsCUwfrZSzrKFr9tC98dxiqLxYsSJuXsD 1xG2Ytg2Qo2vrzKuVput7PGTJorrYXAmuNVQYrY0WyuCodhrjTyivx2mwbZQlFNOl/f7 +Plg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709480654; x=1710085454; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eS5rXsUD0/yP0O/b336cGPihzWh42DmpRxXHDyRlWmk=; b=q57Vir7oUuOYfPDH1QPFjukWKwT4IiUSlmouL1ucsuEWY6dsm+/Dc6AtJIe48JmMa7 gg0hbTYk89Gp/FH+42u/KEOBE3Vgxl71ynspQuL68HeFupR/hvzpCuLbbJY/j2plOUS2 KNR2Sd0HrNQRwYz+McoFqlF9VJ8Ln7HCuClOzP+LIYhQ8HisEOuPaqEmOat0dP7oPL2D pZIrgNYjKzMKsRKXWOKshRCLg87hEBhXPUpfldxAyTrGSaeV8g6dnFY85rhhGAGYIcCh YRDdKQtCu37OC9yywxIaIEI5dfm4PE/egu2AK9tWKtetxYlQ63LVlY6PikbLyhg3qaeG ju/Q== X-Forwarded-Encrypted: i=1; AJvYcCVjlNTXtYTlc8JISUTArqdURiWjd7fA4uvZoPf1qhWik7VTcOAYIAU856TZn9KtEOwlpc7XmJV2xG44qyJuaVe2SSKcHetr69gppl3OmbAXO/D5jttUYZIqh8Je+oF21HCoQ9WnRLjwYw== X-Gm-Message-State: AOJu0YxxaOrptAPJmaTBApZ5bqkcIVteo9OxWhuygNl4zpcoYF8UZzTQ 0kQjwNP4PfyzP/1N876UX/0NOhF+C1cb7ay0yMPysxne1hS7PdZ+IJwImg5t9QIiEc3PeP2QwpF RuDKz3i8/G8jz5wXMLtCBSVS3Zn0= X-Received: by 2002:a17:902:db0e:b0:1dc:524:6da4 with SMTP id m14-20020a170902db0e00b001dc05246da4mr6348460plx.8.1709480654469; Sun, 03 Mar 2024 07:44:14 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240228113737.43434-1-aford173@gmail.com> <20240228163153.GH9863@pendragon.ideasonboard.com> In-Reply-To: <20240228163153.GH9863@pendragon.ideasonboard.com> From: Adam Ford Date: Sun, 3 Mar 2024 09:44:03 -0600 Message-ID: Subject: Re: [PATCH 1/2] drm/bridge: adv7511: Allow IRQ to share GPIO pins To: Laurent Pinchart Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, aford@beaconembedded.com, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Andrzej Hajda , Neil Armstrong , Robert Foss , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , devicetree@vger.kernel.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 28, 2024 at 10:31=E2=80=AFAM Laurent Pinchart wrote: > > Hi Adam, > > Thank you for the patch. > > On Wed, Feb 28, 2024 at 05:37:35AM -0600, Adam Ford wrote: > > 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 IRQ, it won't be > > registered and the hot-plug detect fails. This is easily > > fixed by add the IRQF_SHARED flag. > > > > Signed-off-by: Adam Ford > > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu= /drm/bridge/adv7511/adv7511_drv.c > > index b5518ff97165..21f08b2ae265 100644 > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c > > @@ -1318,7 +1318,8 @@ static int adv7511_probe(struct i2c_client *i2c) > > > > ret =3D devm_request_threaded_irq(dev, i2c->irq, NULL, > > adv7511_irq_handler, > > - IRQF_ONESHOT, dev_name(de= v), > > + IRQF_ONESHOT | IRQF_SHARE= D, > > + dev_name(dev), > > This looks fine, but the IRQ handler doesn't. Thanks for the review. > > static int adv7511_irq_process(struct adv7511 *adv7511, bool process_hpd) > { > unsigned int irq0, irq1; > int ret; > > ret =3D regmap_read(adv7511->regmap, ADV7511_REG_INT(0), &irq0); > if (ret < 0) > return ret; > > ret =3D regmap_read(adv7511->regmap, ADV7511_REG_INT(1), &irq1); > if (ret < 0) > return ret; If I did a check here and returned if there was no IRQ to handle, would that be sufficient? --- 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 handled */ + if (!(irq0 & (ADV7511_INT0_HPD | ADV7511_INT0_EDID_READY)) && + !(irq1 & ADV7511_INT1_DDC_ERROR)) + return -1; + regmap_write(adv7511->regmap, ADV7511_REG_INT(0), irq0); regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1); With this, I would expect adv7511_irq_handler to return IRQ_NONE. If you're OK with that approach, I can do that. If you want me to merge adv7511_irq_handler, and adv7511_irq_process, I can do that too to make the return codes a little more intuitive. adam > > regmap_write(adv7511->regmap, ADV7511_REG_INT(0), irq0); > regmap_write(adv7511->regmap, ADV7511_REG_INT(1), irq1); > > if (process_hpd && irq0 & ADV7511_INT0_HPD && adv7511->bridge.enc= oder) > schedule_work(&adv7511->hpd_work); > > if (irq0 & ADV7511_INT0_EDID_READY || irq1 & ADV7511_INT1_DDC_ERR= OR) { > adv7511->edid_read =3D true; > > if (adv7511->i2c_main->irq) > wake_up_all(&adv7511->wq); > } > > #ifdef CONFIG_DRM_I2C_ADV7511_CEC > adv7511_cec_irq_process(adv7511, irq1); > #endif > > return 0; > } > > static irqreturn_t adv7511_irq_handler(int irq, void *devid) > { > struct adv7511 *adv7511 =3D devid; > int ret; > > ret =3D adv7511_irq_process(adv7511, true); > return ret < 0 ? IRQ_NONE : IRQ_HANDLED; > } > > The function will return IRQ_HANDLED as long as the registers can be > read, even if they don't report any interrupt. > > > adv7511); > > if (ret) > > goto err_unregister_audio; > > -- > Regards, > > Laurent Pinchart