From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 7B87D3BBF7 for ; Fri, 26 Apr 2024 23:59:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175948; cv=none; b=j33qkRLJKy7zopBr8o3RgRMTewxcx6F6VBdOoQiREfz/ocXteVMf7LZTpmOUSvemaOwK/98bAQxMY5Re3dLgVJnhku+7SAefmTzN2l6W+fIqf9wz3GPeqauyuWFs+gi/2mUImvHti+hSp62zQYMWw3/x7t1vywSHEqwn3pWV/H8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175948; c=relaxed/simple; bh=pjcvWuzCy6xoTHSAqk88pHgPJcX+90n8EGDGZPTH4b4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dO6HohEpUU41zY113e31wIjdUgNy2qfYIh5/gwbn1PtAc7uz/0XE4avZ0JqufsDzynbZjKKNnRomGBTXXt/pZwCX4EaGMjvltHA9Tv4i9w7fNYFOI2i4IbPtdvGloe54bDy7YOTIAxCO9iLz3ejEkLsGdL/z8zTSJdqh8I6E5uY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=OfM7t9HQ; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="OfM7t9HQ" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2a55a3d0b8eso1991360a91.1 for ; Fri, 26 Apr 2024 16:59:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175947; x=1714780747; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yeW0pSyEBhS0ojeIyWBVzu7M8GLRFtARAotr9ut3TYg=; b=OfM7t9HQDyxMxmzxmHClkOP4Ik3WvzSl/qFYsmNQ9h3prM4oFE92pn9IXX6zncuerK FkFEiv3lGxHy6IP/dey0qeYuVDcOcwgs0nNg9FSbPKDZmsuOkroyyMhKj4nedA8k0LkS xB83gCpr38MThJStJw/PneomVQw9OIceVTFWc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175947; x=1714780747; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yeW0pSyEBhS0ojeIyWBVzu7M8GLRFtARAotr9ut3TYg=; b=lHoebaq681A09aKjWFcnGk0CMU4r2QDnEB8fsgL2q0UT4oic0U1sPGbLT0ltudCXBh /HW4blA80idguWaCZ9H1n727ZvarDNzOnwE1Z+6OvNFKOLNxCikZUgdpsKDG1fqi1dfv j3t3G3qwkVH5aHR+C0bdTvxcalh7LxZ1lG/WXK55VYLwQ/FdLBrsJitDQwbIrnX92elr Qo2gXzfMPzIv8hXlLCJM/n8JvZeFTxHuVtr8HPlgV6DehgXZGDVe5aMQ/TzE++253B4O mFVWwz9J9E+mDnbdBJRofRH8jw7L2VI+Yk6ugywvA1q/rM939V9v2mbKNImLb/YlWXQH wUKw== X-Forwarded-Encrypted: i=1; AJvYcCXONRyeOnYudwAsi4cWuDvlffw+qLryIRMMqmSPK8cNdQjGRq+A/AsZGiqxe8ILYBXfNSZ5Sxu0AlowFS7ZSe/GuPW1VvKCgSH4yyUZ X-Gm-Message-State: AOJu0YyftyR7B3IVRfXbyaE5tm+/1TDeM+cMGXrAB6AicyTy5L/2ywnt wam0vw3P+AoEmfk6V5IC1yAujWjTTMt9UCPrXIqnQfeI8kvWNUP0N5k0HqOL3g== X-Google-Smtp-Source: AGHT+IH6XTJ9QQDWPzgo8X8I8bDLXm7/WGqdQG4aZWPTMylSuC2+pMH0ddw57O7ZuDywVmWBbG/TSg== X-Received: by 2002:a17:90a:1f88:b0:2aa:8130:e3eb with SMTP id x8-20020a17090a1f8800b002aa8130e3ebmr1501128pja.11.1714175946787; Fri, 26 Apr 2024 16:59:06 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:06 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 1/8] drm/mipi-dsi: Fix theoretical int overflow in mipi_dsi_dcs_write_seq() Date: Fri, 26 Apr 2024 16:58:34 -0700 Message-ID: <20240426165839.v2.1.I30fa4c8348ea316c886ef8a522a52fed617f930d@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The mipi_dsi_dcs_write_seq() macro makes a call to mipi_dsi_dcs_write_buffer() which returns a type ssize_t. The macro then stores it in an int and checks to see if it's negative. This could theoretically be a problem if "ssize_t" is larger than "int". To see the issue, imagine that "ssize_t" is 32-bits and "int" is 16-bits, you could see a problem if there was some code out there that looked like: mipi_dsi_dcs_write_seq(dsi, cmd, <32767 bytes as arguments>); ...since we'd get back that 32768 bytes were transferred and 32768 stored in a 16-bit int would look negative. Though there are no callsites where we'd actually hit this (even if "int" was only 16-bit), it's cleaner to make the types match so let's fix it. Fixes: 2a9e9daf7523 ("drm/mipi-dsi: Introduce mipi_dsi_dcs_write_seq macro") Signed-off-by: Douglas Anderson --- Changes in v2: - New include/drm/drm_mipi_dsi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 82b1cc434ea3..b3576be22bfa 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -337,12 +337,12 @@ int mipi_dsi_dcs_get_display_brightness_large(struct = mipi_dsi_device *dsi, do { \ static const u8 d[] =3D { cmd, seq }; \ struct device *dev =3D &dsi->dev; \ - int ret; \ + ssize_t ret; \ ret =3D mipi_dsi_dcs_write_buffer(dsi, d, ARRAY_SIZE(d)); \ if (ret < 0) { \ dev_err_ratelimited( \ dev, "sending command %#02x failed: %d\n", \ - cmd, ret); \ + cmd, (int)ret); \ return ret; \ } \ } while (0) --=20 2.44.0.769.g3c40516874-goog From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 BECB33E49E for ; Fri, 26 Apr 2024 23:59:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175951; cv=none; b=LfVyXvxafDUFPCd7uKKpDvTfZQMD9vSbOABUpdWOE7pBJ9tcjff2IHdEsfsrOmNleQ9wb9sFvvR/5KvA93RPOSeVQ0pbhBAuW0rFyRMkSx1K8jGlr77g6Z/xzFvfwEeZ5mJIvagjMPSeYvLk23TELrTAxrJTghHmjIQtJx8Zbn8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175951; c=relaxed/simple; bh=WqPuE563UwzkUYg+A+e/tOkF12emw0r8vHcGZy9u70I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g8ysSgmgn+1sgumy7kNN8pDsBOvQyaxyMEG1/+ntzWw5ZWTNJpUYqKt304N0G3Ik6sw+10yJ5J7pKjw3X5FNfhiHwjlytw38PaE0RJ0ACvEcs6A+zOpjJRqACum3pcs75slKgLlQnhz0i3B0+ovQPszEemoeTvZpQ8kPf7LFB2g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=WZIFEwFN; arc=none smtp.client-ip=209.85.216.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="WZIFEwFN" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2abf9305afcso2011220a91.1 for ; Fri, 26 Apr 2024 16:59:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175949; x=1714780749; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+qxb7o7HPo8viKRZLe9p4BQ5iqFreL178XpJGb/dU1Y=; b=WZIFEwFNOliVwUKSJMy/cBtv09XIqNAJQsXZQT6FCLWtv2ZbkpmcW+knTdt2NZojuh 8k7OsysNboGGnrrHCPrTppWgi41/B4QkqztVmdABCyn1w4+zA5cMzSAp6vHL30x3sdND nqn43T4N+mnGaIfTZhliA4PEFUI+coxVy7c0E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175949; x=1714780749; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+qxb7o7HPo8viKRZLe9p4BQ5iqFreL178XpJGb/dU1Y=; b=ljxN8SH02YIWs/7ER9/5colTVXqZwSC/fidLFifa+lO87aYD5QMTyPA2xSyv76Rjih A7oyJt3PJ7f0F8VJHNvpwBoHR4R+Hq0JyutVjCjF6/3dXp3l0s248NV+Dmds2Ee6HtB4 jWUJtpaRNg6rQs99jfCMX0g0XPkWG5M+B8liCaZDuDs8BqTMwpiY2mYQypPnXJ0iiTZr ceVssMcQqkgMNj0jK4Q5hynl2OUBGRnbuvfX5HExKtLBWF7WmBuKc3VAgjkLwTR6XDua zlckvMfg9hFunjhm29B8GK7oUx9QckUWi7gSUk2S8Q71H4pmO+8u4LvtI5nUtDDLPUeV zyWg== X-Forwarded-Encrypted: i=1; AJvYcCU5yP7KdlgTK4T1Cx6TW2VHPR9NLdT2VrVofhvmwCxMaupErrpGSTnaKt8jYF9UI1cChwIdv4PC/HqWLpR7f2jhO9ldHkpX8JC4mS+K X-Gm-Message-State: AOJu0YxtX64IemZJjqPnD2bUCFfYvTZ5NP2inzGE0M2KmUalylGjH+1c RWxsfyLKeE4AvyQufMkYCij3kuzVsIFDSi1zJkUx8OTy2ZsCCCUJdmgFufP/Lg== X-Google-Smtp-Source: AGHT+IFdpJhiAC1+tnidCuTWvB9wh2OGWr9Jkzg34ey8UBJO1FSWr0ht1iKJrR93nvquMsaf0LtUPg== X-Received: by 2002:a17:90a:af83:b0:2a5:733c:3105 with SMTP id w3-20020a17090aaf8300b002a5733c3105mr1149099pjq.26.1714175949151; Fri, 26 Apr 2024 16:59:09 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:08 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 2/8] drm/mipi-dsi: Fix theoretical int overflow in mipi_dsi_generic_write_seq() Date: Fri, 26 Apr 2024 16:58:35 -0700 Message-ID: <20240426165839.v2.2.Iadb65b8add19ed3ae3ed6425011beb97e380a912@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The mipi_dsi_generic_write_seq() macro makes a call to mipi_dsi_generic_write() which returns a type ssize_t. The macro then stores it in an int and checks to see if it's negative. This could theoretically be a problem if "ssize_t" is larger than "int". To see the issue, imagine that "ssize_t" is 32-bits and "int" is 16-bits, you could see a problem if there was some code out there that looked like: mipi_dsi_generic_write_seq(dsi, <32768 bytes as arguments>); ...since we'd get back that 32768 bytes were transferred and 32768 stored in a 16-bit int would look negative. Though there are no callsites where we'd actually hit this (even if "int" was only 16-bit), it's cleaner to make the types match so let's fix it. Fixes: a9015ce59320 ("drm/mipi-dsi: Add a mipi_dsi_dcs_write_seq() macro") Signed-off-by: Douglas Anderson --- Changes in v2: - New include/drm/drm_mipi_dsi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index b3576be22bfa..5de2bd62448b 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -318,11 +318,11 @@ int mipi_dsi_dcs_get_display_brightness_large(struct = mipi_dsi_device *dsi, do { \ static const u8 d[] =3D { seq }; \ struct device *dev =3D &dsi->dev; \ - int ret; \ + ssize_t ret; \ ret =3D mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \ if (ret < 0) { \ dev_err_ratelimited(dev, "transmit data failed: %d\n", \ - ret); \ + (int)ret); \ return ret; \ } \ } while (0) --=20 2.44.0.769.g3c40516874-goog From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) (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 D5CDA40856 for ; Fri, 26 Apr 2024 23:59:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175953; cv=none; b=X2t30j7EKsBSkrwxKHQ96RFGzOzqScTxzhfn77b2+bNK3ahha0DmO10CiuqxR7xx6cNZvlaCwVjfEBC/dvW6d9atx0Q123lz68hbSnotNQOlRanXQpyDx450ml7hi/VnP1nozzns8nq5LZQyZy/mItZXrx556DY//+I0Z/xSlvA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175953; c=relaxed/simple; bh=C6xj06k1NcWfIhWMmbNoNRRZycSp5YpvE6fUOBk/JmU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b0dtEeB1Cg+BvguBHYyatjEuvCzhwbL61JwHWMhvZ6b2K7JEHPGlmcVKXDvE0ixyY+brwNi7IVvoAypXZIRyt9aF2IIN0IZ0Y5l4yvWm9nc+3kth97+XnhT8rAbbZeArTRI7AxqdTba7CN3xqF3KXr6w9COHEQdbOw6SDhtDqTc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=TsfvTDoq; arc=none smtp.client-ip=209.85.215.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="TsfvTDoq" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-5c66b093b86so2862968a12.0 for ; Fri, 26 Apr 2024 16:59:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175951; x=1714780751; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=olX2nqFQ/HIiDMzF6dlzKwUQwqcWWwyQPZ/a2dqsVIU=; b=TsfvTDoq70OwVweycO8NjgSVN6EJ8ilTYp8p0+dvlnwPA4GS6b1fDloY/tCMiBM7F9 FvCiLKyQHgzbjnLhQj51HDwP/H0+e0q6IlEgldaV83MR9EW/qeFQkrh9PxNCjMyXUSj+ +yrD6crmzvp98gRa1/9DJaVokZ0Lzw+JNIvvM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175951; x=1714780751; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=olX2nqFQ/HIiDMzF6dlzKwUQwqcWWwyQPZ/a2dqsVIU=; b=ctRYoMs1HcJKTf8I0m0NqV/ikBBNH/Itj7yXC7JNT5Hjc/ALPO+Gu+cpZwHGhG9LlY 7SQGoQpyqVu2jKy1dl6wt4lNx0OivsKN5BATGDD9FdKVWtu8fseYLjJpnwwSqrsV4l9j 5eXdgwPaGkBL+ep2ODgpUERVbiKetYDeBJdYZahNkN9U3MSpAQqcKPTSFMMkQqFigvMu /V+Yzlu+IyiRKEFtYNVSPKbZUe90cGx+lKUFSN56luCK5ggUejBFaRbpGSDBWDEqMKv4 2jfWMeBNqrFq1UkbR+tPcHN6IqNIq4OxLFMl0Nh+aK7/4FYnKk+MIVgO4hnCDrmnp12x TT7w== X-Forwarded-Encrypted: i=1; AJvYcCUNtr8kFX33eq7ukRj0b5Bace/dhLTXZ9JgFhUxbic5fpaAlw1i52rQTCkWMaVkeqD2CdxA5EURL7Ojru3QAk9krvSxNVd3FaxjspQy X-Gm-Message-State: AOJu0Yy7fNzm7za04BidCg1kG6OEsdE1te94eH+ni4dFvkwdZpRXkSa8 P1nMdfnCH5JbU4pyMBTaMJ144Rv96IbABljFd03vklCbXeSFrctbtAkz8fIrjw== X-Google-Smtp-Source: AGHT+IERSyX1MgdxL1cw3vNSzu1k3ve74uWuziWR/EytMBtjf7Aw/D5Xwy6rDaVwR+TQjtAuEB5fNw== X-Received: by 2002:a17:90a:d916:b0:2af:3b61:318a with SMTP id c22-20020a17090ad91600b002af3b61318amr6231601pjv.9.1714175951177; Fri, 26 Apr 2024 16:59:11 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:10 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 3/8] drm/mipi-dsi: Reduce driver bloat of mipi_dsi_*_write_seq() Date: Fri, 26 Apr 2024 16:58:36 -0700 Message-ID: <20240426165839.v2.3.Id15fae80582bc74a0d4f1338987fa375738f45b9@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Through a cooperative effort between Hsin-Yi Wang and Dmitry Baryshkov, we have realized the dev_err_ratelimited() in the mipi_dsi_*_write_seq() macros was causing quite a bit of bloat to the kernel. Let's hoist this call into drm_mipi_dsi.c by adding a "chatty" version of the functions that includes the print. While doing this, add a bit more comments to these macros making it clear that they print errors and also that they return out of _the caller's_ function. Without any changes to clients this gives a dramatic savings. Building with my build system shows one example: $ scripts/bloat-o-meter \ .../before/panel-novatek-nt36672e.ko \ .../after/panel-novatek-nt36672e.ko add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-21496 (-21496) Function old new delta nt36672e_1080x2408_60hz_init._rs 10320 - -10320 nt36672e_1080x2408_60hz_init 17412 6236 -11176 Total: Before=3D32147, After=3D10651, chg -66.87% Note that given the change in location of the print it's harder to include the "cmd" in the printout for mipi_dsi_dcs_write_seq() since, theoretically, someone could call the new chatty function with a zero-size array and it would be illegal to dereference data[0]. There's a printk format to print the whole buffer and this is probably more useful for debugging anyway. Given that we're doing this for mipi_dsi_dcs_write_seq(), let's also print the buffer for mipi_dsi_generic_write_seq() in the error case. It should be noted that the current consensus of DRM folks is that the mipi_dsi_*_write_seq() should be deprecated due to the non-intuitive return behavior. A future patch will formally mark them as deprecated and provide an alternative. Signed-off-by: Douglas Anderson Reviewed-by: Dmitry Baryshkov --- Changes in v2: - Add some comments to the macros about printing and returning. - Modify commit message now that this is part of a series. - Change the way err value is handled in prep for next patch. - Rebased upon patches to avoid theoretical int overflow. drivers/gpu/drm/drm_mipi_dsi.c | 56 ++++++++++++++++++++++++++++++++++ include/drm/drm_mipi_dsi.h | 41 +++++++++++++------------ 2 files changed, 78 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 795001bb7ff1..1e062eda3b88 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -764,6 +764,34 @@ ssize_t mipi_dsi_generic_write(struct mipi_dsi_device = *dsi, const void *payload, } EXPORT_SYMBOL(mipi_dsi_generic_write); =20 +/** + * mipi_dsi_generic_write_chatty() - mipi_dsi_generic_write() w/ an error = log + * @dsi: DSI peripheral device + * @payload: buffer containing the payload + * @size: size of payload buffer + * + * Like mipi_dsi_generic_write() but includes a dev_err_ratelimited() + * call for you and returns 0 upon success, not the number of bytes sent. + * + * Return: 0 on success or a negative error code on failure. + */ +int mipi_dsi_generic_write_chatty(struct mipi_dsi_device *dsi, + const void *payload, size_t size) +{ + struct device *dev =3D &dsi->dev; + ssize_t ret; + + ret =3D mipi_dsi_generic_write(dsi, payload, size); + if (ret < 0) { + dev_err_ratelimited(dev, "sending generic data %*ph failed: %d\n", + (int)size, payload, (int)ret); + return ret; + } + + return 0; +} +EXPORT_SYMBOL(mipi_dsi_generic_write_chatty); + /** * mipi_dsi_generic_read() - receive data using a generic read packet * @dsi: DSI peripheral device @@ -852,6 +880,34 @@ ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_devi= ce *dsi, } EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer); =20 +/** + * mipi_dsi_dcs_write_buffer_chatty - mipi_dsi_dcs_write_buffer() w/ an er= ror log + * @dsi: DSI peripheral device + * @data: buffer containing data to be transmitted + * @len: size of transmission buffer + * + * Like mipi_dsi_dcs_write_buffer() but includes a dev_err_ratelimited() + * call for you and returns 0 upon success, not the number of bytes sent. + * + * Return: 0 on success or a negative error code on failure. + */ +int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_device *dsi, + const void *data, size_t len) +{ + struct device *dev =3D &dsi->dev; + ssize_t ret; + + ret =3D mipi_dsi_dcs_write_buffer(dsi, data, len); + if (ret < 0) { + dev_err_ratelimited(dev, "sending dcs data %*ph failed: %d\n", + (int)len, data, (int)ret); + return ret; + } + + return 0; +} +EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer_chatty); + /** * mipi_dsi_dcs_write() - send DCS write command * @dsi: DSI peripheral device diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 5de2bd62448b..6d68d9927f46 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -256,6 +256,8 @@ int mipi_dsi_picture_parameter_set(struct mipi_dsi_devi= ce *dsi, =20 ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *pa= yload, size_t size); +int mipi_dsi_generic_write_chatty(struct mipi_dsi_device *dsi, + const void *payload, size_t size); ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *par= ams, size_t num_params, void *data, size_t size); =20 @@ -279,6 +281,8 @@ enum mipi_dsi_dcs_tear_mode { =20 ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi, const void *data, size_t len); +int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_device *dsi, + const void *data, size_t len); ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len); ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, @@ -311,40 +315,39 @@ int mipi_dsi_dcs_get_display_brightness_large(struct = mipi_dsi_device *dsi, =20 /** * mipi_dsi_generic_write_seq - transmit data using a generic write packet + * + * This macro will print errors for you and will RETURN FROM THE CALLING + * FUNCTION (yes this is non-intuitive) upon error. + * * @dsi: DSI peripheral device * @seq: buffer containing the payload */ #define mipi_dsi_generic_write_seq(dsi, seq...) = \ do { \ static const u8 d[] =3D { seq }; \ - struct device *dev =3D &dsi->dev; \ - ssize_t ret; \ - ret =3D mipi_dsi_generic_write(dsi, d, ARRAY_SIZE(d)); \ - if (ret < 0) { \ - dev_err_ratelimited(dev, "transmit data failed: %d\n", \ - (int)ret); \ + int ret; \ + ret =3D mipi_dsi_generic_write_chatty(dsi, d, ARRAY_SIZE(d)); \ + if (ret < 0) \ return ret; \ - } \ } while (0) =20 /** * mipi_dsi_dcs_write_seq - transmit a DCS command with payload + * + * This macro will print errors for you and will RETURN FROM THE CALLING + * FUNCTION (yes this is non-intuitive) upon error. + * * @dsi: DSI peripheral device * @cmd: Command * @seq: buffer containing data to be transmitted */ -#define mipi_dsi_dcs_write_seq(dsi, cmd, seq...) = \ - do { \ - static const u8 d[] =3D { cmd, seq }; \ - struct device *dev =3D &dsi->dev; \ - ssize_t ret; \ - ret =3D mipi_dsi_dcs_write_buffer(dsi, d, ARRAY_SIZE(d)); \ - if (ret < 0) { \ - dev_err_ratelimited( \ - dev, "sending command %#02x failed: %d\n", \ - cmd, (int)ret); \ - return ret; \ - } \ +#define mipi_dsi_dcs_write_seq(dsi, cmd, seq...) = \ + do { \ + static const u8 d[] =3D { cmd, seq }; \ + int ret; \ + ret =3D mipi_dsi_dcs_write_buffer_chatty(dsi, d, ARRAY_SIZE(d)); \ + if (ret < 0) \ + return ret; \ } while (0) =20 /** --=20 2.44.0.769.g3c40516874-goog From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 D137241C84 for ; Fri, 26 Apr 2024 23:59:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175955; cv=none; b=oJHbK9nAPFAt0BF/Zw0NfkjzrUDqNbEDJEiHOCQvgJrJbKnOSXrDdsiEjzlHNjafeS3UfcajBOV+N1G3dDSWGi9KiAtuJsi2JODzVZvSaApmwB7U6VpLUSUCMRqKcQIlDESN2ppGlIza15JmTeTHwgX+xO3BJKObNrWLSb5A64E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175955; c=relaxed/simple; bh=gm8Btr33gsfZ2Zdb+0CU+2/aCKePFGVDDNH4cIM7I+4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s9tG07/kpf3z0YqbKFaLjb58m7b69U2/wWJPPcIy5roNUPnjMgTcBuVXy+0UXroFCfkPEedfd//E4RlBdibeIYa9XoC3hcNFcnXZ2o3rV5HEXtysHuM0lQ6eBkQo1dmDpCSxC9EgUYfvV4GbqJmuCadhNPfFEk5glAtZAXTS2BA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=DHksFrWI; arc=none smtp.client-ip=209.85.216.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="DHksFrWI" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2a2d82537efso1933958a91.2 for ; Fri, 26 Apr 2024 16:59:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175953; x=1714780753; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qBjUcIaEc8iGmyPg9mQmkly7c03mHZYaJKm1esFMQxw=; b=DHksFrWIMCFpCdXGpD69IYeyu7+GQM5IF3YAnfT4bpcZkwDLgSZtbrEumTyYt5Xtgh ukaaUA6EfNOLa25YrRq8t7guX8SKfSyTLi/J6le3o07ssVSb5TXPxaBKIQTHLN8Wte/O OhYzO52ogamuE63K5rF/Ws9oei4mNcv6N90zg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175953; x=1714780753; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qBjUcIaEc8iGmyPg9mQmkly7c03mHZYaJKm1esFMQxw=; b=jZFXsA+zJ1YIZoEUmldNQp7MKuD2DejAAZAt1fH7ClCL/Yrn6Kc9YT+7HhLJgt5RRH jX6eH78xNSUtkX2xXfLI0wLKM2fGLBXR2HMCJwAGY9H4SSYRYd2DZruHr6t8yNW023// skf6D48wDltY31WbrpcLg0S+mJbcxKsJ4Gme9RF8vCV6KM1tIbKmIyF7muvCOCQu5ihY pEfoQtZ9WjwFq/9fm7fyZx6FIxPhioh8Fv1NWNwejxic7vq8UmQaMUEXus61cLM3qjRn TF49VV7NUzvJl7V20zDyiH75YQ0ZPwfRh+8TOIf2wDneyeE6I8Dol3suEqZ0i+aXiiod kBGg== X-Forwarded-Encrypted: i=1; AJvYcCU2c7683NjcXOxWMVDeg10XgstiycNFvG9cdoyAWr5oVjqWbfAcC0HciVArSKr1PKf3xgWO2jecs8En1TKV0E/6x2TpZ50IWQDdqurO X-Gm-Message-State: AOJu0YxIpKOc670EZKcNnxmwsITlKxg8fhfNqB9agAvNRtsKFoCoB90N uSSrDCZIJGUUEJtppPhd9v/lGSLDW7pPYXSsnlCOaqH1OVQv5q6VJR8tKWc5/A== X-Google-Smtp-Source: AGHT+IH1PhYY3WBPoDEiPEXLueN76WMpx2GULFedhlTBn3BonV/Gtq+GgZYL4BDL2EqdSQTU8oKeBA== X-Received: by 2002:a17:90b:538f:b0:2ac:5d2d:12ac with SMTP id sv15-20020a17090b538f00b002ac5d2d12acmr5101290pjb.5.1714175953183; Fri, 26 Apr 2024 16:59:13 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:12 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 4/8] drm/mipi-dsi: Introduce mipi_dsi_*_write_seq_multi() Date: Fri, 26 Apr 2024 16:58:37 -0700 Message-ID: <20240426165839.v2.4.Ie94246c30fe95101e0e26dd5f96e976dbeb8f242@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current mipi_dsi_*_write_seq() macros are non-intutitive because they contain a hidden "return" statement that will return out of the _caller_ of the macro. Let's mark them as deprecated and instead introduce some new macros that are more intuitive. These new macros are less optimal when an error occurs but should behave more optimally when there is no error. Specifically these new macros cause smaller code to get generated and the code size savings (less to fetch from RAM, less cache space used, less RAM used) are important. Since the error case isn't something we need to optimize for and these new macros are easier to understand and more flexible, they should be used. After converting to use these new functions, one example shows some nice savings while also being easier to understand. $ scripts/bloat-o-meter \ ...after/panel-novatek-nt36672e.ko \ ...ctx/panel-novatek-nt36672e.ko add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-988 (-988) Function old new delta nt36672e_1080x2408_60hz_init 6236 5248 -988 Total: Before=3D10651, After=3D9663, chg -9.28% Signed-off-by: Douglas Anderson Reviewed-by: Linus Walleij --- Right now this patch introduces two new functions in drm_mipi_dsi.c. Alternatively we could have changed the prototype of the "chatty" functions and made the deprecated macros adapt to the new prototype. While this sounds nice, it bloated callers of the deprecated functioin a bit because it caused the compiler to emit less optimal code. It doesn't seem terrible to add two more functions, so I went that way. Changes in v2: - New drivers/gpu/drm/drm_mipi_dsi.c | 56 +++++++++++++++++++++++++++++++++ include/drm/drm_mipi_dsi.h | 57 ++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index 1e062eda3b88..b7c75a4396e6 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -792,6 +792,34 @@ int mipi_dsi_generic_write_chatty(struct mipi_dsi_devi= ce *dsi, } EXPORT_SYMBOL(mipi_dsi_generic_write_chatty); =20 +/** + * mipi_dsi_generic_write_multi() - mipi_dsi_generic_write_chatty() w/ acc= um_err + * @ctx: Context for multiple DSI transactions + * @payload: buffer containing the payload + * @size: size of payload buffer + * + * Like mipi_dsi_generic_write_chatty() but deals with errors in a way that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_generic_write_multi(struct mipi_dsi_multi_context *ctx, + const void *payload, size_t size) +{ + struct mipi_dsi_device *dsi =3D ctx->dsi; + struct device *dev =3D &dsi->dev; + ssize_t ret; + + if (ctx->accum_err) + return; + + ret =3D mipi_dsi_generic_write(dsi, payload, size); + if (ret < 0) { + ctx->accum_err =3D ret; + dev_err_ratelimited(dev, "sending generic data %*ph failed: %d\n", + (int)size, payload, ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_generic_write_multi); + /** * mipi_dsi_generic_read() - receive data using a generic read packet * @dsi: DSI peripheral device @@ -908,6 +936,34 @@ int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_d= evice *dsi, } EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer_chatty); =20 +/** + * mipi_dsi_dcs_write_buffer_multi - mipi_dsi_dcs_write_buffer_chatty() w/= accum_err + * @ctx: Context for multiple DSI transactions + * @data: buffer containing data to be transmitted + * @len: size of transmission buffer + * + * Like mipi_dsi_dcs_write_buffer_chatty() but deals with errors in a way = that + * makes it convenient to make several calls in a row. + */ +void mipi_dsi_dcs_write_buffer_multi(struct mipi_dsi_multi_context *ctx, + const void *data, size_t len) +{ + struct mipi_dsi_device *dsi =3D ctx->dsi; + struct device *dev =3D &dsi->dev; + ssize_t ret; + + if (ctx->accum_err) + return; + + ret =3D mipi_dsi_dcs_write_buffer(dsi, data, len); + if (ret < 0) { + ctx->accum_err =3D ret; + dev_err_ratelimited(dev, "sending dcs data %*ph failed: %d\n", + (int)len, data, ctx->accum_err); + } +} +EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer_multi); + /** * mipi_dsi_dcs_write() - send DCS write command * @dsi: DSI peripheral device diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 6d68d9927f46..379594649a42 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -197,6 +197,22 @@ struct mipi_dsi_device { struct drm_dsc_config *dsc; }; =20 +/** + * struct mipi_dsi_multi_context - Context to call multiple MIPI DSI funcs= in a row + * @dsi: Pointer to the MIPI DSI device + * @accum_err: Storage for the accumulated error over the multiple calls. = Init + * to 0. If a function encounters an error then the error code will be + * stored here. If you call a function and this points to a non-zero + * value then the function will be a noop. This allows calling a function + * many times in a row and just checking the error at the end to see if + * any of them failed. + */ + +struct mipi_dsi_multi_context { + struct mipi_dsi_device *dsi; + int accum_err; +}; + #define MIPI_DSI_MODULE_PREFIX "mipi-dsi:" =20 #define to_mipi_dsi_device(__dev) container_of_const(__dev, struct mipi_ds= i_device, dev) @@ -258,6 +274,8 @@ ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *= dsi, const void *payload, size_t size); int mipi_dsi_generic_write_chatty(struct mipi_dsi_device *dsi, const void *payload, size_t size); +void mipi_dsi_generic_write_multi(struct mipi_dsi_multi_context *ctx, + const void *payload, size_t size); ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *par= ams, size_t num_params, void *data, size_t size); =20 @@ -283,6 +301,8 @@ ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_devic= e *dsi, const void *data, size_t len); int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_device *dsi, const void *data, size_t len); +void mipi_dsi_dcs_write_buffer_multi(struct mipi_dsi_multi_context *ctx, + const void *data, size_t len); ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len); ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, @@ -319,6 +339,9 @@ int mipi_dsi_dcs_get_display_brightness_large(struct mi= pi_dsi_device *dsi, * This macro will print errors for you and will RETURN FROM THE CALLING * FUNCTION (yes this is non-intuitive) upon error. * + * Because of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. + * Please replace calls of it with mipi_dsi_generic_write_seq_multi(). + * * @dsi: DSI peripheral device * @seq: buffer containing the payload */ @@ -331,12 +354,30 @@ int mipi_dsi_dcs_get_display_brightness_large(struct = mipi_dsi_device *dsi, return ret; \ } while (0) =20 +/** + * mipi_dsi_generic_write_seq_multi - transmit data using a generic write = packet + * + * This macro will print errors for you and error handling is optimized for + * callers that call this multiple times in a row. + * + * @ctx: Context for multiple DSI transactions + * @seq: buffer containing the payload + */ +#define mipi_dsi_generic_write_seq_multi(ctx, seq...) \ + do { \ + static const u8 d[] =3D { seq }; \ + mipi_dsi_generic_write_multi(ctx, d, ARRAY_SIZE(d)); \ + } while (0) + /** * mipi_dsi_dcs_write_seq - transmit a DCS command with payload * * This macro will print errors for you and will RETURN FROM THE CALLING * FUNCTION (yes this is non-intuitive) upon error. * + * Because of the non-intuitive return behavior, THIS MACRO IS DEPRECATED. + * Please replace calls of it with mipi_dsi_dcs_write_seq_multi(). + * * @dsi: DSI peripheral device * @cmd: Command * @seq: buffer containing data to be transmitted @@ -350,6 +391,22 @@ int mipi_dsi_dcs_get_display_brightness_large(struct m= ipi_dsi_device *dsi, return ret; \ } while (0) =20 +/** + * mipi_dsi_dcs_write_seq_multi - transmit a DCS command with payload + * + * This macro will print errors for you and error handling is optimized for + * callers that call this multiple times in a row. + * + * @ctx: Context for multiple DSI transactions + * @cmd: Command + * @seq: buffer containing data to be transmitted + */ +#define mipi_dsi_dcs_write_seq_multi(ctx, cmd, seq...) \ + do { \ + static const u8 d[] =3D { cmd, seq }; \ + mipi_dsi_dcs_write_buffer_multi(ctx, d, ARRAY_SIZE(d)); \ + } while (0) + /** * struct mipi_dsi_driver - DSI driver * @driver: device driver model driver --=20 2.44.0.769.g3c40516874-goog From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 5236F4436A for ; Fri, 26 Apr 2024 23:59:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175957; cv=none; b=J7Avu4aGCtU2k5twllTdY/qZ0QdOKFCR/TPPpnN5FDrz9JUsaXo/NpGh4tqHkpaR++J+BA6ysQSHKp6ceUgCIHlI1/wMRcBcGJMPDSOk/cn2SMx6ehiy319KsAMTU+Ba5JtccLAXCCX55HVfQhkxDeE4yiInHm1mklM54oat1jA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175957; c=relaxed/simple; bh=XjxQ5c3mf77OAJBWrnBr+sPPhFiq5OfHnwgYZ6GKLM4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HjoCsCE9y7GdrTGWQQBqbeiwwFf9BhULSCAPEomV+2iIcJFQ77VC8zUiV0Lc5Jf+qwMPzCSjaqZHpW8sBnnug5YVHm5wKrnMGzP646c4HbgoZx2iAaT5D22fb7fDKUSH6pZcYGz7nPzL83Xsyjrd3dDvcplj593bFX2deE+zUKY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=d5st/RQc; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="d5st/RQc" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2ab88634cfaso2236200a91.0 for ; Fri, 26 Apr 2024 16:59:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175955; x=1714780755; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hZzSfB/1n9+jedI2oBQjWcrR3uyh08/jlbQ/BhI/Hdw=; b=d5st/RQcKHTHcmGIBusEdqgDiUeMzHjsxXZGqQMmw75zct367aA/OcS8pmXpON/mE/ l5TFDSOXQ59ZMci91zPqjAZnuPyyO0jI++pFNPE4Eok1hbSFUjILs98gxX1ZkmyIOKkU EN12jyj8vBJ10xp4ebo5kikUtwMtC77gws3S0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175955; x=1714780755; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hZzSfB/1n9+jedI2oBQjWcrR3uyh08/jlbQ/BhI/Hdw=; b=R7B7vboxVyS4tWsERvjqUAF8WD4klKNm1KuLfO+fLtzgNJSDZENhUX7e63sfr99acY IDizJrvEJnX/hGfY2SPdy2im2c0owaQWqtgube8JCgUpaOeGuy9CeqFspBGlPOutbyGc /APk/wqvM6SRFF4LHEqRGyc7VgqJcfwpm84ZUZo88WmdcgKVnhsVGY8aUvlPfv1/XK6p 1R60+SFzuxPxOHAnyk0k38TYv5Bf/QgU70cNfS4nd4DEWz3DjXMLW5gGtfQ0UvVlL/X0 q1iBWLag5gJS5vY/vOLQ62fDFSrVXQmR633abNcBBK07FPInkBKRq6trew7KthKHQWKW pATQ== X-Forwarded-Encrypted: i=1; AJvYcCX1vIzIYrIv1hJKIREk0d1199Wc7n5zeFOtJi5xSC99eCadGV4+i/9G4X4dxFy30osS+DbJqHaPIi1PV/UU6ucgEBZTr+3UP1LIXb9E X-Gm-Message-State: AOJu0YyJaFEivKh9dlcf5kJ7iHR4geY12DGcJQ0BGbGqXV3R/nEMRaAk 2uUlc4eoiK6F2xYebYb5W3E0gfGzHZ7qV+lyxILEh+Vpa5J7Zb58ykgFb6vb5A== X-Google-Smtp-Source: AGHT+IFoJpPKq/WRiQvEti4tzyFjVp2ObidfEpxF1tBEZezg21mRL219dd0QaSSZbuMenSdPDiKAxw== X-Received: by 2002:a17:90a:f2d0:b0:2ae:ee75:1479 with SMTP id gt16-20020a17090af2d000b002aeee751479mr4274243pjb.25.1714175955634; Fri, 26 Apr 2024 16:59:15 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:15 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 5/8] drm/mipi-dsi: mipi_dsi_*_write functions don't need to ratelimit prints Date: Fri, 26 Apr 2024 16:58:38 -0700 Message-ID: <20240426165839.v2.5.I9982cd5d8014de7a4513f5619f66f88da49ce4ec@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We really don't expect these errors to be printed over and over again. When a driver hits the error it should bail out. Just use a normal error print. Signed-off-by: Douglas Anderson --- Changes in v2: - New drivers/gpu/drm/drm_mipi_dsi.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c index b7c75a4396e6..8bc2db971e93 100644 --- a/drivers/gpu/drm/drm_mipi_dsi.c +++ b/drivers/gpu/drm/drm_mipi_dsi.c @@ -770,7 +770,7 @@ EXPORT_SYMBOL(mipi_dsi_generic_write); * @payload: buffer containing the payload * @size: size of payload buffer * - * Like mipi_dsi_generic_write() but includes a dev_err_ratelimited() + * Like mipi_dsi_generic_write() but includes a dev_err() * call for you and returns 0 upon success, not the number of bytes sent. * * Return: 0 on success or a negative error code on failure. @@ -783,8 +783,8 @@ int mipi_dsi_generic_write_chatty(struct mipi_dsi_devic= e *dsi, =20 ret =3D mipi_dsi_generic_write(dsi, payload, size); if (ret < 0) { - dev_err_ratelimited(dev, "sending generic data %*ph failed: %d\n", - (int)size, payload, (int)ret); + dev_err(dev, "sending generic data %*ph failed: %d\n", + (int)size, payload, (int)ret); return ret; } =20 @@ -814,8 +814,8 @@ void mipi_dsi_generic_write_multi(struct mipi_dsi_multi= _context *ctx, ret =3D mipi_dsi_generic_write(dsi, payload, size); if (ret < 0) { ctx->accum_err =3D ret; - dev_err_ratelimited(dev, "sending generic data %*ph failed: %d\n", - (int)size, payload, ctx->accum_err); + dev_err(dev, "sending generic data %*ph failed: %d\n", + (int)size, payload, ctx->accum_err); } } EXPORT_SYMBOL(mipi_dsi_generic_write_multi); @@ -914,7 +914,7 @@ EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer); * @data: buffer containing data to be transmitted * @len: size of transmission buffer * - * Like mipi_dsi_dcs_write_buffer() but includes a dev_err_ratelimited() + * Like mipi_dsi_dcs_write_buffer() but includes a dev_err() * call for you and returns 0 upon success, not the number of bytes sent. * * Return: 0 on success or a negative error code on failure. @@ -927,8 +927,8 @@ int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_de= vice *dsi, =20 ret =3D mipi_dsi_dcs_write_buffer(dsi, data, len); if (ret < 0) { - dev_err_ratelimited(dev, "sending dcs data %*ph failed: %d\n", - (int)len, data, (int)ret); + dev_err(dev, "sending dcs data %*ph failed: %d\n", + (int)len, data, (int)ret); return ret; } =20 @@ -958,8 +958,8 @@ void mipi_dsi_dcs_write_buffer_multi(struct mipi_dsi_mu= lti_context *ctx, ret =3D mipi_dsi_dcs_write_buffer(dsi, data, len); if (ret < 0) { ctx->accum_err =3D ret; - dev_err_ratelimited(dev, "sending dcs data %*ph failed: %d\n", - (int)len, data, ctx->accum_err); + dev_err(dev, "sending dcs data %*ph failed: %d\n", + (int)len, data, ctx->accum_err); } } EXPORT_SYMBOL(mipi_dsi_dcs_write_buffer_multi); --=20 2.44.0.769.g3c40516874-goog From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 C4B104594A for ; Fri, 26 Apr 2024 23:59:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175961; cv=none; b=hFkHNNFYfJKUj39Hau+7Nvica16MZA5kRpMhVlgP5/fUzqKbrDgTVcch7TN/58zggfdNplUNXIoYQXWkOZplUolihrTCFva75n2znafr5ZWhEZVBPYp0gMFyuk3+w/jMj14ja0EDQvHUFGXs5ohufw1f8W53UfsVKzCxBXHObqM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175961; c=relaxed/simple; bh=Hx9ugjp9m1eynVc5WP+Y9tEDy5c0kouV7PXE8sTffpo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XWPX5wdmZBf+iyQPad9rvFNMhcOzA4HohxWMW6idm1C0GUnnaqUdc0q6bByWS8CHNzC4PQlu0OjyfVkHcBgNf0hYOcRBSNNe6TRBAe3zVYmDWRwrLykbplNSPqG1zNmKw+Gs9RNVW7K1LPhjwWrwpT6BQ0U4KO64vmranctmHFc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=NVByOJRj; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="NVByOJRj" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-2a4df5d83c7so1952441a91.0 for ; Fri, 26 Apr 2024 16:59:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175958; x=1714780758; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t/FLLH0FgQbYiLamJxq9gY5g5iuqdFjaV4g8otDfZRQ=; b=NVByOJRj+/+YJq5pc+bt8RrnbIhQ/7BXQQA3m4GjXfjXs2levbccY0BobKk3LZP0xH x01pTVWNG3MmM9iwNjtEiW4UrXoPXomjnYt85ZTC/p8maA0R6FU/8UJelA4Ks5jup7hA CD0hPFY57vreyonxziYDPKn3xJTWNOFL9cZWI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175958; x=1714780758; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t/FLLH0FgQbYiLamJxq9gY5g5iuqdFjaV4g8otDfZRQ=; b=MphVwC94ewngwgRN76mqOSU+ySy6Z96ZNvYpmHIbTV8r9d41gE/2QQwy4AcxN3nsUy G/flUyemjXpaEAslCdBmEGglWV7XNYZB8aHDVYZ4KQi/SViNW/SGBXBB8I2ffKoD4425 Y899V/hVKx3EK7JF/NlTvoHA3ms91m01vpje27JbLCnytnNaQekxCpSalJ0eaYGv8GsO Wxcvpyytf21J4D1pcXk5c25n+ZNHHb0oDkiQJK6lVkS3Db41ofrEmOLaLaP9/xGnQPbn AIFRv8tGKQ3i4RSoAjAY8N4cAkBeDgWVhcN+2oB1LnkwsClV2mPPxTew+Zcwc9xKr6U9 DWNg== X-Forwarded-Encrypted: i=1; AJvYcCV1wSSbvKP/sILDqmXrjhZQ5UoBUf6UCpYxObJY2x7MuLPzt5YsZWpSEdHlkn6S8MGr+TEFbwoMXARw7n5qhAulwuAPy9cQMFBs5POv X-Gm-Message-State: AOJu0Yz/BzdCcpqNNs2PBf8W/bF7wckE4FH/y0hYYSVZkftWoCKmttVt qQZO76y27RZ5fqYjPOGY33w9kv8yXnhik5VYucCxrHfDFifNHuMRAOMYrR6D4g== X-Google-Smtp-Source: AGHT+IFIAXy2QBZEuC1qERy+3oETikozjYmm2zy9si7lRucb+1NUq7xdRtVmrLQadQmqU4ODghDk0Q== X-Received: by 2002:a17:90a:7408:b0:2ae:7e7b:ac with SMTP id a8-20020a17090a740800b002ae7e7b00acmr4598556pjg.13.1714175958167; Fri, 26 Apr 2024 16:59:18 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:17 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 6/8] drm/panel: novatek-nt36672e: Switch to mipi_dsi_dcs_write_seq_multi() Date: Fri, 26 Apr 2024 16:58:39 -0700 Message-ID: <20240426165839.v2.6.I3c08a7d02c467d2bc88da14e513ea4c8649fce45@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This is a mechanical conversion of the novatek-nt36672e driver to use the new mipi_dsi_dcs_write_seq_multi(). The new function is easier for clients to understand and using it also causes smaller code to be generated. Specifically: $ scripts/bloat-o-meter \ ...after/panel-novatek-nt36672e.ko \ ...ctx/panel-novatek-nt36672e.ko add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-988 (-988) Function old new delta nt36672e_1080x2408_60hz_init 6236 5248 -988 Total: Before=3D10651, After=3D9663, chg -9.28% Signed-off-by: Douglas Anderson --- This change is only compile tested. I don't use this panel myself but arbitrarily picked it as an example to look at when working on the MIPI DSI macros. Changes in v2: - New .../gpu/drm/panel/panel-novatek-nt36672e.c | 524 +++++++++--------- 1 file changed, 263 insertions(+), 261 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-novatek-nt36672e.c b/drivers/gpu/d= rm/panel/panel-novatek-nt36672e.c index 20b7bfe4aa12..a83526fe55bb 100644 --- a/drivers/gpu/drm/panel/panel-novatek-nt36672e.c +++ b/drivers/gpu/drm/panel/panel-novatek-nt36672e.c @@ -51,293 +51,295 @@ static inline struct nt36672e_panel *to_nt36672e_pane= l(struct drm_panel *panel) =20 static int nt36672e_1080x2408_60hz_init(struct mipi_dsi_device *dsi) { - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x10); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xc0, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xc1, 0x89, 0x28, 0x00, 0x08, 0x00, 0xaa, 0x0= 2, + struct mipi_dsi_multi_context ctx =3D { .dsi =3D dsi }; + + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x10); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb0, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xc0, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xc1, 0x89, 0x28, 0x00, 0x08, 0x00, 0x= aa, 0x02, 0x0e, 0x00, 0x2b, 0x00, 0x07, 0x0d, 0xb7, 0x0c, 0xb7); =20 - mipi_dsi_dcs_write_seq(dsi, 0xc2, 0x1b, 0xa0); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x20); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x01, 0x66); - mipi_dsi_dcs_write_seq(dsi, 0x06, 0x40); - mipi_dsi_dcs_write_seq(dsi, 0x07, 0x38); - mipi_dsi_dcs_write_seq(dsi, 0x2f, 0x83); - mipi_dsi_dcs_write_seq(dsi, 0x69, 0x91); - mipi_dsi_dcs_write_seq(dsi, 0x95, 0xd1); - mipi_dsi_dcs_write_seq(dsi, 0x96, 0xd1); - mipi_dsi_dcs_write_seq(dsi, 0xf2, 0x64); - mipi_dsi_dcs_write_seq(dsi, 0xf3, 0x54); - mipi_dsi_dcs_write_seq(dsi, 0xf4, 0x64); - mipi_dsi_dcs_write_seq(dsi, 0xf5, 0x54); - mipi_dsi_dcs_write_seq(dsi, 0xf6, 0x64); - mipi_dsi_dcs_write_seq(dsi, 0xf7, 0x54); - mipi_dsi_dcs_write_seq(dsi, 0xf8, 0x64); - mipi_dsi_dcs_write_seq(dsi, 0xf9, 0x54); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x24); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x01, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x03, 0x0c); - mipi_dsi_dcs_write_seq(dsi, 0x05, 0x1d); - mipi_dsi_dcs_write_seq(dsi, 0x08, 0x2f); - mipi_dsi_dcs_write_seq(dsi, 0x09, 0x2e); - mipi_dsi_dcs_write_seq(dsi, 0x0a, 0x2d); - mipi_dsi_dcs_write_seq(dsi, 0x0b, 0x2c); - mipi_dsi_dcs_write_seq(dsi, 0x11, 0x17); - mipi_dsi_dcs_write_seq(dsi, 0x12, 0x13); - mipi_dsi_dcs_write_seq(dsi, 0x13, 0x15); - mipi_dsi_dcs_write_seq(dsi, 0x15, 0x14); - mipi_dsi_dcs_write_seq(dsi, 0x16, 0x16); - mipi_dsi_dcs_write_seq(dsi, 0x17, 0x18); - mipi_dsi_dcs_write_seq(dsi, 0x1b, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x1d, 0x1d); - mipi_dsi_dcs_write_seq(dsi, 0x20, 0x2f); - mipi_dsi_dcs_write_seq(dsi, 0x21, 0x2e); - mipi_dsi_dcs_write_seq(dsi, 0x22, 0x2d); - mipi_dsi_dcs_write_seq(dsi, 0x23, 0x2c); - mipi_dsi_dcs_write_seq(dsi, 0x29, 0x17); - mipi_dsi_dcs_write_seq(dsi, 0x2a, 0x13); - mipi_dsi_dcs_write_seq(dsi, 0x2b, 0x15); - mipi_dsi_dcs_write_seq(dsi, 0x2f, 0x14); - mipi_dsi_dcs_write_seq(dsi, 0x30, 0x16); - mipi_dsi_dcs_write_seq(dsi, 0x31, 0x18); - mipi_dsi_dcs_write_seq(dsi, 0x32, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x34, 0x10); - mipi_dsi_dcs_write_seq(dsi, 0x35, 0x1f); - mipi_dsi_dcs_write_seq(dsi, 0x36, 0x1f); - mipi_dsi_dcs_write_seq(dsi, 0x4d, 0x14); - mipi_dsi_dcs_write_seq(dsi, 0x4e, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x4f, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x53, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x71, 0x30); - mipi_dsi_dcs_write_seq(dsi, 0x79, 0x11); - mipi_dsi_dcs_write_seq(dsi, 0x7a, 0x82); - mipi_dsi_dcs_write_seq(dsi, 0x7b, 0x8f); - mipi_dsi_dcs_write_seq(dsi, 0x7d, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x80, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x81, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x82, 0x13); - mipi_dsi_dcs_write_seq(dsi, 0x84, 0x31); - mipi_dsi_dcs_write_seq(dsi, 0x85, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x86, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x87, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x90, 0x13); - mipi_dsi_dcs_write_seq(dsi, 0x92, 0x31); - mipi_dsi_dcs_write_seq(dsi, 0x93, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x94, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x95, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x9c, 0xf4); - mipi_dsi_dcs_write_seq(dsi, 0x9d, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0xa0, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0xa2, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0xa3, 0x02); - mipi_dsi_dcs_write_seq(dsi, 0xa4, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0xa5, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0xc6, 0xc0); - mipi_dsi_dcs_write_seq(dsi, 0xc9, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xd9, 0x80); - mipi_dsi_dcs_write_seq(dsi, 0xe9, 0x02); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x25); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x18, 0x22); - mipi_dsi_dcs_write_seq(dsi, 0x19, 0xe4); - mipi_dsi_dcs_write_seq(dsi, 0x21, 0x40); - mipi_dsi_dcs_write_seq(dsi, 0x66, 0xd8); - mipi_dsi_dcs_write_seq(dsi, 0x68, 0x50); - mipi_dsi_dcs_write_seq(dsi, 0x69, 0x10); - mipi_dsi_dcs_write_seq(dsi, 0x6b, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x6d, 0x0d); - mipi_dsi_dcs_write_seq(dsi, 0x6e, 0x48); - mipi_dsi_dcs_write_seq(dsi, 0x72, 0x41); - mipi_dsi_dcs_write_seq(dsi, 0x73, 0x4a); - mipi_dsi_dcs_write_seq(dsi, 0x74, 0xd0); - mipi_dsi_dcs_write_seq(dsi, 0x77, 0x62); - mipi_dsi_dcs_write_seq(dsi, 0x79, 0x7e); - mipi_dsi_dcs_write_seq(dsi, 0x7d, 0x03); - mipi_dsi_dcs_write_seq(dsi, 0x7e, 0x15); - mipi_dsi_dcs_write_seq(dsi, 0x7f, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x84, 0x4d); - mipi_dsi_dcs_write_seq(dsi, 0xcf, 0x80); - mipi_dsi_dcs_write_seq(dsi, 0xd6, 0x80); - mipi_dsi_dcs_write_seq(dsi, 0xd7, 0x80); - mipi_dsi_dcs_write_seq(dsi, 0xef, 0x20); - mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x84); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x26); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x81, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x83, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x84, 0x03); - mipi_dsi_dcs_write_seq(dsi, 0x85, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x86, 0x03); - mipi_dsi_dcs_write_seq(dsi, 0x87, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x88, 0x05); - mipi_dsi_dcs_write_seq(dsi, 0x8a, 0x1a); - mipi_dsi_dcs_write_seq(dsi, 0x8b, 0x11); - mipi_dsi_dcs_write_seq(dsi, 0x8c, 0x24); - mipi_dsi_dcs_write_seq(dsi, 0x8e, 0x42); - mipi_dsi_dcs_write_seq(dsi, 0x8f, 0x11); - mipi_dsi_dcs_write_seq(dsi, 0x90, 0x11); - mipi_dsi_dcs_write_seq(dsi, 0x91, 0x11); - mipi_dsi_dcs_write_seq(dsi, 0x9a, 0x80); - mipi_dsi_dcs_write_seq(dsi, 0x9b, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x9c, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x9d, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x9e, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x27); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x01, 0x68); - mipi_dsi_dcs_write_seq(dsi, 0x20, 0x81); - mipi_dsi_dcs_write_seq(dsi, 0x21, 0x6a); - mipi_dsi_dcs_write_seq(dsi, 0x25, 0x81); - mipi_dsi_dcs_write_seq(dsi, 0x26, 0x94); - mipi_dsi_dcs_write_seq(dsi, 0x6e, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x6f, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x70, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x71, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x72, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x75, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x76, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x77, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0x7d, 0x09); - mipi_dsi_dcs_write_seq(dsi, 0x7e, 0x67); - mipi_dsi_dcs_write_seq(dsi, 0x80, 0x23); - mipi_dsi_dcs_write_seq(dsi, 0x82, 0x09); - mipi_dsi_dcs_write_seq(dsi, 0x83, 0x67); - mipi_dsi_dcs_write_seq(dsi, 0x88, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x89, 0x10); - mipi_dsi_dcs_write_seq(dsi, 0xa5, 0x10); - mipi_dsi_dcs_write_seq(dsi, 0xa6, 0x23); - mipi_dsi_dcs_write_seq(dsi, 0xa7, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0xb6, 0x40); - mipi_dsi_dcs_write_seq(dsi, 0xe5, 0x02); - mipi_dsi_dcs_write_seq(dsi, 0xe6, 0xd3); - mipi_dsi_dcs_write_seq(dsi, 0xeb, 0x03); - mipi_dsi_dcs_write_seq(dsi, 0xec, 0x28); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x2a); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x00, 0x91); - mipi_dsi_dcs_write_seq(dsi, 0x03, 0x20); - mipi_dsi_dcs_write_seq(dsi, 0x07, 0x50); - mipi_dsi_dcs_write_seq(dsi, 0x0a, 0x70); - mipi_dsi_dcs_write_seq(dsi, 0x0c, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x0d, 0x40); - mipi_dsi_dcs_write_seq(dsi, 0x0f, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x11, 0xe0); - mipi_dsi_dcs_write_seq(dsi, 0x15, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x16, 0xa4); - mipi_dsi_dcs_write_seq(dsi, 0x19, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x1a, 0x78); - mipi_dsi_dcs_write_seq(dsi, 0x1b, 0x23); - mipi_dsi_dcs_write_seq(dsi, 0x1d, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x1e, 0x3e); - mipi_dsi_dcs_write_seq(dsi, 0x1f, 0x3e); - mipi_dsi_dcs_write_seq(dsi, 0x20, 0x3e); - mipi_dsi_dcs_write_seq(dsi, 0x28, 0xfd); - mipi_dsi_dcs_write_seq(dsi, 0x29, 0x12); - mipi_dsi_dcs_write_seq(dsi, 0x2a, 0xe1); - mipi_dsi_dcs_write_seq(dsi, 0x2d, 0x0a); - mipi_dsi_dcs_write_seq(dsi, 0x30, 0x49); - mipi_dsi_dcs_write_seq(dsi, 0x33, 0x96); - mipi_dsi_dcs_write_seq(dsi, 0x34, 0xff); - mipi_dsi_dcs_write_seq(dsi, 0x35, 0x40); - mipi_dsi_dcs_write_seq(dsi, 0x36, 0xde); - mipi_dsi_dcs_write_seq(dsi, 0x37, 0xf9); - mipi_dsi_dcs_write_seq(dsi, 0x38, 0x45); - mipi_dsi_dcs_write_seq(dsi, 0x39, 0xd9); - mipi_dsi_dcs_write_seq(dsi, 0x3a, 0x49); - mipi_dsi_dcs_write_seq(dsi, 0x4a, 0xf0); - mipi_dsi_dcs_write_seq(dsi, 0x7a, 0x09); - mipi_dsi_dcs_write_seq(dsi, 0x7b, 0x40); - mipi_dsi_dcs_write_seq(dsi, 0x7f, 0xf0); - mipi_dsi_dcs_write_seq(dsi, 0x83, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x84, 0xa4); - mipi_dsi_dcs_write_seq(dsi, 0x87, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x88, 0x78); - mipi_dsi_dcs_write_seq(dsi, 0x89, 0x23); - mipi_dsi_dcs_write_seq(dsi, 0x8b, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x8c, 0x7d); - mipi_dsi_dcs_write_seq(dsi, 0x8d, 0x7d); - mipi_dsi_dcs_write_seq(dsi, 0x8e, 0x7d); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x20); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x00, 0x00, 0x00, 0x17, 0x00, 0x49, 0x0= 0, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xc2, 0x1b, 0xa0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x20); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x01, 0x66); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x06, 0x40); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x07, 0x38); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x2f, 0x83); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x69, 0x91); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x95, 0xd1); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x96, 0xd1); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf2, 0x64); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf3, 0x54); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf4, 0x64); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf5, 0x54); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf6, 0x64); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf7, 0x54); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf8, 0x64); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf9, 0x54); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x24); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x01, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x03, 0x0c); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x05, 0x1d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x08, 0x2f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x09, 0x2e); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x0a, 0x2d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x0b, 0x2c); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x11, 0x17); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x12, 0x13); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x13, 0x15); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x15, 0x14); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x16, 0x16); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x17, 0x18); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1b, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1d, 0x1d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x20, 0x2f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x21, 0x2e); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x22, 0x2d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x23, 0x2c); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x29, 0x17); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x2a, 0x13); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x2b, 0x15); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x2f, 0x14); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x30, 0x16); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x31, 0x18); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x32, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x34, 0x10); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x35, 0x1f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x36, 0x1f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x4d, 0x14); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x4e, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x4f, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x53, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x71, 0x30); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x79, 0x11); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7a, 0x82); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7b, 0x8f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7d, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x80, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x81, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x82, 0x13); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x84, 0x31); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x85, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x86, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x87, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x90, 0x13); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x92, 0x31); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x93, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x94, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x95, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9c, 0xf4); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9d, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa0, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa2, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa3, 0x02); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa4, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa5, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xc6, 0xc0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xc9, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xd9, 0x80); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xe9, 0x02); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x25); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x18, 0x22); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x19, 0xe4); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x21, 0x40); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x66, 0xd8); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x68, 0x50); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x69, 0x10); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6b, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6d, 0x0d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6e, 0x48); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x72, 0x41); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x73, 0x4a); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x74, 0xd0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x77, 0x62); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x79, 0x7e); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7d, 0x03); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7e, 0x15); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7f, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x84, 0x4d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xcf, 0x80); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xd6, 0x80); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xd7, 0x80); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xef, 0x20); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xf0, 0x84); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x26); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x81, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x83, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x84, 0x03); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x85, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x86, 0x03); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x87, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x88, 0x05); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8a, 0x1a); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8b, 0x11); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8c, 0x24); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8e, 0x42); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8f, 0x11); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x90, 0x11); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x91, 0x11); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9a, 0x80); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9b, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9c, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9d, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x9e, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x27); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x01, 0x68); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x20, 0x81); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x21, 0x6a); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x25, 0x81); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x26, 0x94); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6e, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6f, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x70, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x71, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x72, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x75, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x76, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x77, 0x00); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7d, 0x09); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7e, 0x67); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x80, 0x23); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x82, 0x09); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x83, 0x67); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x88, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x89, 0x10); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa5, 0x10); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa6, 0x23); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xa7, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb6, 0x40); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xe5, 0x02); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xe6, 0xd3); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xeb, 0x03); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xec, 0x28); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x2a); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x00, 0x91); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x03, 0x20); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x07, 0x50); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x0a, 0x70); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x0c, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x0d, 0x40); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x0f, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x11, 0xe0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x15, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x16, 0xa4); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x19, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1a, 0x78); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1b, 0x23); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1d, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1e, 0x3e); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x1f, 0x3e); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x20, 0x3e); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x28, 0xfd); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x29, 0x12); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x2a, 0xe1); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x2d, 0x0a); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x30, 0x49); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x33, 0x96); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x34, 0xff); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x35, 0x40); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x36, 0xde); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x37, 0xf9); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x38, 0x45); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x39, 0xd9); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x3a, 0x49); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x4a, 0xf0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7a, 0x09); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7b, 0x40); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7f, 0xf0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x83, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x84, 0xa4); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x87, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x88, 0x78); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x89, 0x23); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8b, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8c, 0x7d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8d, 0x7d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x8e, 0x7d); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x20); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb0, 0x00, 0x00, 0x00, 0x17, 0x00, 0x= 49, 0x00, 0x6a, 0x00, 0x89, 0x00, 0x9f, 0x00, 0xb6, 0x00, 0xc8); - mipi_dsi_dcs_write_seq(dsi, 0xb1, 0x00, 0xd9, 0x01, 0x10, 0x01, 0x3a, 0x0= 1, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb1, 0x00, 0xd9, 0x01, 0x10, 0x01, 0x= 3a, 0x01, 0x7a, 0x01, 0xa9, 0x01, 0xf2, 0x02, 0x2d, 0x02, 0x2e); - mipi_dsi_dcs_write_seq(dsi, 0xb2, 0x02, 0x64, 0x02, 0xa3, 0x02, 0xca, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb2, 0x02, 0x64, 0x02, 0xa3, 0x02, 0x= ca, 0x03, 0x00, 0x03, 0x1e, 0x03, 0x4a, 0x03, 0x59, 0x03, 0x6a); - mipi_dsi_dcs_write_seq(dsi, 0xb3, 0x03, 0x7d, 0x03, 0x93, 0x03, 0xab, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb3, 0x03, 0x7d, 0x03, 0x93, 0x03, 0x= ab, 0x03, 0xc8, 0x03, 0xec, 0x03, 0xfe, 0x00, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xb4, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x51, 0x0= 0, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb4, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x= 51, 0x00, 0x71, 0x00, 0x90, 0x00, 0xa7, 0x00, 0xbf, 0x00, 0xd1); - mipi_dsi_dcs_write_seq(dsi, 0xb5, 0x00, 0xe2, 0x01, 0x1a, 0x01, 0x43, 0x0= 1, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb5, 0x00, 0xe2, 0x01, 0x1a, 0x01, 0x= 43, 0x01, 0x83, 0x01, 0xb2, 0x01, 0xfa, 0x02, 0x34, 0x02, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0xb6, 0x02, 0x6b, 0x02, 0xa8, 0x02, 0xd0, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb6, 0x02, 0x6b, 0x02, 0xa8, 0x02, 0x= d0, 0x03, 0x03, 0x03, 0x21, 0x03, 0x4d, 0x03, 0x5b, 0x03, 0x6b); - mipi_dsi_dcs_write_seq(dsi, 0xb7, 0x03, 0x7e, 0x03, 0x94, 0x03, 0xac, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb7, 0x03, 0x7e, 0x03, 0x94, 0x03, 0x= ac, 0x03, 0xc8, 0x03, 0xec, 0x03, 0xfe, 0x00, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xb8, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x51, 0x0= 0, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb8, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x= 51, 0x00, 0x72, 0x00, 0x92, 0x00, 0xa8, 0x00, 0xbf, 0x00, 0xd1); - mipi_dsi_dcs_write_seq(dsi, 0xb9, 0x00, 0xe2, 0x01, 0x18, 0x01, 0x42, 0x0= 1, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb9, 0x00, 0xe2, 0x01, 0x18, 0x01, 0x= 42, 0x01, 0x81, 0x01, 0xaf, 0x01, 0xf5, 0x02, 0x2f, 0x02, 0x31); - mipi_dsi_dcs_write_seq(dsi, 0xba, 0x02, 0x68, 0x02, 0xa6, 0x02, 0xcd, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xba, 0x02, 0x68, 0x02, 0xa6, 0x02, 0x= cd, 0x03, 0x01, 0x03, 0x1f, 0x03, 0x4a, 0x03, 0x59, 0x03, 0x6a); - mipi_dsi_dcs_write_seq(dsi, 0xbb, 0x03, 0x7d, 0x03, 0x93, 0x03, 0xab, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xbb, 0x03, 0x7d, 0x03, 0x93, 0x03, 0x= ab, 0x03, 0xc8, 0x03, 0xec, 0x03, 0xfe, 0x00, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x21); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x00, 0x00, 0x00, 0x17, 0x00, 0x49, 0x0= 0, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x21); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb0, 0x00, 0x00, 0x00, 0x17, 0x00, 0x= 49, 0x00, 0x6a, 0x00, 0x89, 0x00, 0x9f, 0x00, 0xb6, 0x00, 0xc8); - mipi_dsi_dcs_write_seq(dsi, 0xb1, 0x00, 0xd9, 0x01, 0x10, 0x01, 0x3a, 0x0= 1, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb1, 0x00, 0xd9, 0x01, 0x10, 0x01, 0x= 3a, 0x01, 0x7a, 0x01, 0xa9, 0x01, 0xf2, 0x02, 0x2d, 0x02, 0x2e); - mipi_dsi_dcs_write_seq(dsi, 0xb2, 0x02, 0x64, 0x02, 0xa3, 0x02, 0xca, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb2, 0x02, 0x64, 0x02, 0xa3, 0x02, 0x= ca, 0x03, 0x00, 0x03, 0x1e, 0x03, 0x4a, 0x03, 0x59, 0x03, 0x6a); - mipi_dsi_dcs_write_seq(dsi, 0xb3, 0x03, 0x7d, 0x03, 0x93, 0x03, 0xab, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb3, 0x03, 0x7d, 0x03, 0x93, 0x03, 0x= ab, 0x03, 0xc8, 0x03, 0xec, 0x03, 0xfe, 0x00, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xb4, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x51, 0x0= 0, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb4, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x= 51, 0x00, 0x71, 0x00, 0x90, 0x00, 0xa7, 0x00, 0xbf, 0x00, 0xd1); - mipi_dsi_dcs_write_seq(dsi, 0xb5, 0x00, 0xe2, 0x01, 0x1a, 0x01, 0x43, 0x0= 1, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb5, 0x00, 0xe2, 0x01, 0x1a, 0x01, 0x= 43, 0x01, 0x83, 0x01, 0xb2, 0x01, 0xfa, 0x02, 0x34, 0x02, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0xb6, 0x02, 0x6b, 0x02, 0xa8, 0x02, 0xd0, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb6, 0x02, 0x6b, 0x02, 0xa8, 0x02, 0x= d0, 0x03, 0x03, 0x03, 0x21, 0x03, 0x4d, 0x03, 0x5b, 0x03, 0x6b); - mipi_dsi_dcs_write_seq(dsi, 0xb7, 0x03, 0x7e, 0x03, 0x94, 0x03, 0xac, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb7, 0x03, 0x7e, 0x03, 0x94, 0x03, 0x= ac, 0x03, 0xc8, 0x03, 0xec, 0x03, 0xfe, 0x00, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xb8, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x51, 0x0= 0, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb8, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x= 51, 0x00, 0x72, 0x00, 0x92, 0x00, 0xa8, 0x00, 0xbf, 0x00, 0xd1); - mipi_dsi_dcs_write_seq(dsi, 0xb9, 0x00, 0xe2, 0x01, 0x18, 0x01, 0x42, 0x0= 1, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xb9, 0x00, 0xe2, 0x01, 0x18, 0x01, 0x= 42, 0x01, 0x81, 0x01, 0xaf, 0x01, 0xf5, 0x02, 0x2f, 0x02, 0x31); - mipi_dsi_dcs_write_seq(dsi, 0xba, 0x02, 0x68, 0x02, 0xa6, 0x02, 0xcd, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xba, 0x02, 0x68, 0x02, 0xa6, 0x02, 0x= cd, 0x03, 0x01, 0x03, 0x1f, 0x03, 0x4a, 0x03, 0x59, 0x03, 0x6a); - mipi_dsi_dcs_write_seq(dsi, 0xbb, 0x03, 0x7d, 0x03, 0x93, 0x03, 0xab, 0x0= 3, + mipi_dsi_dcs_write_seq_multi(&ctx, 0xbb, 0x03, 0x7d, 0x03, 0x93, 0x03, 0x= ab, 0x03, 0xc8, 0x03, 0xec, 0x03, 0xfe, 0x00, 0x00); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x2c); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x61, 0x1f); - mipi_dsi_dcs_write_seq(dsi, 0x62, 0x1f); - mipi_dsi_dcs_write_seq(dsi, 0x7e, 0x03); - mipi_dsi_dcs_write_seq(dsi, 0x6a, 0x14); - mipi_dsi_dcs_write_seq(dsi, 0x6b, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x6c, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x6d, 0x36); - mipi_dsi_dcs_write_seq(dsi, 0x53, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x54, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x55, 0x04); - mipi_dsi_dcs_write_seq(dsi, 0x56, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x58, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0x59, 0x0f); - mipi_dsi_dcs_write_seq(dsi, 0xff, 0xf0); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x5a, 0x00); - - mipi_dsi_dcs_write_seq(dsi, 0xff, 0x10); - mipi_dsi_dcs_write_seq(dsi, 0xfb, 0x01); - mipi_dsi_dcs_write_seq(dsi, 0x51, 0xff); - mipi_dsi_dcs_write_seq(dsi, 0x53, 0x24); - mipi_dsi_dcs_write_seq(dsi, 0x55, 0x01); - - return 0; + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x2c); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x61, 0x1f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x62, 0x1f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x7e, 0x03); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6a, 0x14); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6b, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6c, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x6d, 0x36); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x53, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x54, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x55, 0x04); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x56, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x58, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x59, 0x0f); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0xf0); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x5a, 0x00); + + mipi_dsi_dcs_write_seq_multi(&ctx, 0xff, 0x10); + mipi_dsi_dcs_write_seq_multi(&ctx, 0xfb, 0x01); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x51, 0xff); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x53, 0x24); + mipi_dsi_dcs_write_seq_multi(&ctx, 0x55, 0x01); + + return ctx.accum_err; } =20 static int nt36672e_power_on(struct nt36672e_panel *ctx) --=20 2.44.0.769.g3c40516874-goog From nobody Fri Dec 19 12:31:32 2025 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (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 76C8847F65 for ; Fri, 26 Apr 2024 23:59:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175967; cv=none; b=Wpn1FCZfPqcDyrXDGjIvTAMSLDg9Y5Fq/KtyTVutqa/BBbF54L7julMpmLiGHncqn7GqSGIAen/UF0dKVv6eFkq5b0MttrDFaOIAz0x57AOxle5eEqJf59bHu7EXJIboOA3X4V+m+UT7+Z6KJ4kf0wFP4CdT6qcMMJ5HFxSQ0MQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714175967; c=relaxed/simple; bh=Ymkg2Y4zLkJQYeRI3xYMLeWRXgn8akx60R2PPSsy7GE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TZXcWYXPNb/fLJcDHM8awNslisqgS2fs9Zgiy7xWGowQfhl9dtYfyNIPA4OqYY+S2dewdMaBCfAGYYd9VaiZYG7uz9TyvPdmT5br9NZ+ksNoNX24KHIK6ZrVl3wlK1nVHqSzXrp6lLW9l9is8RjRdOmXT6gSgxF2jMLQzmc2nJc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=XNLK0MSs; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="XNLK0MSs" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-5c6bd3100fcso1860985a12.3 for ; Fri, 26 Apr 2024 16:59:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1714175962; x=1714780762; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6dlue2iwDfflC7NvkUReEv0gDm2tpEeiUAwYd6UUu6I=; b=XNLK0MSsi4bi8Me43W9/EYlQsRNfYgRH4aUUa58z+dr4BDwdJAFE0pb2NbqggxoS+j h4+4uAW/aFWbrCJXMcifSV2XsdXEQfD7qeaXUljvzXRDPuH27X78Hip6zq3mhvMbKgdz CZSY+sYTRMTgpczkhJIACjH6O9qLf24+7GiNw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714175962; x=1714780762; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6dlue2iwDfflC7NvkUReEv0gDm2tpEeiUAwYd6UUu6I=; b=MqVYYSqYqOcL298CRhEng0a+cTLTdCTN0Uh8JyVVqyiDnjRvYS733Hr0JUEzC1+mi3 LfABmXMsr7JXTaLxk25aAyy1l/IkeJmdyXbee2/G4YNcywkrnwj8AdJHzaCGBP2uW7X5 PC0fQhMB7NPg3DOrBYiAd9IDvTy2egS/zRqytkyq+vesU1+OTsBs7StyAfQF834SQwmE rLPbK00GCqsDi1GzwsiOtPBtJhjlF+vt3QkMYBQsJ5tZaIQ5vs8vp52IYljIW+vFz5lJ 14gZcGGZxykPdfUCqYh/iRW5FmjKFrYTWWPR3wQK7zTMZ6a2N9yBmFowUZvihJ9lTkk/ 11cg== X-Forwarded-Encrypted: i=1; AJvYcCW0GWPN8hku87oRCOnu9DDqwQLZ7MRUg2Z2kVqjOQcP6ouWfCtuNU89Dxu8PXtruIP+nSnOTr04PCQiYjcXIRfcB978Gp0mvUcnhS28 X-Gm-Message-State: AOJu0Yz5sD1cAr0D8ZeKCS7/3Z/35bbdwcCMngjoc3PAdvMM+oFhMmMH NFIRcmLb4OGYBIWdvQ38zc1FLUggxGb83L2aY7/p69pGDdycmI2nBB9/0I3v9Q== X-Google-Smtp-Source: AGHT+IGIK7O0ZshRwZbd9y5mAZjepQZqZoTBToQrEtL+VDbotdTYwJxQ5LO5oNXZfRLFhyCNRHSjeg== X-Received: by 2002:a17:90b:4ac8:b0:2a2:dd53:828b with SMTP id mh8-20020a17090b4ac800b002a2dd53828bmr3989707pjb.43.1714175960467; Fri, 26 Apr 2024 16:59:20 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:fca:3ae2:20e6:82bb]) by smtp.gmail.com with ESMTPSA id n4-20020a17090aab8400b002af41bd563esm5111939pjq.33.2024.04.26.16.59.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 16:59:19 -0700 (PDT) From: Douglas Anderson To: dri-devel@lists.freedesktop.org Cc: Linus Walleij , lvzhaoxiong@huaqin.corp-partner.google.com, Jani Nikula , Hsin-Yi Wang , Javier Martinez Canillas , Neil Armstrong , Joel Selvaraj , Dmitry Baryshkov , Cong Yang , Sam Ravnborg , Douglas Anderson , Daniel Vetter , David Airlie , Jessica Zhang , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , linux-kernel@vger.kernel.org Subject: [PATCH v2 7/8] drm/panel: boe-tv101wum-nl6: Don't use a table for initting commands Date: Fri, 26 Apr 2024 16:58:40 -0700 Message-ID: <20240426165839.v2.7.Ib5030ab5cd41b4e08b1958bd7e51571725723008@changeid> X-Mailer: git-send-email 2.44.0.769.g3c40516874-goog In-Reply-To: <20240426235857.3870424-1-dianders@chromium.org> References: <20240426235857.3870424-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Consensus on the mailing lists is that panels shouldn't use a table of init commands but should instead use init functions. With the recently introduced mipi_dsi_dcs_write_seq_multi() this is not only clean/easy but also saves space. Measuring before/after this change: $ scripts/bloat-o-meter \ .../before/panel-boe-tv101wum-nl6.ko \ .../after/panel-boe-tv101wum-nl6.ko add/remove: 14/8 grow/shrink: 0/1 up/down: 27062/-31433 (-4371) Function old new delta inx_hj110iz_init - 7040 +7040 boe_tv110c9m_init - 6440 +6440 boe_init - 5916 +5916 starry_qfh032011_53g_init - 1944 +1944 starry_himax83102_j02_init - 1228 +1228 inx_hj110iz_init.d - 1040 +1040 boe_tv110c9m_init.d - 982 +982 auo_b101uan08_3_init - 944 +944 boe_init.d - 580 +580 starry_himax83102_j02_init.d - 512 +512 starry_qfh032011_53g_init.d - 180 +180 auo_kd101n80_45na_init - 172 +172 auo_b101uan08_3_init.d - 82 +82 auo_kd101n80_45na_init.d - 2 +2 auo_kd101n80_45na_init_cmd 144 - -144 boe_panel_prepare 592 440 -152 auo_b101uan08_3_init_cmd 1056 - -1056 starry_himax83102_j02_init_cmd 1392 - -1392 starry_qfh032011_53g_init_cmd 2256 - -2256 .compoundliteral 3393 - -3393 boe_init_cmd 7008 - -7008 boe_tv110c9m_init_cmd 7656 - -7656 inx_hj110iz_init_cmd 8376 - -8376 Total: Before=3D37297, After=3D32926, chg -11.72% Let's do the conversion. Signed-off-by: Douglas Anderson --- Changes in v2: - New .../gpu/drm/panel/panel-boe-tv101wum-nl6.c | 2712 +++++++++-------- 1 file changed, 1365 insertions(+), 1347 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c b/drivers/gpu/d= rm/panel/panel-boe-tv101wum-nl6.c index 0ffe8f8c01de..a3ed33f660cb 100644 --- a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c +++ b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c @@ -17,6 +17,8 @@ =20 #include