From nobody Tue Sep 29 07:39:37 2026 Received: from mail-yx1-f41.google.com (mail-yx1-f41.google.com [74.125.224.41]) (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 E14BB43F4D4 for ; Mon, 10 Aug 2026 23:45:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786405545; cv=none; b=V004tpiJHXmp7FQihgybZjfWScrk62iykup0iYWjc/yI03NW5v68NjJcQ1LF4UXuJYBoyt4X/yu5XGqjcZjb7uRmAmZhGMVF4lq6vd5/oruGbfesX5B3zVC5FzWIjaHTMrudHP7Pp+gpq8xjrno1naB6dLMfryz4RqyV409dXWY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786405545; c=relaxed/simple; bh=SQ0mY6+aa55V3fFdnM3tOGQrz86XAGlzDqS8o6jnoHw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=ab0KJqs4XGHmYlbRlwH8QLBdRUJEK1brMVQFVe1XgeaoCvIl42Wx6yyHkeAXWi1am0EezPNpNkvL2GoNdYyPXaH8EKzFXv6riq8DLqvcKcRmdcif+c2Rjaj7J3Tt7kGHYc4Sdv4s1NRMmFrtemg6FoNFCL8pk0Pt3RbID9rhA1A= 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=lxBE96dF; arc=none smtp.client-ip=74.125.224.41 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="lxBE96dF" Received: by mail-yx1-f41.google.com with SMTP id 956f58d0204a3-664a09bc459so3469114d50.1 for ; Mon, 10 Aug 2026 16:45:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786405543; x=1787010343; 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=7HG5CwiDv1boZ0L5kG6Cnp/M+Qv7efLzzrooJVO8CU8=; b=lxBE96dFMCm99flAA62CjywnNkGjfBJxur4oKxI65djm3MUhsHDbE8LTP/3p6MyffP eDxVAeb7uaFnK+vWbUPQqk6jr5AsD3VY743FSnUxQz3jofVdU/x+/qohUXREy+D/dWTX LKb+j/PGwRQSXSx3+sLsZ6YVaK6pnlWG2p//jYlTxfSKQZV8UGNA/EQhfBU4mc0hC9YJ sx8XkiqTESCSwWHsH3Itp4pjfE/rEGO3D3KNOpnyRM1dx4PoLLFpaTqO4IDAhcU0P2ru aNKoVL6BGSU4JuuQBuLt029VZ1VJUn1V+Y7dkf3RPXYKFJ5lIuxH/ZvuBCUDi+KImAjB eRww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786405543; x=1787010343; 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=7HG5CwiDv1boZ0L5kG6Cnp/M+Qv7efLzzrooJVO8CU8=; b=l5kkrFqrYEhDIi1hwxLEa4ttmwUWLvtIDX0w+eNuMjJWLgwJGXd3ETlM99DMhmZeHq IAgkaqGznAUzJyn7vfzM09S03Gsdb4CKNU4dyJHXQS+fLVxIQgWClQ6Haib9wV4+ZblI HH89RGpd39Us1MKqEE3M2zwcFdolSfYs1QbfMeUQEQhdC193uKr8uavk05oIfKhwWJDy BsX9/AtHbcpK51mDwihEqnKcimHoxDT8Kmx5cgTkJhPs9mYChFMRXqUBN8Ww4aU1wocX ODdXMkUVQHRDG6e7AZXry566xeJ6gvH+IRq6eFwVB/zRNd6hrFAq1G7Ukx3qaHSsEiRs 82Hw== X-Forwarded-Encrypted: i=1; AHgh+Rotqv+FZS74WoWtfQb5J3mq26KdPD/aigwSvKCvbgz5ONemBJQEgdrW98q0w1+NOwmnfPPGiiYM2ZiptfY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4yDZBB5ur7bPHznmUoEo+zb/3Q+mSviTJ34crxwBmQ9ane/M1 gOptSZNqyhWPwtYFWn+LCjuJHHwexD13nJqYqDPetqUaj0C1+KPeQY4M X-Gm-Gg: AR+sD13oKdmDUEx6UvfTXLjySuSufdmYJa8Vwtkbv2NUmM2XV0yx5aRZ8hh6sv+jEmi mo8uCrNri0NaiNAcdu/bnEEmIS/i8p/jHIfx6SdIs8nv5Y5sWWoVHMB2wj3/tz7kZscCLQ4oDGl y8cqzVH+IEAT/SIQQg6g+Is5qhCfuqelhgkKKcj6RbU58KpDPzdEzfUbD/mq1YPDLTLtOR139Sf n55G6Z9oJwQC9xIS2BOMpJbOTa/X1MHlePP9mi9RCwxiiclKfIU2wMY3OIkaHm/ov/noFED/ac5 kykBEqeRDFsnXIIy09TH2FzwatmxpuH+cbCwWUDBer19V8Frg/h0cfE5UsFCLsSCkaG6wRfsony qh3o60eB368/U815XpSniI/jhH83kSb4saeJT87yfaB4OtOT8Ll0Ak/tQm4y3C7Nx1L2xPokr2U H4VXAqYN3CTM1iScKjF0yrCuDqBNmERO16BtqCAO5V572+UxeNFcildvllL4D8TJdBp5cr4hVPs mbsqy1VO1cmJiQ= X-Received: by 2002:a53:4906:0:b0:668:9567:db70 with SMTP id 956f58d0204a3-66b12520805mr2969989d50.40.1786405542722; Mon, 10 Aug 2026 16:45:42 -0700 (PDT) Received: from [192.168.1.71] ([2600:1702:56e9:4b40:e3a9:78c5:641e:a58c]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-66acae62283sm7277044d50.13.2026.08.10.16.45.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 16:45:41 -0700 (PDT) From: Akash Sukhavasi Date: Mon, 10 Aug 2026 18:45:40 -0500 Subject: [PATCH v2] 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: <20260810-mipi-dsi-s6d16d0-multi-v2-1-8fcdfbf9bbd2@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/4WNQQqDMBBFryKz7pQkwqhd9R7iQpJRB4xKYkOLe PemXqDL9+C/f0DkIBzhURwQOEmUdclgbgXYqV9GRnGZwShDqlYVetkEXRSM5DQ5hf4174KaKjY lcUNEkMdb4EHeV7jtMk8S9zV8rp+kf/ZvMmnUaElXzUBDaZv6Ofpe5rtdPXTneX4BAiD24bwAA AA= 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 Reviewed-by: Neil Armstrong --- Compile tested only, no hardware available. checkpatch and a W=3D1 build are clean. --- Changes in v2: - Keep intermediate dsi variable for readability, per Neil's review. - Add comment explaining why accum_err is not checked in unprepare(). - Simplify prepare() to a single return path. - Link to v1: https://lore.kernel.org/r/20260807-mipi-dsi-s6d16d0-multi-v1-= 1-c6179f6f3c98@gmail.com --- drivers/gpu/drm/panel/panel-samsung-s6d16d0.c | 55 +++++++++--------------= ---- 1 file changed, 17 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c b/drivers/gpu/dr= m/panel/panel-samsung-s6d16d0.c index 54a65abf7e89..e734fffa45a4 100644 --- a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c +++ b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c @@ -48,14 +48,10 @@ 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 dsi }; =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; - } + /* Enter sleep mode; error does not prevent power-off */ + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx); =20 /* Assert RESET */ gpiod_set_value_cansleep(s6->reset_gpio, 1); @@ -68,6 +64,7 @@ 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 dsi }; int ret; =20 ret =3D regulator_enable(s6->supply); @@ -83,57 +80,39 @@ 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); } =20 - return 0; - -err_power_off: - gpiod_set_value_cansleep(s6->reset_gpio, 1); - regulator_disable(s6->supply); - - return ret; + return dsi_ctx.accum_err; } =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 dsi }; =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 dsi }; =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