From nobody Mon Oct 6 13:38:25 2025 Received: from out-172.mta1.migadu.com (out-172.mta1.migadu.com [95.215.58.172]) (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 CAE70285074 for ; Mon, 21 Jul 2025 09:43:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753091032; cv=none; b=tZgJGb0j12srxb21zVGk5UInqMf4GXtA58cSlIDC+EBeMLQazsaIOnBRcE2v4ESPfpytsMybJzjM8kZUCIZJ0FWc5W/g7pGCVmzrdyD4FUkUgr39RatqZ3VsEeWKLhApPyLGXc8zxCftYU7Om4NEccnUHRiYe7rAk+38DcWmW7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753091032; c=relaxed/simple; bh=VZR9L/YQAGIhhNghVVdCnKKDaytCOzfTudQMGYx1nto=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ue3FEuBSddV79a0WZlc/trJb+b8nPglgrRzVykZpqcaYcmcoKfg9g84gIDBTeLAEWEPo9oFFwV2XdrjVNqLwEpVLjdnK71sD2y/evgIhn5HaVxAM2ATVYpCWQEK5uWqGw+QLZLaw4Swyd1d6JQHyyFHLaaR3UdIdWsncNBmWrDw= 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=OUnCEbkH; arc=none smtp.client-ip=95.215.58.172 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="OUnCEbkH" 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=1753091024; 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: in-reply-to:in-reply-to:references:references; bh=aF2s9Qr5GNaKwpyz9KRWWSUy0LehEu6UCIeJ3Re6uEI=; b=OUnCEbkHFEy1n8ZiypQGthy17Gzm1YnNLmxPTC3xisnSuvNBEjKGsdJSRDm50i9fGYrGvB dVnyrhVS3x8mLeVP5oWPjzGrlSFjr/thjguBWrwBdGITJqOB5FkqzPihy3N1EoF1lICnYs hyir03/1c/cEnTsKYMyuPW+MYCL+XUQ= From: Henrik Grimler Date: Mon, 21 Jul 2025 11:43:17 +0200 Subject: [PATCH 1/3] drm/bridge: sii9234: fix some typos in comments and messages 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: <20250721-exynos4-sii9234-driver-v1-1-2e47ed02f677@grimler.se> References: <20250721-exynos4-sii9234-driver-v1-0-2e47ed02f677@grimler.se> In-Reply-To: <20250721-exynos4-sii9234-driver-v1-0-2e47ed02f677@grimler.se> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Maciej Purski Cc: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, replicant@osuosl.org, linux-kernel@vger.kernel.org, Henrik Grimler X-Developer-Signature: v=1; a=openpgp-sha256; l=2316; i=henrik@grimler.se; h=from:subject:message-id; bh=VZR9L/YQAGIhhNghVVdCnKKDaytCOzfTudQMGYx1nto=; b=owEBbQGS/pANAwAKAbAHbkkLcWFrAcsmYgBofgvFk192z/AfkceQ1t7q4qnae8at/l3esEQ6q nMLYBZ02v+JATMEAAEKAB0WIQQsfymul4kfZBmp4s2wB25JC3FhawUCaH4LxQAKCRCwB25JC3Fh a75zB/9PB/5w5mjThVdcK7yy/nNmqcAi85C13GIQiZ/CIAOL41K09ViKp+BpNdayeixeFnWzkFh k6HzPKn2XQfD+S5z/7rHXNZW4lOqvzUQ4ltJQW4jcU2JOs+0COf/mFTRPRI1f52qXr7j4VBKZ09 4UYGYUr9N4HEB4Vs2F+j5nGE0R+0R4xIVEZv4N7YnkgSdP9x6Fg+tYMBc0sFFzG/Y1EhTRCCV6t zKRS/iIdPfqIvgsywu0Q+oXoXKvSvzFaZHMzmV+OjdJaDv2zsHl0A/7At8Dj7aKHi11eDJOWvGz +6nKC0+OZu3Lz1B2YUXsxbVtThESjL4cbJePM+QcSzhZC/Nm X-Developer-Key: i=henrik@grimler.se; a=openpgp; fpr=2C7F29AE97891F6419A9E2CDB0076E490B71616B X-Migadu-Flow: FLOW_OUT Fix spelling and formatting so that the code is easier to follow, and so that it is more searchable. Signed-off-by: Henrik Grimler --- drivers/gpu/drm/bridge/sii9234.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9= 234.c index bb1bed03eb5b7ae67f752c0d593dc54131e9e370..930117bbba87285e62107389606= 897740516eb0a 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -339,7 +339,7 @@ static int sii9234_cbus_reset(struct sii9234 *ctx) return sii9234_clear_error(ctx); } =20 -/* Require to chek mhl imformation of samsung in cbus_init_register */ +/* Require to check mhl information of samsung in cbus_init_register */ static int sii9234_cbus_init(struct sii9234 *ctx) { cbus_writeb(ctx, 0x07, 0xF2); @@ -614,7 +614,7 @@ static void sii9234_cable_out(struct sii9234 *ctx) =20 disable_irq(to_i2c_client(ctx->dev)->irq); tpi_writeb(ctx, TPI_DPD_REG, 0); - /* Turn on&off hpd festure for only QCT HDMI */ + /* Turn on&off hpd feature for only QCT HDMI */ sii9234_hw_off(ctx); =20 ctx->state =3D ST_OFF; @@ -708,7 +708,7 @@ static enum sii9234_state sii9234_rsen_change(struct si= i9234 *ctx) { int value; =20 - /* Work_around code to handle wrong interrupt */ + /* Workaround code to handle wrong interrupt */ if (ctx->state !=3D ST_RGND_1K) { dev_err(ctx->dev, "RSEN_HIGH without RGND_1K\n"); return ST_FAILURE; @@ -723,9 +723,9 @@ static enum sii9234_state sii9234_rsen_change(struct si= i9234 *ctx) } dev_dbg(ctx->dev, "RSEN lost\n"); /* - * Once RSEN loss is confirmed,we need to check - * based on cable status and chip power status,whether - * it is SINK Loss(HDMI cable not connected, TV Off) + * Once RSEN loss is confirmed, we need to check + * based on cable status and chip power status, whether + * it is SINK Loss (HDMI cable not connected, TV Off) * or MHL cable disconnection * TODO: Define the below mhl_disconnection() */ @@ -820,7 +820,7 @@ static int sii9234_init_resources(struct sii9234 *ctx, int ret; =20 if (!ctx->dev->of_node) { - dev_err(ctx->dev, "not DT device\n"); + dev_err(ctx->dev, "no DT device\n"); return -ENODEV; } =20 --=20 2.50.1 From nobody Mon Oct 6 13:38:25 2025 Received: from out-189.mta1.migadu.com (out-189.mta1.migadu.com [95.215.58.189]) (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 74B6E28C5A1 for ; Mon, 21 Jul 2025 09:43:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753091032; cv=none; b=GPvvNP/s5v0kUp7dBW+0C9AvTaXFW+w+ToiefaQmjQajdgftnE5YMbKyw2QjkcbsTb2rzVmZGlNJvXuFM/tmi8QT1FSXR3Nd3+eSDpn7x0Q+U4pKzhauoLZn1sOaY8RmZG6XeHeI4X7v5m9HRL+tQoKbvJmnWU3rhwAPSeTZmYk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753091032; c=relaxed/simple; bh=fA7kCw/btmE/Kdd4JfUiEBidHB1Txrk8ejW2zzBXunM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TBf7WTzdsDkKNS6inFK6/1ETBTK0trY997Hm3qriHoJl7tg3xgd//bJaxaTg5xlp2fx5Ibe9irJovzm98KBL3aaiMt5++3dxdsTRg4niP4YuqHem/Tcz4eUOGFK6VEtb+OdDOSymnRpYGPRe3nVnaCbpsGX0iGdZNznlS73GVcY= 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=YBw89Lf4; arc=none smtp.client-ip=95.215.58.189 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="YBw89Lf4" 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=1753091027; 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: in-reply-to:in-reply-to:references:references; bh=OLEv1F8si+d4JJJEfku+IvjEsa+DjKyQC0EuZ/oVHD0=; b=YBw89Lf4y0J81omtVXFiErCy7x7GCqvBn9kRHUywYFrPxpgnwB8GnQ1oWSMqF3dK6auKZd TIVzr17F0DAzQsdoZzgMIVze8Nx24Y6tlvowId9/BdMVItXdl7O700OyBHnfh1Man7gGiQ egQLEfykp0Sglpzko5rNyXEaHVOBFS8= From: Henrik Grimler Date: Mon, 21 Jul 2025 11:43:18 +0200 Subject: [PATCH 2/3] drm/bridge: sii9234: use dev_err_probe where applicable 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: <20250721-exynos4-sii9234-driver-v1-2-2e47ed02f677@grimler.se> References: <20250721-exynos4-sii9234-driver-v1-0-2e47ed02f677@grimler.se> In-Reply-To: <20250721-exynos4-sii9234-driver-v1-0-2e47ed02f677@grimler.se> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Maciej Purski Cc: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, replicant@osuosl.org, linux-kernel@vger.kernel.org, Henrik Grimler X-Developer-Signature: v=1; a=openpgp-sha256; l=1995; i=henrik@grimler.se; h=from:subject:message-id; bh=fA7kCw/btmE/Kdd4JfUiEBidHB1Txrk8ejW2zzBXunM=; b=owEBbQGS/pANAwAKAbAHbkkLcWFrAcsmYgBofgvIS7HDC0DrDRkeyFvc9LW0I1rTyNgAnlKfU bM4zIXwgQqJATMEAAEKAB0WIQQsfymul4kfZBmp4s2wB25JC3FhawUCaH4LyAAKCRCwB25JC3Fh a3XoB/9G40Lv0JikNKi9Ia8QkocQfYruM/z/b25jkjcvIMg5emz1qVhp4+y6a/lOb8wxDwSronb r0DcGzDRu+uBkuNJJTqPDSUT8OdWNrabTLHQb0g0lRMkzdGvqEthoZh7b77uFB2FYcJy0667FxY fmB0SCpJPWuhfF6o5lJY1W3qjcl40tpPjdgUrlNSeSdgfa5YSvxsylKke/698b3U87mZAjq/mVF wZAg7ppIU+1baeyu0De6hog7wGH0+prm1c9/n/yfAZbfWcQbg4bJzuBzmrlFHkv5HywIcjZxpgp 3eJeWA74HahKR5PMQx4q1bvXXon1/RICH7CYjs0Eususlxhb X-Developer-Key: i=henrik@grimler.se; a=openpgp; fpr=2C7F29AE97891F6419A9E2CDB0076E490B71616B X-Migadu-Flow: FLOW_OUT In case of error during resource acquisition the driver should print an error message only if it is not deferred probe. Use dev_err_probe helper to handle this, which will also record defer probe reason for debugging. Signed-off-by: Henrik Grimler --- drivers/gpu/drm/bridge/sii9234.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9= 234.c index 930117bbba87285e62107389606897740516eb0a..0e0bb1bf71fdcef788715cfd6fa= 158a6992def33 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -825,10 +825,9 @@ static int sii9234_init_resources(struct sii9234 *ctx, } =20 ctx->gpio_reset =3D devm_gpiod_get(ctx->dev, "reset", GPIOD_OUT_LOW); - if (IS_ERR(ctx->gpio_reset)) { - dev_err(ctx->dev, "failed to get reset gpio from DT\n"); - return PTR_ERR(ctx->gpio_reset); - } + if (IS_ERR(ctx->gpio_reset)) + return dev_err_probe(ctx->dev, PTR_ERR(ctx->gpio_reset), + "failed to get reset gpio from DT\n"); =20 ctx->supplies[0].supply =3D "avcc12"; ctx->supplies[1].supply =3D "avcc33"; @@ -836,9 +835,7 @@ static int sii9234_init_resources(struct sii9234 *ctx, ctx->supplies[3].supply =3D "cvcc12"; ret =3D devm_regulator_bulk_get(ctx->dev, 4, ctx->supplies); if (ret) { - if (ret !=3D -EPROBE_DEFER) - dev_err(ctx->dev, "regulator_bulk failed\n"); - return ret; + dev_err_probe(ctx->dev, ret, "regulator_bulk failed\n"); } =20 ctx->client[I2C_MHL] =3D client; @@ -911,10 +908,9 @@ static int sii9234_probe(struct i2c_client *client) sii9234_irq_thread, IRQF_TRIGGER_HIGH | IRQF_ONESHOT, "sii9234", ctx); - if (ret < 0) { - dev_err(dev, "failed to install IRQ handler\n"); - return ret; - } + if (ret < 0) + return dev_err_probe(dev, ret, + "failed to install IRQ handler\n"); =20 ret =3D sii9234_init_resources(ctx, client); if (ret < 0) --=20 2.50.1 From nobody Mon Oct 6 13:38:25 2025 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (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 C459F28C868 for ; Mon, 21 Jul 2025 09:43:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753091035; cv=none; b=U4upJxoLBXxgMExRo3dQZcht9daVYkgJj4bzO/OrpkPwTusl30W5aTSkaojPjYCKMggNKcaUSKvxPMuVAgqSO9rqgLrlSSB0U+KNGTtC+7q25rfPSMwyK3ssYwQwk4DqQNQX4xLaP5Cr9LD/POrysLxyUkR3JmixZYizwPtqKe8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753091035; c=relaxed/simple; bh=QHXGHFXuTsdjOdvOFvsVyCMBCyTudAbMgmdgOuKio7I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dvKC9pqO39icziB9ZUasJCKyU/v/+e96eRLqXvuTMWTx11IFocmpAXI0KgIOYsPKbCF7VWEvwJpSF9CBbDeMBZi72TuTbE2mkWL5uE/fR/YdWGFMwAS2seUpgbGi8Klwlf2mvNQ+tzP1hQFJpawsCmBD0vo5aLP+XHo2GnkugRU= 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=dqtK07zg; arc=none smtp.client-ip=95.215.58.170 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="dqtK07zg" 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=1753091030; 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: in-reply-to:in-reply-to:references:references; bh=y9J8Q6nI+kE6dVKYCKcMhHtBZibz54RqJK7hL8Sg/lQ=; b=dqtK07zgziOvMYG4HICBxksYSxrXoLe8gej8MuaecTskrorIiO/5rlzpWSGkRXfINx0ywr uKBnBQ7zhKY53AM5JW2VrW4PGDbHCgWC7Z0gc/oGdTZwCI0k7srA2lRQTc9LAFNXtPo609 SEu22n7GUk1lLr8DHyYbrQ1uTTHsMes= From: Henrik Grimler Date: Mon, 21 Jul 2025 11:43:19 +0200 Subject: [PATCH 3/3] 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: <20250721-exynos4-sii9234-driver-v1-3-2e47ed02f677@grimler.se> References: <20250721-exynos4-sii9234-driver-v1-0-2e47ed02f677@grimler.se> In-Reply-To: <20250721-exynos4-sii9234-driver-v1-0-2e47ed02f677@grimler.se> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Maciej Purski Cc: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, replicant@osuosl.org, linux-kernel@vger.kernel.org, Henrik Grimler X-Developer-Signature: v=1; a=openpgp-sha256; l=4173; i=henrik@grimler.se; h=from:subject:message-id; bh=QHXGHFXuTsdjOdvOFvsVyCMBCyTudAbMgmdgOuKio7I=; b=owEBbQGS/pANAwAKAbAHbkkLcWFrAcsmYgBofgvLFNVB0QWRIEgdw90xBe01dDqqpUqh3WSug 1b+WcQ27jqJATMEAAEKAB0WIQQsfymul4kfZBmp4s2wB25JC3FhawUCaH4LywAKCRCwB25JC3Fh a8t2CAC2Qa3XCkijFxzKacvil9jrKn6k9ZUuj6eCnPPxJ0+kakMvvk3fUIHtaZrCp+il5Mua7d5 zISfM8/1fjP/8ywj4Wi1P44KikM2LK9MR7pXBYyf73RQ4Adtjg94Tj+jLVJNG8q0xFox0JY4pA/ J/CiexNs+GYWMXrGVuMPBtvLVvAxGkiUwlSVcR7j1hWyhuhWSdPGPQUxnUANsZPHw79OT+TtZEV RhP5n/pHto2q48+sLv2rLiMjWtf1mB5Ab/1WGqI2l50RUTYWe+XOZWy6i6Cee/BIxjxRx/V4V7S ckxBDLDc11c72ZJBIblR9wcGqWGLg1HuRuu3Sm2p0ZphAucp 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. Signed-off-by: Henrik Grimler Acked-by: Marek Szyprowski Tested-by: Marek Szyprowski --- drivers/gpu/drm/bridge/sii9234.c | 89 ++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 86 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/sii9234.c b/drivers/gpu/drm/bridge/sii9= 234.c index 0e0bb1bf71fdcef788715cfd6fa158a6992def33..4d84ba01ea76816bebdbc29d48a= 041c9c6cd508e 100644 --- a/drivers/gpu/drm/bridge/sii9234.c +++ b/drivers/gpu/drm/bridge/sii9234.c @@ -19,6 +19,7 @@ =20 #include #include +#include #include #include #include @@ -26,6 +27,7 @@ #include #include #include +#include #include #include =20 @@ -170,8 +172,12 @@ struct sii9234 { struct drm_bridge bridge; struct device *dev; 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; + int i2c_error; =20 struct mutex lock; /* Protects fields below and device registers */ enum sii9234_state state; @@ -864,6 +870,70 @@ 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 *self, + unsigned long event, void *ptr) +{ + struct sii9234 *ctx =3D + container_of(self, 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)) { + 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 extcon_register_notifier(edev, EXTCON_DISP_MHL, &ctx->extcon_nb); + if (ret) { + dev_err(ctx->dev, "failed to register notifier for MHL\n"); + return ret; + } + + 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) @@ -916,12 +986,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; } @@ -930,7 +1005,15 @@ static void sii9234_remove(struct i2c_client *client) { struct sii9234 *ctx =3D i2c_get_clientdata(client); =20 - sii9234_cable_out(ctx); + if (ctx->extcon) { + extcon_unregister_notifier(ctx->extcon, EXTCON_DISP_MHL, + &ctx->extcon_nb); + 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 --=20 2.50.1