From mboxrd@z Thu Jan 1 00:00:00 1970 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 B96D6E77180 for ; Mon, 16 Dec 2024 17:21:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=EoB1GbKivXuBsxxps3C04czV7lAogjlaWsBJsIxZ3zo=; b=dF7Kt0lmMt2CaaMC7QZiggZtbW yWy2tYpHsw/I1N8Vm6ls62W8bpNr8iHdtYP+52/LPEMuK5lwFN5hgnKJRncPI6Ai7uQqkCGPRZjaS Bb97TIrHedIgzpGhrgO8O1PiwLe/qurSu6ScyCBeJlASMAC49+SRL4yj4y5p/VKtpE111tlpsQ/gT G73gG/X5ZglQVdk1S1UPaQG5OR44Y6gUbZ105OLouFwTC2zyxHL3ogOeboM6JRf6OBNXmrbs4dWSZ BkwfTi2eWPyvYxcZfdKtiE1fsa3SS55Kl27F8w0eB2oTkALFE6hCn+pCplTMg/JatKA1yzym4ZTO3 vjzw0GfA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tNEmU-0000000Al0T-2JD2; Mon, 16 Dec 2024 17:21:18 +0000 Received: from nyc.source.kernel.org ([147.75.193.91]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tNElN-0000000AkoC-0DrP; Mon, 16 Dec 2024 17:20:10 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id C40A0A418A0; Mon, 16 Dec 2024 17:18:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C29F4C4CED0; Mon, 16 Dec 2024 17:20:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1734369607; bh=lsZu4CW9iz0IkO0ux+aw5Ej8/2IsGxdLj0arY9En0D0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YBaGcecKJuSIX6KQhirAa1qTy7d84RJx1mtuyV3FWFyFtShxsSx6ncZ2o+pLNkYbd 1LbAMTvJ3sHvy+/+nd9xPMX+gWvGfHzc5fb+jUNeCi/es8c6cGxlvhDz+BwkPCRtL1 FkjvbaBKWFXSNMZEXy85Lh8kQyuhu3Meb7GopQEEpT/JFAo/R90CQ8FonvliIuXpps JPc24HcLyqUOT4LztFZufzutbjjeOGBE8GJVg25Lu2rOrLijZN2UjNpHUaSciQYsOf DqEVe1T4PIX0x4vxk/JFWnIraTws+pa3/QcNk1wHgUysyA0GCxkYxdN0jxTvRkcU7U uGXHMk9e3hSng== Date: Mon, 16 Dec 2024 18:20:04 +0100 From: Maxime Ripard To: Dmitry Baryshkov Cc: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jaroslav Kysela , Takashi Iwai , Liam Girdwood , Mark Brown , Phong LE , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar , Russell King , Chun-Kuang Hu , Philipp Zabel , Matthias Brugger , AngeloGioacchino Del Regno , Sandy Huang , Heiko =?utf-8?Q?St=C3=BCbner?= , Andy Yan , Alain Volmat , Raphael Gallais-Pou , Dave Stevenson , =?utf-8?B?TWHDrXJh?= Canal , Raspberry Pi Kernel Maintenance , Jani Nikula , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-rockchip@lists.infradead.org Subject: Re: [PATCH v6 06/10] drm/display/hdmi: implement hotplug functions Message-ID: <20241216-courageous-mysterious-pelican-5a8d2e@houat> References: <20241206-drm-bridge-hdmi-connector-v6-0-50dc145a9c06@linaro.org> <20241206-drm-bridge-hdmi-connector-v6-6-50dc145a9c06@linaro.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha384; protocol="application/pgp-signature"; boundary="b5r2eocu5g4kytpy" Content-Disposition: inline In-Reply-To: <20241206-drm-bridge-hdmi-connector-v6-6-50dc145a9c06@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241216_092009_233211_DDB9C3FA X-CRM114-Status: GOOD ( 25.89 ) 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 --b5r2eocu5g4kytpy Content-Type: text/plain; protected-headers=v1; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Subject: Re: [PATCH v6 06/10] drm/display/hdmi: implement hotplug functions MIME-Version: 1.0 On Fri, Dec 06, 2024 at 12:16:00PM +0200, Dmitry Baryshkov wrote: > The HDMI Connectors need to perform a variety of tasks when the HDMI > connector state changes. Such tasks include setting or invalidating CEC > address, notifying HDMI codec driver, updating scrambler data, etc. >=20 > Implementing such tasks in a driver-specific callbacks is error prone. > Start implementing the generic helper function (currently handling only > the HDMI Codec framework) to be used by drivers utilizing HDMI Connector > framework. >=20 > Signed-off-by: Dmitry Baryshkov > --- > drivers/gpu/drm/display/drm_hdmi_state_helper.c | 61 +++++++++++++++++++= ++++++ > include/drm/display/drm_hdmi_state_helper.h | 8 ++++ > 2 files changed, 69 insertions(+) >=20 > diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gp= u/drm/display/drm_hdmi_state_helper.c > index 80bf2829ba89b5f84fed4fa9eb1d6302e10a4f9e..4cdeb63688b9e48acd8e8ae87= a45b6253f7dd12b 100644 > --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c > +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c > @@ -769,3 +769,64 @@ drm_atomic_helper_connector_hdmi_clear_audio_infofra= me(struct drm_connector *con > return ret; > } > EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_clear_audio_infoframe); > + > +/** > + * drm_atomic_helper_connector_hdmi_hotplug_edid - Handle the hotplug ev= ent for the HDMI connector passing custom EDID > + * @connector: A pointer to the HDMI connector > + * @status: Connection status > + * @drm_edid: EDID to process > + * > + * This function should be called as a part of the .detect() / .detect_c= tx() > + * and .force() callbacks, updating the HDMI-specific connector's data. = Most > + * drivers should be able to use @drm_atomic_helper_connector_hdmi_hotpl= ug() > + * instead. > + * > + * Returns: > + * Zero on success, error code on failure. > + */ > +int > +drm_atomic_helper_connector_hdmi_hotplug_edid(struct drm_connector *conn= ector, > + enum drm_connector_status status, > + const struct drm_edid *drm_edid) > +{ > + if (status =3D=3D connector_status_disconnected) { > + // TODO: also handle CEC and scramber, HDMI sink disconnected. > + drm_connector_hdmi_codec_plugged_notify(connector, false); > + } > + > + drm_edid_connector_update(connector, drm_edid); > + > + if (status =3D=3D connector_status_connected) { > + // TODO: also handle CEC and scramber, HDMI sink is now connected. > + drm_connector_hdmi_codec_plugged_notify(connector, true); > + } > + > + return 0; > +} > +EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_hotplug_edid); I think we discussed it in a previous version's thread after you sent that one, but I'd rather have that helper call an edid retrieval function than passing it edids. Also, EDIDs are mandatory for HDMI, so I'd call the function drm_atomic_helper_connector_hdmi_hotplug. > +/** > + * drm_atomic_helper_connector_hdmi_hotplug - Handle the hotplug event f= or the HDMI connector > + * @connector: A pointer to the HDMI connector > + * @status: Connection status > + * > + * This function should be called as a part of the .detect() / .detect_c= tx() > + * and .force() callbacks, updating the HDMI-specific connector's data. > + * > + * Returns: > + * Zero on success, error code on failure. > + */ > +int > +drm_atomic_helper_connector_hdmi_hotplug(struct drm_connector *connector, > + enum drm_connector_status status) > +{ > + const struct drm_edid *drm_edid; > + int ret; > + > + drm_edid =3D drm_edid_read(connector); > + ret =3D drm_atomic_helper_connector_hdmi_hotplug_edid(connector, status= , drm_edid); > + drm_edid_free(drm_edid); Oh. Why do we need the two variants? Or is it to deal with drivers that don't set connector->ddc? Maxime --b5r2eocu5g4kytpy Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iJUEABMJAB0WIQTkHFbLp4ejekA/qfgnX84Zoj2+dgUCZ2BhRAAKCRAnX84Zoj2+ duMGAYDwCfVmRQt5W/JuFEAWhXLZLjo4CeJIKFXnit8/2S+ODRFntJMw/cPpQN7U HE28DAcBfAyu8qSgYzb4NIvRrHkIsi2wL3YWiVUclrh01Haso0u/clDsW8282oLw FBFc2NqiHA== =shxs -----END PGP SIGNATURE----- --b5r2eocu5g4kytpy--