From nobody Fri Jul 24 21:55:04 2026 Received: from out-180.mta1.migadu.com (out-180.mta1.migadu.com [95.215.58.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35D15429CF0 for ; Thu, 23 Jul 2026 09:43:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799817; cv=none; b=bAHCzQ3wzhR5WLiZS3TbDMp5X1+k4NBxqlLJrc8XK4nSyjFIESW2/QGrf/C2cBevhPVFhiFBAp0PTFj6BYWoM51eMvw3nnGYD7lsmMyEk+keuJuM+eXuEqUidw9iUcahI4Z6pHtHnmLHmcKLI/V/vo1QkDGiGoIb7SB9ujLAzuI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784799817; c=relaxed/simple; bh=yV9viZUIq/erJyt5xIHf3MyM1JE8PA58gOxPHaDZWH4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=Nh+cMPGTRcObA2f5JgMykRJpJlDaCvCzLwgJ1xBcTE3UNwRmqsHsBdqwAeSBvyZLHd97YJ/tn9ERz9xIp8zVXYyUkopcVGsitxjD5DLhiS/7rZWoS+M0Yd+d/Pwi83EZb0rIs615vBWmSM2KTIELHA1AXu4uIcHQn2HNdEguU1o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=grimler.se; spf=pass smtp.mailfrom=grimler.se; dkim=pass (1024-bit key) header.d=grimler.se header.i=@grimler.se header.b=VVdg24eU; arc=none smtp.client-ip=95.215.58.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=grimler.se Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=grimler.se Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=grimler.se header.i=@grimler.se header.b="VVdg24eU" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=grimler.se; s=key1; t=1784799810; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6JxfaO/L3H+d6K+qQEbQ1OD1DRtey794ZPKDE9UrqK8=; b=VVdg24eU+PnYt0Ycjb39/BvQG+bBe6HubhkSIlTYYIkVqfBTMuaIl+wCn+VIz/pIRDItOw SMiBqRS+f0tnxpsZy3kI25f+8xlupXIRMGuLp1PjlMo+cWgr0C03TsgS/1X8nngLx2a4e6 FMw9w7f3lRtXtsyL/Ud5pkNI4XJPtlc= From: Henrik Grimler Date: Thu, 23 Jul 2026 11:41:56 +0200 Subject: [PATCH v5] drm/bridge: sii9234: use extcon cable detection logic to detect MHL Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260723-exynos4-sii9234-driver-v5-1-44b31b5597bd@grimler.se> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/33OwW7CMAyA4VdBOZMpdtwm7LT3QBy6xgFL0KIER SDUdydFmrYJleNvyZ99V5mTcFafq7tKXCTLONRo1ivVH7phz1pCbYUGLSB4zdfbMGbSWWSDlnR IUjjp4MEF+m4AQqPq8jlxlOsT3u5qHyRfxnR73ikwT2eyMQ5hiSygjUYmx8FgbJ372ic5HTl9Z FazWfCvQ4sOVid2zEgUIZB5ceyv4984tjreeNqwg7azr//Qj9MaALvoUHVa9r3peqDo6Z8zTdM DRzf45JUBAAA= X-Change-ID: 20231218-exynos4-sii9234-driver-d817d4b511d5 To: Luca Ceresoli , Dmitry Baryshkov , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, linux-kernel@vger.kernel.org, Henrik Grimler X-Developer-Signature: v=1; a=openpgp-sha256; l=6920; i=henrik@grimler.se; h=from:subject:message-id; bh=yV9viZUIq/erJyt5xIHf3MyM1JE8PA58gOxPHaDZWH4=; b=owEBiQF2/pANAwAIAbAHbkkLcWFrAcsmYgBqYeItEEHWEZlqv1qmejnB3WgAxUm6tZRP3vqTx WWc7ivsOoyJAU8EAAEIADkWIQQsfymul4kfZBmp4s2wB25JC3FhawUCamHiLRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwzLDIACgkQsAduSQtxYWs83AgAjrs+ZiCaXeM5j5Z5npW4K98zF24MNZJ 44hi9dRwlP9WPev+0qmaxn2THgpeIIKcFIvlal4l8DN2QBhV3OOrzm/GTnSsVojm5GuHpLW0Iy1 eO0hcTrmKQKV26zLR9m0Aakft6Vp/m7+ooFOLwkmStvCIYlbcUF6r6MvKKh1HkPfIQ4M5qNEXE5 4u6qxojHQO0Q9PvFrK25XT6hFzIscS6R2p+LQiMHCy+q8cBanlnb+nhmCa/E1NlvCYyxRj4guLF ooIW/QEWrA2bwdt+n9sJZeYgYhTECzfcHS2Hf/zGse5O7FYC0AF/zhrX4ivndz5LwczuOs+MFsX M4UNkT/wWlQ== X-Developer-Key: i=henrik@grimler.se; a=openpgp; fpr=2C7F29AE97891F6419A9E2CDB0076E490B71616B X-Migadu-Flow: FLOW_OUT To use MHL we currently need the MHL chip to be permanently on, which consumes unnecessary power. Let's use extcon attached to MUIC to enable the MHL chip only if it detects an MHL cable. Tested-by: Marek Szyprowski Signed-off-by: Henrik Grimler --- Hi, Fix so HDMI through the sii9234 MHL chip works when cable is hotplugged, by making the MHL chip use extcon cable detection functions. The patch is heavily inspired by commit 688838442147 ("drm/bridge/sii8620: use micro-USB cable detection logic to detect MHL") by Maciej Purski. Before these changes, HDMI only worked if cable was plugged in before booting. If no cable was connected, then wlr-randr still showed HDMI as connected, with 0x0 px, which confused at least some UIs (phosh) and caused problems: https://gitlab.gnome.org/World/Phosh/phosh/-/issues/828 Tested on exynos4412-i9305. --- Changes in v5: - Rebase and drop applied patches - Fix review comments by Luca: - Remove unnecessary line breaks and braces - Change Kconfig extcon dependency - Use devm_extcon_register_notifier - Link to v4: https://lore.kernel.org/r/20260113-exynos4-sii9234-driver-v4-= 0-6e8c0ac14f84@grimler.se Changes in v4: - Collect tags - Link to v3: https://lore.kernel.org/r/20250824-exynos4-sii9234-driver-v3-= 0-80849e716a37@grimler.se Changes in v3: - Fix return of dev_err_probe in patch 2 and patch 3, spotted by Dmitry and Marek respectively. - Change to depends on EXTCON || !EXTCON instead of select - Collect tags for patch 1 (not 3 since there were (minor) changes) - Link to v2: https://lore.kernel.org/r/20250724-exynos4-sii9234-driver-v2-= 0-faee244f1d40@grimler.se Changes in v2: - Add dependency on extcon in patch 3. Issue reported by kernel test robot = - Link to v1: https://lore.kernel.org/r/20250721-exynos4-sii9234-driver-v1-= 0-2e47ed02f677@grimler.se To: Andrzej Hajda To: Neil Armstrong To: Robert Foss To: Laurent Pinchart To: Jonas Karlman To: Jernej Skrabec To: Luca Ceresoli To: Maarten Lankhorst To: Maxime Ripard To: Thomas Zimmermann To: David Airlie To: Simona Vetter Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org --- drivers/gpu/drm/bridge/Kconfig | 1 + drivers/gpu/drm/bridge/sii9234.c | 78 ++++++++++++++++++++++++++++++++++++= ++-- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 4a57d49b4c6d..84236e816080 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -333,6 +333,7 @@ config DRM_SII902X config DRM_SII9234 tristate "Silicon Image SII9234 HDMI/MHL bridge" depends on OF + depends on EXTCON if EXTCON help Say Y here if you want support for the MHL interface. It is an I2C driver, that detects connection of MHL bridge diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9= 234.c index be67642ab7d3..bf211906fefc 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -20,6 +20,7 @@ =20 #include #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include #include =20 @@ -173,6 +175,10 @@ struct sii9234 { struct gpio_desc *gpio_reset; int i2c_error; struct regulator_bulk_data supplies[4]; + struct extcon_dev *extcon; + struct notifier_block extcon_nb; + struct work_struct extcon_wq; + int cable_state; =20 struct mutex lock; /* Protects fields below and device registers */ enum sii9234_state state; @@ -864,6 +870,63 @@ static int sii9234_init_resources(struct sii9234 *ctx, return 0; } =20 +static void sii9234_extcon_work(struct work_struct *work) +{ + struct sii9234 *ctx =3D container_of(work, struct sii9234, extcon_wq); + int state =3D extcon_get_state(ctx->extcon, EXTCON_DISP_MHL); + + if (state =3D=3D ctx->cable_state) + return; + + ctx->cable_state =3D state; + + if (state > 0) + sii9234_cable_in(ctx); + else + sii9234_cable_out(ctx); +} + +static int sii9234_extcon_notifier(struct notifier_block *nb, + unsigned long event, void *ptr) +{ + struct sii9234 *ctx =3D container_of(nb, struct sii9234, extcon_nb); + + schedule_work(&ctx->extcon_wq); + + return NOTIFY_DONE; +} + +static int sii9234_extcon_init(struct sii9234 *ctx) +{ + struct extcon_dev *edev; + struct device_node *musb, *muic; + int ret; + + /* Get micro-USB connector node */ + musb =3D of_graph_get_remote_node(ctx->dev->of_node, 1, -1); + /* Then get micro-USB Interface Controller node */ + muic =3D of_get_next_parent(musb); + + if (!muic) { + dev_info(ctx->dev, "no extcon found, switching to 'always on' mode\n"); + return 0; + } + + edev =3D extcon_find_edev_by_node(muic); + of_node_put(muic); + if (IS_ERR(edev)) + return dev_err_probe(ctx->dev, PTR_ERR(edev), "invalid or missing extcon= \n"); + + ctx->extcon =3D edev; + ctx->extcon_nb.notifier_call =3D sii9234_extcon_notifier; + INIT_WORK(&ctx->extcon_wq, sii9234_extcon_work); + ret =3D devm_extcon_register_notifier(ctx->dev, edev, EXTCON_DISP_MHL, &c= tx->extcon_nb); + if (ret) + dev_err_probe(ctx->dev, ret, "failed to register notifier for MHL\n"); + + return 0; +} + static enum drm_mode_status sii9234_mode_valid(struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode) @@ -919,12 +982,17 @@ static int sii9234_probe(struct i2c_client *client) if (ret < 0) return ret; =20 + ret =3D sii9234_extcon_init(ctx); + if (ret < 0) + return ret; + i2c_set_clientdata(client, ctx); =20 ctx->bridge.of_node =3D dev->of_node; drm_bridge_add(&ctx->bridge); =20 - sii9234_cable_in(ctx); + if (!ctx->extcon) + sii9234_cable_in(ctx); =20 return 0; } @@ -933,7 +1001,13 @@ static void sii9234_remove(struct i2c_client *client) { struct sii9234 *ctx =3D i2c_get_clientdata(client); =20 - sii9234_cable_out(ctx); + if (ctx->extcon) { + flush_work(&ctx->extcon_wq); + if (ctx->cable_state > 0) + sii9234_cable_out(ctx); + } else { + sii9234_cable_out(ctx); + } drm_bridge_remove(&ctx->bridge); } =20 --- base-commit: c182a2ae13886463f7ae36e034449477306d182b change-id: 20231218-exynos4-sii9234-driver-d817d4b511d5 Best regards, -- =20 Henrik Grimler