* Claude review: dt-bindings: display: panel: Add Novatek NT35532 LCD DSI
2026-03-08 15:52 ` [PATCH 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
@ 2026-03-08 21:46 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-08 21:46 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
The binding uses a bare controller IC compatible:
```yaml
compatible:
const: novatek,nt35532
```
The NT35532 is a display controller IC, not a specific panel. Following the established convention (e.g., `novatek,nt35510.yaml`), the compatible should include a panel-specific first entry with `novatek,nt35532` as a fallback:
```yaml
compatible:
items:
- enum:
- <panel-vendor>,<panel-model>
- const: novatek,nt35532
```
The DT bindings maintainers (Rob/Krzysztof/Conor) will very likely request this change. Even if the exact panel vendor/model is unknown, using the board/device name (e.g., `flipkart,rimob-panel`) as the first compatible is the expected practice. This allows future kernel changes if different NT35532-based panels need different init sequences.
The rest of the binding looks fine: `vsn-supply`/`vsp-supply` naming for negative/positive analog supplies, required properties, and the example are all reasonable.
The MAINTAINERS entry is fine, with the driver file path correctly added in patch 2.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: dt-bindings: display: panel: Add Novatek NT35532 LCD DSI
2026-03-21 16:23 ` [PATCH v3 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
@ 2026-03-21 17:00 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-21 17:00 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
The binding looks reasonable and follows existing panel binding patterns.
**Minor issue: `vddam-supply` defined but never used.**
The binding defines:
```yaml
vddam-supply:
description: power supply for MIPI interface
```
But the panel driver (patch 2) does not request a `vddam` regulator - only `vci`, `vddi`, `avee`, and `avdd`. And the DTS (patch 3) never specifies `vddam-supply`. If this supply exists in the datasheet but isn't used on the only known board, it's fine to document it in the binding. But verify it's actually a real supply from the NT35532 datasheet - no other kernel driver references `vddam`.
**Nit: compatible is `const`, not a list.** This means only bare NT35532 panels are supported, with no board-specific compatibles. This is fine for a simple panel, but if different boards use different init sequences, a pattern like `"vendor,board-panel", "novatek,nt35532"` might be more future-proof. Not a blocker.
The MAINTAINERS entry is correct but is missing the driver file entry (added in patch 2, which is the right split).
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: dt-bindings: display: panel: Add Novatek NT35532 LCD DSI
2026-03-18 22:28 ` [PATCH v2 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
@ 2026-03-21 19:00 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-21 19:00 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
The binding looks mostly correct.
**Issue: `vddam-supply` defined in binding but never used**
The binding defines a `vddam-supply` property:
```yaml
vddam-supply:
description: power supply for MIPI interface
```
But it is not listed in `required`, not used in the driver (patch 2), and not referenced in any DTS node (patch 3). If the hardware genuinely has this supply but the driver doesn't need to manage it, it could remain optional. However, it's confusing — either remove it from the binding or add support in the driver. The driver's `nt35532_supplies[]` array has `vci`, `vddi`, `avee`, `avdd` but no `vddam`.
Otherwise the binding is clean: `additionalProperties: false`, required properties are sensible, the example is consistent with actual DTS usage.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v5 0/6] Enable new features for flipkart-rimob
@ 2026-03-31 9:47 Cristian Cozzolino via B4 Relay
2026-03-31 9:47 ` [PATCH v5 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
` (6 more replies)
0 siblings, 7 replies; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Krzysztof Kozlowski, Dmitry Baryshkov, Konrad Dybcio
This series enables a set of miscellaneous features for Billion Capture+
(a handset using the MSM8953 SoC released in 2017):
- Panel and GPU
- Touchscreen
- WiFi + Bluetooth
- Hall sensor
Patches 1 and 2 provide a driver for Novatek NT35532 and its corresponding
devicetree bindings, required for enabling panel in DTS. The remaining
patches are all DTS changes, aimed to enable the features listed above.
To: Neil Armstrong <neil.armstrong@linaro.org>
To: Jessica Zhang <jesszhan0024@gmail.com>
To: David Airlie <airlied@gmail.com>
To: Simona Vetter <simona@ffwll.ch>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: Maxime Ripard <mripard@kernel.org>
To: Thomas Zimmermann <tzimmermann@suse.de>
To: Rob Herring <robh@kernel.org>
To: Krzysztof Kozlowski <krzk+dt@kernel.org>
To: Conor Dooley <conor+dt@kernel.org>
To: Bjorn Andersson <andersson@kernel.org>
To: Konrad Dybcio <konradybcio@kernel.org>
Cc: dri-devel@lists.freedesktop.org
Cc: devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Cc: ~postmarketos/upstreaming@lists.sr.ht
Cc: phone-devel@vger.kernel.org
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
Changes in v5:
- Based on dts-coding-style.html ("Nodes without unit addresses shall be
ordered alpha-numerically by the node name. For a few node types, they
can be ordered by the main property, e.g. pin configuration states
ordered by value of “pins” property."), sort pinctrl states by GPIO
index (Konrad);
- Pick up tags;
- Link to v4: https://lore.kernel.org/r/20260327-rimob-new-features-v4-0-06edff9c4509@protonmail.com
Changes in v4:
- (patch 1/6): added a new compatible (since it's not possible to
identify panel vendor/id), matching user of this device and leaving
novatek,nt35532 as fallback (Dmitry);
- (patch 2/6):
- according to bindings changes, make panel driver handling multiple
panels paired with NT35532 and use specific compatible/data;
- due to changes applied to panel code, remove tag received previously
by Dmitry.
- (patch 3/6):
- use a specific panel compatible, according to bindings changes;
- remove 'output-high' property from panel pinctrl, since panel is not
reset.
- Link to v3: https://lore.kernel.org/r/20260321-rimob-new-features-v3-0-d4b8ee867de7@protonmail.com
Changes in v3:
- (patch 1/6): removed avdd, avee and vci supplies from 'required' properties;
- (patch 2/6):
- removed "select VIDEOMODE_HELPERS" from nt35532 Kconfig entry, since
its functions are not used (but this option is enabled and its code
compiled anyway) by nt35532 panel driver;
- pick up tags (Dmitry).
- (patch 3/6): replaced a506_zap.mdt with a506_zap.mbn firmware name
in gpu_zap_shader (Dmitry);
- (patch 5/6): pick up tags (Konrad);
- (patch 6/6): pick up tags (Konrad);
- Link to v2: https://lore.kernel.org/r/20260318-rimob-new-features-v2-0-c1bf8917449e@protonmail.com
Changes in v2:
- (patch 1/6): define power supplies in the bindings as per datasheet
and update example;
- (patch 2/6): add blank lines where required between mipi dsi write
sequences in nt35532_on() function and make use of names for mipi dcs
commands, instead of hex numbers, to improve readibility (Dmitry);
- (patch 3/6): move pinctrl lines ibto panel node and get rid of
sleep/reset state, since panel just uses one pinctrl state for
default/sleep (Dmitry). Also, update power supplies according to
bindings;
- (patch 4/6): pick up tags (Konrad,Dmitry);
- (patch 6/6): squash hall sensor node into gpio-keys (Dmitry);
- Link to v1: https://lore.kernel.org/r/20260308-rimob-new-features-v1-0-aa2c330572c0@protonmail.com
---
Cristian Cozzolino (6):
dt-bindings: display: panel: Add Novatek NT35532 LCD DSI
drm/panel: Add driver for Novatek NT35532
arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU
arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth
arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen
arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor
.../bindings/display/panel/novatek,nt35532.yaml | 80 +++
MAINTAINERS | 6 +
.../arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts | 138 +++-
drivers/gpu/drm/panel/Kconfig | 10 +
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-novatek-nt35532.c | 796 +++++++++++++++++++++
6 files changed, 1030 insertions(+), 1 deletion(-)
---
base-commit: cf7c3c02fdd0dfccf4d6611714273dcb538af2cb
change-id: 20260303-rimob-new-features-037944b3a620
Best regards,
--
Cristian Cozzolino <cristian_ci@protonmail.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v5 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
@ 2026-03-31 9:47 ` Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 2/6] drm/panel: Add driver for Novatek NT35532 Cristian Cozzolino via B4 Relay
` (5 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Krzysztof Kozlowski
From: Cristian Cozzolino <cristian_ci@protonmail.com>
Document Novatek NT35532-based DSI display panel.
Since it's not possible to identify panel vendor nor id, add a suitable
compatible (matching the device's user, which makes use of this DDIC)
and set "novatek,nt35532" as fallback.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
.../bindings/display/panel/novatek,nt35532.yaml | 80 ++++++++++++++++++++++
MAINTAINERS | 5 ++
2 files changed, 85 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/panel/novatek,nt35532.yaml b/Documentation/devicetree/bindings/display/panel/novatek,nt35532.yaml
new file mode 100644
index 000000000000..ff6fdad7febf
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/panel/novatek,nt35532.yaml
@@ -0,0 +1,80 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/novatek,nt35532.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Novatek NT35532-based DSI display panels
+
+maintainers:
+ - Cristian Cozzolino <cristian_ci@protonmail.com>
+
+allOf:
+ - $ref: panel-common.yaml#
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - flipkart,rimob-panel-nt35532-cs
+ - const: novatek,nt35532
+
+ reg:
+ maxItems: 1
+
+ backlight: true
+ reset-gpios: true
+
+ avdd-supply:
+ description: positive boost supply regulator
+
+ avee-supply:
+ description: negative boost supply regulator
+
+ vci-supply:
+ description: regulator that supplies the analog voltage
+
+ vddam-supply:
+ description: power supply for MIPI interface
+
+ vddi-supply:
+ description: regulator that supplies the I/O voltage
+
+ port: true
+
+required:
+ - compatible
+ - reg
+ - reset-gpios
+ - vddi-supply
+ - port
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ dsi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ panel@0 {
+ compatible = "flipkart,rimob-panel-nt35532-cs", "novatek,nt35532";
+ reg = <0>;
+
+ backlight = <&pmi8950_wled>;
+ reset-gpios = <&tlmm 61 GPIO_ACTIVE_LOW>;
+ avdd-supply = <&lab>;
+ avee-supply = <&ibb>;
+ vci-supply = <&pm8953_l17>;
+ vddi-supply = <&pm8953_l6>;
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&dsi0_out>;
+ };
+ };
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index ef978bfca514..8617d830b1d2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8175,6 +8175,11 @@ T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
F: Documentation/devicetree/bindings/display/panel/novatek,nt35510.yaml
F: drivers/gpu/drm/panel/panel-novatek-nt35510.c
+DRM DRIVER FOR NOVATEK NT35532 PANELS
+M: Cristian Cozzolino <cristian_ci@protonmail.com>
+S: Maintained
+F: Documentation/devicetree/bindings/display/panel/novatek,nt35532.yaml
+
DRM DRIVER FOR NOVATEK NT35560 PANELS
M: Linus Walleij <linusw@kernel.org>
S: Maintained
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v5 2/6] drm/panel: Add driver for Novatek NT35532
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
2026-03-31 9:47 ` [PATCH v5 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
@ 2026-03-31 9:47 ` Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 3/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU Cristian Cozzolino via B4 Relay
` (4 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Dmitry Baryshkov
From: Cristian Cozzolino <cristian_ci@protonmail.com>
Add support for Novatek NT35532-based 1080p video mode DSI panel.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
MAINTAINERS | 1 +
drivers/gpu/drm/panel/Kconfig | 10 +
drivers/gpu/drm/panel/Makefile | 1 +
drivers/gpu/drm/panel/panel-novatek-nt35532.c | 796 ++++++++++++++++++++++++++
4 files changed, 808 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index 8617d830b1d2..3c4eef7905d1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8179,6 +8179,7 @@ DRM DRIVER FOR NOVATEK NT35532 PANELS
M: Cristian Cozzolino <cristian_ci@protonmail.com>
S: Maintained
F: Documentation/devicetree/bindings/display/panel/novatek,nt35532.yaml
+F: drivers/gpu/drm/panel/panel-novatek-nt35532.c
DRM DRIVER FOR NOVATEK NT35560 PANELS
M: Linus Walleij <linusw@kernel.org>
diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index d6863b28ddc5..386fb6f1ff50 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -549,6 +549,16 @@ config DRM_PANEL_NOVATEK_NT35510
around the Novatek NT35510 display controller, such as some
Hydis panels.
+config DRM_PANEL_NOVATEK_NT35532
+ tristate "Novatek NT35532-based DSI video mode panel"
+ depends on OF
+ depends on DRM_MIPI_DSI
+ depends on BACKLIGHT_CLASS_DEVICE
+ select DRM_KMS_HELPER
+ help
+ Say Y or M here if you want to enable support for Novatek
+ NT35532-based 1080p video mode DSI panels.
+
config DRM_PANEL_NOVATEK_NT35560
tristate "Novatek NT35560 DSI command mode panel"
depends on OF
diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
index a4291dc3905b..7caf60dd3f57 100644
--- a/drivers/gpu/drm/panel/Makefile
+++ b/drivers/gpu/drm/panel/Makefile
@@ -54,6 +54,7 @@ obj-$(CONFIG_DRM_PANEL_NEC_NL8048HL11) += panel-nec-nl8048hl11.o
obj-$(CONFIG_DRM_PANEL_NEWVISION_NV3051D) += panel-newvision-nv3051d.o
obj-$(CONFIG_DRM_PANEL_NEWVISION_NV3052C) += panel-newvision-nv3052c.o
obj-$(CONFIG_DRM_PANEL_NOVATEK_NT35510) += panel-novatek-nt35510.o
+obj-$(CONFIG_DRM_PANEL_NOVATEK_NT35532) += panel-novatek-nt35532.o
obj-$(CONFIG_DRM_PANEL_NOVATEK_NT35560) += panel-novatek-nt35560.o
obj-$(CONFIG_DRM_PANEL_NOVATEK_NT35950) += panel-novatek-nt35950.o
obj-$(CONFIG_DRM_PANEL_NOVATEK_NT36523) += panel-novatek-nt36523.o
diff --git a/drivers/gpu/drm/panel/panel-novatek-nt35532.c b/drivers/gpu/drm/panel/panel-novatek-nt35532.c
new file mode 100644
index 000000000000..184f61bca7ca
--- /dev/null
+++ b/drivers/gpu/drm/panel/panel-novatek-nt35532.c
@@ -0,0 +1,796 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree.
+ * Copyright (c) 2026 Cristian Cozzolino <cristian_ci@protonmail.com>
+ */
+
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/property.h>
+#include <linux/regulator/consumer.h>
+
+#include <video/mipi_display.h>
+
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_modes.h>
+#include <drm/drm_panel.h>
+#include <drm/drm_probe_helper.h>
+
+struct novatek_nt35532 {
+ struct drm_panel panel;
+ struct mipi_dsi_device *dsi;
+ struct regulator_bulk_data *supplies;
+ struct gpio_desc *reset_gpio;
+ const struct nt35532_panel_desc *desc;
+};
+
+struct nt35532_panel_desc {
+ const struct drm_display_mode *mode;
+ int (*on)(struct novatek_nt35532 *ctx);
+};
+
+static const struct regulator_bulk_data nt35532_supplies[] = {
+ { .supply = "vci" },
+ { .supply = "vddi" },
+ { .supply = "avee" },
+ { .supply = "avdd" },
+};
+
+static inline struct novatek_nt35532 *to_novatek_nt35532(struct drm_panel *panel)
+{
+ return container_of_const(panel, struct novatek_nt35532, panel);
+}
+
+static void nt35532_reset(struct novatek_nt35532 *ctx)
+{
+ gpiod_set_value_cansleep(ctx->reset_gpio, 0);
+ usleep_range(10000, 11000);
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ usleep_range(5000, 6000);
+ gpiod_set_value_cansleep(ctx->reset_gpio, 0);
+ usleep_range(10000, 11000);
+}
+
+static int rimob_panel_on(struct novatek_nt35532 *ctx)
+{
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6e, 0x80);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x68, 0x13);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x05);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd7, 0x31);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd8, 0x7e);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x01, 0x55);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x04, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x05, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x06, 0x50);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x07, 0xd0);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0a, 0x0f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0c, 0x06);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0d, 0x6b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0e, 0x6b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0f, 0x70);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x10, 0x63);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x11, 0x3c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x12, 0x5c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x15, 0x60);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x16, 0x15);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x17, 0x15);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5b, 0xca);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5c, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5d, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5f, 0x1b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x60, 0xd5);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x61, 0xf0);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6c, 0xab);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6d, 0x44);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6e, 0x80);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x05);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x00, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x01, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x02, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x03, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x04, 0x38);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x05, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x06, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x07, 0x19);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x08, 0x1b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x09, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0a, 0x1d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0b, 0x17);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0c, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0d, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0e, 0x08);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0f, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x10, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x11, 0x10);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x12, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x13, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x14, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x15, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x16, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x17, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x18, 0x38);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x19, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1a, 0x1a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1b, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1c, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1d, 0x1c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1e, 0x16);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1f, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x20, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x21, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x22, 0x06);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x23, 0x0a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x24, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x25, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x26, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x27, 0x3f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x54, 0x08);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x55, 0x07);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x56, 0x1a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x58, 0x19);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x59, 0x36);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5a, 0x1b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5b, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5c, 0x32);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5e, 0x27);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5f, 0x28);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x60, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x61, 0x2c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x62, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x63, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x64, 0x32);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x65, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x66, 0x44);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x67, 0x11);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x68, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x69, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6a, 0x06);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6b, 0x22);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6c, 0x08);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6d, 0x08);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x78, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x79, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7e, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7f, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x80, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x81, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8d, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8e, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8f, 0xc0);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x90, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x91, 0x10);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x92, 0x09);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x96, 0x11);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x97, 0x14);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x98, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x99, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9a, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9b, 0x61);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9c, 0x15);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9d, 0x30);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9f, 0x0f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa2, 0xb0);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa7, 0x0a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa9, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xaa, 0x70);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xab, 0xda);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xac, 0xff);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xae, 0xf4);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xaf, 0x40);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb0, 0x7f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb1, 0x16);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb2, 0x53);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb3, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb4, 0x2a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb5, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb6, 0xf0);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbc, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbd, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbe, 0x3b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbf, 0x13);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc0, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc1, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc2, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc3, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc4, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc5, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc6, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc7, 0x77);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc8, 0xaa);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc9, 0x2a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xca, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcb, 0xaa);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcc, 0x92);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcd, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xce, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcf, 0x88);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd0, 0xaa);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd1, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd2, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd3, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd6, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xed, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xee, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xef, 0x70);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfa, 0x03);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x75, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x76, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x77, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x78, 0x20);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x79, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7a, 0x49);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7b, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7c, 0x66);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7d, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7e, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7f, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x80, 0x91);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x81, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x82, 0xa3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x83, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x84, 0xb3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x85, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x86, 0xc1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x87, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x88, 0xf1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x89, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8a, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8b, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8c, 0x54);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8d, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8e, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8f, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x90, 0xd1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x91, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x92, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x93, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x94, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x95, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x96, 0x43);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x97, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x98, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x99, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9a, 0xa2);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9b, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9c, 0xd7);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9d, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9e, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9f, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa0, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa2, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa3, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa4, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa5, 0x4b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa6, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa7, 0x5d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa9, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xaa, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xab, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xac, 0x8e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xad, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xae, 0xae);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xaf, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb0, 0xc9);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb1, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb2, 0xcd);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb3, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb4, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb5, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb6, 0x20);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb7, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb8, 0x49);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb9, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xba, 0x66);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbb, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbc, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbd, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbe, 0x91);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbf, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc0, 0xa3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc1, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc2, 0xb3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc3, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc4, 0xc1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc5, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc6, 0xf1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc7, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc8, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc9, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xca, 0x54);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcc, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcd, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xce, 0xd1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcf, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd0, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd1, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd2, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd3, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd4, 0x43);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd5, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd6, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd7, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd8, 0xa2);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd9, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xda, 0xd7);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdb, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdc, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdd, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xde, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdf, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe0, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe1, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe2, 0x4b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe3, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe4, 0x5d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe5, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe6, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe7, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe8, 0x8e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe9, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xea, 0xae);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xeb, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xec, 0xc9);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xed, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xee, 0xcd);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xef, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf0, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf1, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf2, 0x20);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf3, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf4, 0x49);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf5, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf6, 0x66);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf7, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf8, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xf9, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfa, 0x91);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x00, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x01, 0xa3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x02, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x03, 0xb3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x04, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x05, 0xc1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x06, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x07, 0xf1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x08, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x09, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0a, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0b, 0x54);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0c, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0d, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0e, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x0f, 0xd1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x10, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x11, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x12, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x13, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x14, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x15, 0x43);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x16, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x17, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x18, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x19, 0xa2);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1a, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1b, 0xd7);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1c, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1d, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1e, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x1f, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x20, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x21, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x22, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x23, 0x4b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x24, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x25, 0x5d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x26, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x27, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x28, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x29, 0x8e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x2a, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x2b, 0xae);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x2d, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x2f, 0xc9);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x30, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x31, 0xcd);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x32, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x33, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x34, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x35, 0x20);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x36, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x37, 0x49);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x38, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x39, 0x66);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x3a, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x3b, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x3d, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x3f, 0x91);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x40, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x41, 0xa3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x42, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x43, 0xb3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x44, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x45, 0xc1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x46, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x47, 0xf1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x48, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x49, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x4a, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x4b, 0x54);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x4c, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x4d, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x4e, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x4f, 0xd1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x50, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x51, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x52, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x53, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x54, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x55, 0x43);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x56, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x58, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x59, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5a, 0xa2);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5b, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5c, 0xd7);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5d, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5e, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x5f, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x60, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x61, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x62, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x63, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x64, 0x4b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x65, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x66, 0x5d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x67, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x68, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x69, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6a, 0x8e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6b, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6c, 0xae);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6d, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6e, 0xc9);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x6f, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x70, 0xcd);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x71, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x72, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x73, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x74, 0x20);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x75, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x76, 0x49);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x77, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x78, 0x66);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x79, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7a, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7b, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7c, 0x91);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7d, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7e, 0xa3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x7f, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x80, 0xb3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x81, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x82, 0xc1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x83, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x84, 0xf1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x85, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x86, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x87, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x88, 0x54);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x89, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8a, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8b, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8c, 0xd1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8d, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8e, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x8f, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x90, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x91, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x92, 0x43);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x93, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x94, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x95, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x96, 0xa2);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x97, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x98, 0xd7);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x99, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9a, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9b, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9c, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9d, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9e, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x9f, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa0, 0x4b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa2, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa3, 0x5d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa4, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa5, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa6, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa7, 0x8e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xa9, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xaa, 0xae);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xab, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xac, 0xc9);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xad, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xae, 0xcd);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xaf, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb0, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb1, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb2, 0x20);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb3, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb4, 0x49);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb5, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb6, 0x66);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb7, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb8, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb9, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xba, 0x91);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbb, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbc, 0xa3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbd, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbe, 0xb3);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xbf, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc0, 0xc1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc1, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc2, 0xf1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc3, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc4, 0x18);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc5, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc6, 0x54);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc7, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc8, 0x85);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xc9, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xca, 0xd1);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcb, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcc, 0x0c);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcd, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xce, 0x0e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xcf, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd0, 0x43);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd1, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd2, 0x7d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd3, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd4, 0xa2);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd5, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd6, 0xd7);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd7, 0x02);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd8, 0xf8);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd9, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xda, 0x2b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdb, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdc, 0x3a);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdd, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xde, 0x4b);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xdf, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe0, 0x5d);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe1, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe2, 0x73);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe3, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe4, 0x8e);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe5, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe6, 0xae);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe7, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe8, 0xc9);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xe9, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xea, 0xcd);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0xee);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x02, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x40, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x02, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x41, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x02, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x42, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xff, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xfb, 0x01);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xba, 0x03);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x35, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0x36, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xb0, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd3, 0x10);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd4, 0x0f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd5, 0x0f);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd6, 0x48);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd7, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, 0xd9, 0x00);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, MIPI_DCS_EXIT_SLEEP_MODE, 0x00);
+ mipi_dsi_msleep(&dsi_ctx, 120);
+ mipi_dsi_generic_write_seq_multi(&dsi_ctx, MIPI_DCS_SET_DISPLAY_ON, 0x00);
+ mipi_dsi_msleep(&dsi_ctx, 50);
+
+ return dsi_ctx.accum_err;
+}
+
+static int nt35532_off(struct novatek_nt35532 *ctx)
+{
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
+
+ mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
+ mipi_dsi_msleep(&dsi_ctx, 50);
+ mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
+ mipi_dsi_msleep(&dsi_ctx, 120);
+
+ return dsi_ctx.accum_err;
+}
+
+static int nt35532_prepare(struct drm_panel *panel)
+{
+ struct novatek_nt35532 *ctx = to_novatek_nt35532(panel);
+ struct device *dev = &ctx->dsi->dev;
+ int ret;
+
+ ret = regulator_bulk_enable(ARRAY_SIZE(nt35532_supplies), ctx->supplies);
+ if (ret < 0) {
+ dev_err(dev, "Failed to enable regulators: %d\n", ret);
+ return ret;
+ }
+
+ nt35532_reset(ctx);
+
+ ret = ctx->desc->on(ctx);
+ if (ret < 0) {
+ dev_err(dev, "Failed to initialize panel: %d\n", ret);
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ regulator_bulk_disable(ARRAY_SIZE(nt35532_supplies), ctx->supplies);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int nt35532_unprepare(struct drm_panel *panel)
+{
+ struct novatek_nt35532 *ctx = to_novatek_nt35532(panel);
+ struct device *dev = &ctx->dsi->dev;
+ int ret;
+
+ ret = nt35532_off(ctx);
+ if (ret < 0)
+ dev_err(dev, "Failed to un-initialize panel: %d\n", ret);
+
+ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
+ regulator_bulk_disable(ARRAY_SIZE(nt35532_supplies), ctx->supplies);
+
+ return 0;
+}
+
+static const struct drm_display_mode rimob_panel_mode = {
+ .clock = (1080 + 100 + 6 + 94) * (1920 + 15 + 6 + 10) * 60 / 1000,
+ .hdisplay = 1080,
+ .hsync_start = 1080 + 100,
+ .hsync_end = 1080 + 100 + 6,
+ .htotal = 1080 + 100 + 6 + 94,
+ .vdisplay = 1920,
+ .vsync_start = 1920 + 15,
+ .vsync_end = 1920 + 15 + 6,
+ .vtotal = 1920 + 15 + 6 + 10,
+ .width_mm = 68,
+ .height_mm = 121,
+ .type = DRM_MODE_TYPE_DRIVER,
+};
+
+static int nt35532_get_modes(struct drm_panel *panel,
+ struct drm_connector *connector)
+{
+ struct novatek_nt35532 *ctx = to_novatek_nt35532(panel);
+ const struct drm_display_mode *mode = ctx->desc->mode;
+
+ return drm_connector_helper_get_modes_fixed(connector, mode);
+}
+
+static const struct nt35532_panel_desc rimob_panel_desc = {
+ .mode = &rimob_panel_mode,
+ .on = rimob_panel_on,
+};
+
+static const struct drm_panel_funcs novatek_nt35532_panel_funcs = {
+ .prepare = nt35532_prepare,
+ .unprepare = nt35532_unprepare,
+ .get_modes = nt35532_get_modes,
+};
+
+static int nt35532_probe(struct mipi_dsi_device *dsi)
+{
+ struct device *dev = &dsi->dev;
+ struct novatek_nt35532 *ctx;
+ int ret;
+
+ ctx = devm_drm_panel_alloc(dev, struct novatek_nt35532, panel,
+ &novatek_nt35532_panel_funcs,
+ DRM_MODE_CONNECTOR_DSI);
+ if (IS_ERR(ctx))
+ return PTR_ERR(ctx);
+
+ ctx->desc = device_get_match_data(dev);
+
+ ret = devm_regulator_bulk_get_const(dev,
+ ARRAY_SIZE(nt35532_supplies),
+ nt35532_supplies,
+ &ctx->supplies);
+ if (ret < 0)
+ return ret;
+
+ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(ctx->reset_gpio))
+ return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
+ "Failed to get reset-gpios\n");
+
+ ctx->dsi = dsi;
+ mipi_dsi_set_drvdata(dsi, ctx);
+
+ dsi->lanes = 4;
+ dsi->format = MIPI_DSI_FMT_RGB888;
+ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_MODE_VIDEO_HSE | MIPI_DSI_MODE_LPM;
+
+ ctx->panel.prepare_prev_first = true;
+
+ ret = drm_panel_of_backlight(&ctx->panel);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to get backlight\n");
+
+ drm_panel_add(&ctx->panel);
+
+ ret = mipi_dsi_attach(dsi);
+ if (ret < 0) {
+ drm_panel_remove(&ctx->panel);
+ return dev_err_probe(dev, ret, "Failed to attach to DSI host\n");
+ }
+
+ return 0;
+}
+
+static void nt35532_remove(struct mipi_dsi_device *dsi)
+{
+ struct novatek_nt35532 *ctx = mipi_dsi_get_drvdata(dsi);
+ int ret;
+
+ ret = mipi_dsi_detach(dsi);
+ if (ret < 0)
+ dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret);
+
+ drm_panel_remove(&ctx->panel);
+}
+
+static const struct of_device_id nt35532_of_match[] = {
+ { .compatible = "flipkart,rimob-panel-nt35532-cs", .data = &rimob_panel_desc },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, nt35532_of_match);
+
+static struct mipi_dsi_driver nt35532_driver = {
+ .probe = nt35532_probe,
+ .remove = nt35532_remove,
+ .driver = {
+ .name = "panel-novatek-nt35532",
+ .of_match_table = nt35532_of_match,
+ },
+};
+module_mipi_dsi_driver(nt35532_driver);
+
+MODULE_DESCRIPTION("DRM driver for Novatek NT35532-based 1080p video mode DSI panel");
+MODULE_LICENSE("GPL");
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v5 3/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
2026-03-31 9:47 ` [PATCH v5 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
2026-03-31 9:47 ` [PATCH v5 2/6] drm/panel: Add driver for Novatek NT35532 Cristian Cozzolino via B4 Relay
@ 2026-03-31 9:47 ` Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 4/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth Cristian Cozzolino via B4 Relay
` (3 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Konrad Dybcio, Dmitry Baryshkov
From: Cristian Cozzolino <cristian_ci@protonmail.com>
Add the description for the display panel found on this phone.
And with this done we can also enable the GPU and set the zap shader
firmware path.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
.../arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts | 73 ++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
index ef4faf763132..5a9d71d1e466 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
@@ -78,6 +78,13 @@ vph_pwr: vph-pwr-regulator {
};
};
+&gpu {
+ status = "okay";
+};
+
+&gpu_zap_shader {
+ firmware-name = "qcom/msm8953/flipkart/rimob/a506_zap.mbn";
+};
&hsusb_phy {
vdd-supply = <&pm8953_l3>;
@@ -87,11 +94,70 @@ &hsusb_phy {
status = "okay";
};
+&ibb {
+ qcom,discharge-resistor-kohms = <32>;
+};
+
+&lab {
+ qcom,soft-start-us = <800>;
+};
+
+&mdss {
+ status = "okay";
+};
+
+&mdss_dsi0 {
+ vdda-supply = <&pm8953_s3>;
+ vddio-supply = <&pm8953_l6>;
+
+ status = "okay";
+
+ panel: panel@0 {
+ compatible = "flipkart,rimob-panel-nt35532-cs";
+ reg = <0>;
+
+ backlight = <&pmi8950_wled>;
+ reset-gpios = <&tlmm 61 GPIO_ACTIVE_LOW>;
+ avdd-supply = <&lab>;
+ avee-supply = <&ibb>;
+ vci-supply = <&pm8953_l17>;
+ vddi-supply = <&pm8953_l6>;
+
+ pinctrl-0 = <&panel_default>;
+ pinctrl-names = "default";
+
+ port {
+ panel_in: endpoint {
+ remote-endpoint = <&mdss_dsi0_out>;
+ };
+ };
+ };
+};
+
+&mdss_dsi0_out {
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&panel_in>;
+};
+
+&mdss_dsi0_phy {
+ vcca-supply = <&pm8953_l3>;
+
+ status = "okay";
+};
+
&pm8953_resin {
linux,code = <KEY_VOLUMEDOWN>;
status = "okay";
};
+&pmi8950_wled {
+ qcom,current-limit-microamp = <10000>;
+ qcom,num-strings = <3>;
+ qcom,ovp-millivolt = <29500>;
+
+ status = "okay";
+};
+
&rpm_requests {
regulators {
compatible = "qcom,rpm-pm8953-regulators";
@@ -238,6 +304,13 @@ &sdhc_2 {
&tlmm {
gpio-reserved-ranges = <0 4>, <135 4>;
+ panel_default: panel-default-state {
+ pins = "gpio61";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
gpio_key_default: gpio-key-default-state {
pins = "gpio85";
function = "gpio";
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v5 4/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
` (2 preceding siblings ...)
2026-03-31 9:47 ` [PATCH v5 3/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU Cristian Cozzolino via B4 Relay
@ 2026-03-31 9:47 ` Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 5/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen Cristian Cozzolino via B4 Relay
` (2 subsequent siblings)
6 siblings, 1 reply; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Konrad Dybcio, Dmitry Baryshkov
From: Cristian Cozzolino <cristian_ci@protonmail.com>
Configure and enable the WCNSS which provides WiFi and Bluetooth on this
device using the WCN3660B chip.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
index 5a9d71d1e466..db5c9f04bf1a 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
@@ -326,3 +326,18 @@ &usb3 {
&usb3_dwc3 {
dr_mode = "peripheral";
};
+
+&wcnss {
+ vddpx-supply = <&pm8953_l5>;
+
+ status = "okay";
+};
+
+&wcnss_iris {
+ compatible = "qcom,wcn3660b";
+
+ vddxo-supply = <&pm8953_l7>;
+ vddrfa-supply = <&pm8953_l19>;
+ vddpa-supply = <&pm8953_l9>;
+ vdddig-supply = <&pm8953_l5>;
+};
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v5 5/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
` (3 preceding siblings ...)
2026-03-31 9:47 ` [PATCH v5 4/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth Cristian Cozzolino via B4 Relay
@ 2026-03-31 9:47 ` Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 6/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: Enable new features for flipkart-rimob Claude Code Review Bot
6 siblings, 1 reply; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Konrad Dybcio
From: Cristian Cozzolino <cristian_ci@protonmail.com>
This device uses a Goodix GT5688 touch controller, connected to i2c_3.
Add it to the device tree.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
.../arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts | 32 ++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
index db5c9f04bf1a..060129c72264 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
@@ -94,6 +94,31 @@ &hsusb_phy {
status = "okay";
};
+&i2c_3 {
+ status = "okay";
+
+ touchscreen@5d {
+ compatible = "goodix,gt5688";
+ reg = <0x5d>;
+
+ interrupts-extended = <&tlmm 65 IRQ_TYPE_LEVEL_LOW>;
+
+ pinctrl-0 = <&tsp_int_rst_default>;
+ pinctrl-names = "default";
+
+ irq-gpios = <&tlmm 65 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>;
+
+ VDDIO-supply = <&pm8953_l6>;
+ AVDD28-supply = <&pm8953_l10>;
+
+ touchscreen-size-x = <1080>;
+ touchscreen-size-y = <1920>;
+ touchscreen-inverted-x;
+ touchscreen-inverted-y;
+ };
+};
+
&ibb {
qcom,discharge-resistor-kohms = <32>;
};
@@ -311,6 +336,13 @@ panel_default: panel-default-state {
bias-disable;
};
+ tsp_int_rst_default: tsp-int-rst-default-state {
+ pins = "gpio64", "gpio65";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-pull-up;
+ };
+
gpio_key_default: gpio-key-default-state {
pins = "gpio85";
function = "gpio";
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v5 6/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
` (4 preceding siblings ...)
2026-03-31 9:47 ` [PATCH v5 5/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen Cristian Cozzolino via B4 Relay
@ 2026-03-31 9:47 ` Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 21:57 ` Claude review: Enable new features for flipkart-rimob Claude Code Review Bot
6 siblings, 1 reply; 17+ messages in thread
From: Cristian Cozzolino via B4 Relay @ 2026-03-31 9:47 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Konrad Dybcio
Cc: dri-devel, devicetree, linux-kernel, linux-arm-msm,
~postmarketos/upstreaming, phone-devel, Cristian Cozzolino,
Konrad Dybcio, Dmitry Baryshkov
From: Cristian Cozzolino <cristian_ci@protonmail.com>
Enable the Hall effect sensor (flip cover) for Billion Capture+.
The GPIO is mapped to SW_LID events as in other qcom devices.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Cristian Cozzolino <cristian_ci@protonmail.com>
---
arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
index 060129c72264..978820348fa5 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
+++ b/arch/arm64/boot/dts/qcom/msm8953-flipkart-rimob.dts
@@ -47,9 +47,18 @@ framebuffer@90001000 {
gpio-keys {
compatible = "gpio-keys";
- pinctrl-0 = <&gpio_key_default>;
+ pinctrl-0 = <&gpio_hall_sensor_default>, <&gpio_key_default>;
pinctrl-names = "default";
+ event-hall-sensor {
+ label = "Hall Effect Sensor";
+ gpios = <&tlmm 46 GPIO_ACTIVE_LOW>;
+ linux,input-type = <EV_SW>;
+ linux,code = <SW_LID>;
+ linux,can-disable;
+ wakeup-source;
+ };
+
key-volume-up {
label = "Volume Up";
gpios = <&tlmm 85 GPIO_ACTIVE_LOW>;
@@ -329,6 +338,13 @@ &sdhc_2 {
&tlmm {
gpio-reserved-ranges = <0 4>, <135 4>;
+ gpio_hall_sensor_default: gpio-hall-sensor-default-state {
+ pins = "gpio46";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
panel_default: panel-default-state {
pins = "gpio61";
function = "gpio";
--
2.53.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Claude review: Enable new features for flipkart-rimob
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
` (5 preceding siblings ...)
2026-03-31 9:47 ` [PATCH v5 6/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
6 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Overall Series Review
Subject: Enable new features for flipkart-rimob
Author: Cristian Cozzolino via B4 Relay
<devnull+cristian_ci.protonmail.com@kernel.org>
Patches: 7
Reviewed: 2026-04-01T07:57:44.391629
---
This is a well-structured v5 series enabling display, GPU, touchscreen, WiFi/BT, and hall sensor for the Flipkart Billion Capture+ (MSM8953-based phone). The patches are logically split, already carry multiple Reviewed-by tags from subsystem maintainers, and follow current kernel coding patterns (multi-context DSI helpers, `devm_drm_panel_alloc`, etc.).
There is one binding-compliance bug in the DTS (missing fallback compatible), and one minor inconsistency in the panel driver's on-path. Otherwise the series looks good.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: dt-bindings: display: panel: Add Novatek NT35532 LCD DSI
2026-03-31 9:47 ` [PATCH v5 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
The binding looks correct. Two-element compatible with a device-specific first entry and `novatek,nt35532` fallback is the right approach. Supply descriptions are clear. `vddam-supply` is documented in the binding but never used by the driver or DTS - this is fine since it's optional, but worth noting it exists purely as documentation.
Already has `Reviewed-by: Krzysztof Kozlowski`.
No issues.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: drm/panel: Add driver for Novatek NT35532
2026-03-31 9:47 ` [PATCH v5 2/6] drm/panel: Add driver for Novatek NT35532 Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
The driver is cleanly structured and uses modern APIs (`devm_drm_panel_alloc`, `mipi_dsi_multi_context`, `devm_regulator_bulk_get_const`).
**Minor issue - inconsistent sleep/display-on commands in `rimob_panel_on()`:**
```c
mipi_dsi_generic_write_seq_multi(&dsi_ctx, MIPI_DCS_EXIT_SLEEP_MODE, 0x00);
mipi_dsi_msleep(&dsi_ctx, 120);
mipi_dsi_generic_write_seq_multi(&dsi_ctx, MIPI_DCS_SET_DISPLAY_ON, 0x00);
```
These use `mipi_dsi_generic_write_seq_multi` to send a generic MIPI packet containing `{0x11, 0x00}` / `{0x29, 0x00}`. But `nt35532_off()` correctly uses the DCS-specific helpers:
```c
mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
```
Generic writes and DCS commands use different MIPI DSI packet types. Since this is auto-generated from vendor DT it may work fine in practice, but it's inconsistent and worth considering whether the on-path should also use `mipi_dsi_dcs_exit_sleep_mode_multi()` and `mipi_dsi_dcs_set_display_on_multi()` for consistency and correctness.
The `of_device_id` table only matches the specific compatible `"flipkart,rimob-panel-nt35532-cs"` and not the fallback `"novatek,nt35532"`. This is correct - the fallback is for future drivers/panels that share the same DDIC, and the specific compatible carries the init sequence data via `.data`.
Already has `Reviewed-by: Dmitry Baryshkov`.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU
2026-03-31 9:47 ` [PATCH v5 3/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
**Bug - missing fallback compatible in DTS panel node:**
```c
compatible = "flipkart,rimob-panel-nt35532-cs";
```
The binding (patch 1) requires two items:
```yaml
compatible:
items:
- enum:
- flipkart,rimob-panel-nt35532-cs
- const: novatek,nt35532
```
This means the DTS **must** specify both:
```
compatible = "flipkart,rimob-panel-nt35532-cs", "novatek,nt35532";
```
This will fail `dt_binding_check`. The binding example in patch 1 shows the correct two-element form, so this is just an oversight in the DTS itself.
The rest of the patch (GPU, DSI, DSI PHY, WLED, LAB/IBB, pinctrl) looks standard and correct. Nodes are ordered alphabetically as required.
Already has `Reviewed-by` from Konrad Dybcio and Dmitry Baryshkov.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth
2026-03-31 9:47 ` [PATCH v5 4/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
Straightforward WCNSS + WCN3660B enablement. Supply assignments look correct for this SoC.
No issues.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen
2026-03-31 9:47 ` [PATCH v5 5/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
Goodix GT5688 touchscreen on I2C3. The node provides both `interrupts-extended` and `irq-gpios` which is the standard pattern for Goodix. `VDDIO` and `AVDD28` supply names match the Goodix binding.
No issues.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Claude review: arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor
2026-03-31 9:47 ` [PATCH v5 6/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor Cristian Cozzolino via B4 Relay
@ 2026-03-31 21:57 ` Claude Code Review Bot
0 siblings, 0 replies; 17+ messages in thread
From: Claude Code Review Bot @ 2026-03-31 21:57 UTC (permalink / raw)
To: dri-devel-reviews
Patch Review
Clean addition of hall effect sensor as a gpio-keys child with `SW_LID` event type. The pinctrl states under `&tlmm` are now sorted by GPIO index (46, 61, 64-65, 85) as requested by reviewers in v5 changelog.
No issues.
---
**Summary of items requiring action:**
1. **Patch 3 (bug):** DTS panel `compatible` must include the fallback `"novatek,nt35532"` to match the binding schema.
2. **Patch 2 (minor):** Consider using `mipi_dsi_dcs_exit_sleep_mode_multi()` / `mipi_dsi_dcs_set_display_on_multi()` instead of generic writes for the standard DCS commands in `rimob_panel_on()`, for consistency with the off path.
---
Generated by Claude Code Patch Reviewer
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2026-03-31 21:57 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-31 9:47 [PATCH v5 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
2026-03-31 9:47 ` [PATCH v5 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 2/6] drm/panel: Add driver for Novatek NT35532 Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 3/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable display and GPU Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 4/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable WiFi/Bluetooth Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 5/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable touchscreen Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 9:47 ` [PATCH v5 6/6] arm64: dts: qcom: msm8953-flipkart-rimob: Enable Hall sensor Cristian Cozzolino via B4 Relay
2026-03-31 21:57 ` Claude review: " Claude Code Review Bot
2026-03-31 21:57 ` Claude review: Enable new features for flipkart-rimob Claude Code Review Bot
-- strict thread matches above, loose matches on Subject: below --
2026-03-21 16:23 [PATCH v3 0/6] " Cristian Cozzolino via B4 Relay
2026-03-21 16:23 ` [PATCH v3 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
2026-03-21 17:00 ` Claude review: " Claude Code Review Bot
2026-03-18 22:28 [PATCH v2 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
2026-03-18 22:28 ` [PATCH v2 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
2026-03-21 19:00 ` Claude review: " Claude Code Review Bot
2026-03-08 15:52 [PATCH 0/6] Enable new features for flipkart-rimob Cristian Cozzolino via B4 Relay
2026-03-08 15:52 ` [PATCH 1/6] dt-bindings: display: panel: Add Novatek NT35532 LCD DSI Cristian Cozzolino via B4 Relay
2026-03-08 21:46 ` Claude review: " Claude Code Review Bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox