From nobody Tue Sep 29 13:20:37 2026 Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169]) (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 ACE283783B5 for ; Fri, 7 Aug 2026 22:55:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786143327; cv=none; b=sE+0Kol3KAQX6BkLxEncvUz7L8RLGNZPLZSvrGP999edyXSyZtm19JlKhOpmGkcdadYhcEsc534u9AIUHa58CW6FJ953jVM6g0JESw5PR/6TAYmJvMzMtnaEdSxBbqgxak6X95sFtmjscAaInyJ5AR7dtS6VoSTRI0cIqRHCOVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786143327; c=relaxed/simple; bh=eevLpqhIwHsFOnvjiowK9KrJpyMTAtcJAEmvkLo+q+Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=L3dMopODqvuQvQRxYOei5QuqwOpBosVQPTA3rRRcPGNb51usuCrJi03FpqxNBo8j38cbjiPaC6p6NYP4YtQxqqKSn1Iv6BCqc/WmKynEJtatgDbWuZ0AwS0hdNTpKaftMHGHg4m/hIigjxlBAEVUy9Y1i5UKdKh7/cup5emCFMU= 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=Ti7BLE/P; arc=none smtp.client-ip=209.85.128.169 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ti7BLE/P" Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-821106b5b64so1087927b3.1 for ; Fri, 07 Aug 2026 15:55:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786143325; x=1786748125; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=RxzpAl5Sab0OuL2z7FHJHf+XVUs9dZdXhmtZd62GOss=; b=Ti7BLE/P7Vqg6nJTw/QvU9W0GiBZIU8ZoP6KFzWdxDWUvPEay/FEp8YDzlfl25JuV2 ZToBR9rcfvPBKEPvqz2KVlV5kORCAvHPcLJUurZETbjBPCLQZu4rDsRZ3o1z4cmDvijv B1tmKtMi864phzvfJxr+Pwt0PRGYU40aHtFuBSwGXQzlHxo5L+A/Xn9ND2FqMd1NMFyG IAfqBp3Yer7I57Qi33vYaxWuOIVXx3pv47W2cSJ0+HT5yO88jg0dfN3ixTRNdrxk/QDs AeTdIjNCfcPBN6NqdNN30vTZykOUCYDCj8OkMOyxIfONs5LQiz6cpv2lgExOqVE9ytPu i5kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786143325; x=1786748125; h=cc:to:message-id:content-transfer-encoding:content-type :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=RxzpAl5Sab0OuL2z7FHJHf+XVUs9dZdXhmtZd62GOss=; b=ElY9520gpplzjcrTjp2B+mYmpzG/TDqLfOMN2Wvsxtrn20WKCpSdsYAuW10V9MsTCk v1ALyCjQvkedasYED76LrlhJukobCjm6RabuN9uyCZzFH3sW/aI+1yHFaqTFvNAOs8Xq Cs/6XJ99lYgQZllKSEjpJJBek4CP/i8g4GfhXTrtbi6j7lg1hCbuVaEBOGdzQ9vrMNdp c8HnCgZF3akWvzA5/1tCttje1ssGB2dRVPGMyhRPFcQTNkQvcs1+IVn3Y5ButpofQOl2 nDYdxmJmC7NWbVq7ueDdRUe9CcS+FpFctFePdqv7oYt16aArTnfG6k8lLiWIStp2u+uq X+Tg== X-Forwarded-Encrypted: i=1; AHgh+Rq/tkJF82R4LqocrGpu79VUHFO7zsEIzyAifcWcDuyxT9a/i7MxOi/w3GpGH0ZI/TkGj6vK6ZlGYBrSX70=@vger.kernel.org X-Gm-Message-State: AOJu0YwGKmfHYsxrh3EHzdu6MuCve2aTT4ewBonlqTqjKReYoA8fvSuW D8bVlyhlG5s2xBn3xXQCaOxRHo4simf9z3jegUpneopcCN2a8wnXBLta X-Gm-Gg: AR+sD13bwqXHh+rnLNOKCWQZ7EtPXI3BIpGifNXc98o2Nq9KwJZnMFOoWWyknIrwsur UfHZDC7ykAZaNW1NydwAPSiPn5ldSf6v+o5yMUhMZMt29ZGlJAD30QMNu/lw3naRImeIHlTF8oF x+iBlmRpUpO0twmJC0yVXahShAzXQYSKarK6PQpT0+REAlorXtSAztCM7rFGMjSv4Y+6I4UVUkH qk1XjyRkeQz9YteW+q9u52FSZ6gjdpJCNjowoC9shVIJcqOcnFAMMPoLHLqPpQ1va3rL2cufV9u a2p/89lGIpVPjkJb7kzp2q6jhmJGIpa4fp889ds5k+NJTw+qXSLoa1W0y2HB/2rh8yqdw5JnJw0 o1uQBTe8o341FtJ37U1Ud5bxIcMwefBzgZmk2pW4wz7I7XN5/a45uGUr9BPQ77lE8Qlo5HTeet0 DWG8HgQzoa0qOEgFQXwoR+uKU5DVczUCAjfnu7RPqLP3DcZygVp8DoRNbzbC0D0wIkycQ/NVkog bSV X-Received: by 2002:a05:690c:e1e:b0:820:c54:4811 with SMTP id 00721157ae682-825ef601648mr13529377b3.13.1786143324653; Fri, 07 Aug 2026 15:55:24 -0700 (PDT) Received: from [192.168.1.71] ([2600:1702:56e9:4b40:e3a9:78c5:641e:a58c]) by smtp.gmail.com with ESMTPSA id 00721157ae682-823f6a0f012sm18113477b3.40.2026.08.07.15.55.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Aug 2026 15:55:24 -0700 (PDT) From: Akash Sukhavasi Date: Fri, 07 Aug 2026 17:55:02 -0500 Subject: [PATCH] drm/panel: samsung-s6d16d0: Use mipi_dsi_*_multi(); fix minor bugs 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: <20260807-mipi-dsi-s6d16d0-multi-v1-1-c6179f6f3c98@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/x3MywqDMBBG4VeRWTuQRBgvryIuSjOtP3gjo6Ugv rvB5bc45yTTBDXqipOS/mBYlwxfFvQeX8tXGTGbggviGlfzjA0cDWwSvUTH8zHtYC+1hkq0FRH K8Zb0g/8z7ofrugGUuY3DaAAAAA== X-Change-ID: 20260807-mipi-dsi-s6d16d0-multi-167e236e9666 To: Doug Anderson , Linus Walleij , Neil Armstrong , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akash Sukhavasi X-Mailer: b4 0.14.3 The mipi_dsi_dcs_*() functions used by this driver are deprecated in favour of their _multi() counterparts, as noted in Documentation/gpu/todo.rst. The _multi() variants record the first error in a context structure and skip subsequent calls once an error is set, removing the need to check the return value after each command. They also log failures internally, making the per-call dev_err() calls redundant. Convert prepare(), enable(), disable(), and unprepare() to use mipi_dsi_dcs_*_multi(). unprepare() previously returned an error if mipi_dsi_dcs_enter_sleep_mode() failed, skipping RESET assertion and regulator_disable(). Because drm_panel_unprepare() does not clear panel->prepared when the callback returns an error, drm_panel_prepare() would then return early on the next call, leaving the panel powered and unable to be re-initialised. The converted code always asserts RESET, disables the regulator, and returns 0. Also fix a typo in a comment ("Enabe" -> "Enable"). Signed-off-by: Akash Sukhavasi --- Compile tested only, no hardware available. checkpatch and a W=3D1 build are clean. --- drivers/gpu/drm/panel/panel-samsung-s6d16d0.c | 56 ++++++++---------------= ---- 1 file changed, 16 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c b/drivers/gpu/dr= m/panel/panel-samsung-s6d16d0.c index 54a65abf7e89..85b4515f443d 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c @@ -47,15 +47,10 @@ static inline struct s6d16d0 *panel_to_s6d16d0(struct d= rm_panel *panel) static int s6d16d0_unprepare(struct drm_panel *panel) { struct s6d16d0 *s6 =3D panel_to_s6d16d0(panel); - struct mipi_dsi_device *dsi =3D to_mipi_dsi_device(s6->dev); - int ret; + struct mipi_dsi_multi_context dsi_ctx =3D { .dsi =3D to_mipi_dsi_device(s= 6->dev) }; =20 /* Enter sleep mode */ - ret =3D mipi_dsi_dcs_enter_sleep_mode(dsi); - if (ret) { - dev_err(s6->dev, "failed to enter sleep mode (%d)\n", ret); - return ret; - } + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx); =20 /* Assert RESET */ gpiod_set_value_cansleep(s6->reset_gpio, 1); @@ -67,7 +62,7 @@ static int s6d16d0_unprepare(struct drm_panel *panel) static int s6d16d0_prepare(struct drm_panel *panel) { struct s6d16d0 *s6 =3D panel_to_s6d16d0(panel); - struct mipi_dsi_device *dsi =3D to_mipi_dsi_device(s6->dev); + struct mipi_dsi_multi_context dsi_ctx =3D { .dsi =3D to_mipi_dsi_device(s= 6->dev) }; int ret; =20 ret =3D regulator_enable(s6->supply); @@ -83,57 +78,38 @@ static int s6d16d0_prepare(struct drm_panel *panel) gpiod_set_value_cansleep(s6->reset_gpio, 0); msleep(120); =20 - /* Enabe tearing mode: send TE (tearing effect) at VBLANK */ - ret =3D mipi_dsi_dcs_set_tear_on(dsi, + /* Enable tearing mode: send TE (tearing effect) at VBLANK */ + mipi_dsi_dcs_set_tear_on_multi(&dsi_ctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK); - if (ret) { - dev_err(s6->dev, "failed to enable vblank TE (%d)\n", ret); - goto err_power_off; - } /* Exit sleep mode and power on */ - ret =3D mipi_dsi_dcs_exit_sleep_mode(dsi); - if (ret) { - dev_err(s6->dev, "failed to exit sleep mode (%d)\n", ret); - goto err_power_off; + mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx); + if (dsi_ctx.accum_err) { + gpiod_set_value_cansleep(s6->reset_gpio, 1); + regulator_disable(s6->supply); + return dsi_ctx.accum_err; } =20 return 0; - -err_power_off: - gpiod_set_value_cansleep(s6->reset_gpio, 1); - regulator_disable(s6->supply); - - return ret; } =20 static int s6d16d0_enable(struct drm_panel *panel) { struct s6d16d0 *s6 =3D panel_to_s6d16d0(panel); - struct mipi_dsi_device *dsi =3D to_mipi_dsi_device(s6->dev); - int ret; + struct mipi_dsi_multi_context dsi_ctx =3D { .dsi =3D to_mipi_dsi_device(s= 6->dev) }; =20 - ret =3D mipi_dsi_dcs_set_display_on(dsi); - if (ret) { - dev_err(s6->dev, "failed to turn display on (%d)\n", ret); - return ret; - } + mipi_dsi_dcs_set_display_on_multi(&dsi_ctx); =20 - return 0; + return dsi_ctx.accum_err; } =20 static int s6d16d0_disable(struct drm_panel *panel) { struct s6d16d0 *s6 =3D panel_to_s6d16d0(panel); - struct mipi_dsi_device *dsi =3D to_mipi_dsi_device(s6->dev); - int ret; + struct mipi_dsi_multi_context dsi_ctx =3D { .dsi =3D to_mipi_dsi_device(s= 6->dev) }; =20 - ret =3D mipi_dsi_dcs_set_display_off(dsi); - if (ret) { - dev_err(s6->dev, "failed to turn display off (%d)\n", ret); - return ret; - } + mipi_dsi_dcs_set_display_off_multi(&dsi_ctx); =20 - return 0; + return dsi_ctx.accum_err; } =20 static int s6d16d0_get_modes(struct drm_panel *panel, --- base-commit: dc2f9f7fed1a8ea5290f9f60c6310d497e85e666 change-id: 20260807-mipi-dsi-s6d16d0-multi-167e236e9666 Best regards, --=20 Akash Sukhavasi