All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2
@ 2026-10-30  5:44 Icenowy Zheng
  2026-10-30  5:44 ` [PATCH 1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics Icenowy Zheng
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Icenowy Zheng @ 2026-10-30  5:44 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao,
	Icenowy Zheng

Mingjun MJ070BI30IA2 is a LCD panel used by the Lichee Console 4A
device, with a initialization sequence matching other ILI9881C
sequences.

In addition to the normal binding + sequence panel adding part, this
patchset contains one extra patch trying to address a hardware quirk of
Lichee Console 4A -- the panel could never be really powered off /
reseted in hardware (the reset pin isn't wired to the mainboard, and the
panel is powered with a always-on regulator).

Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
---
Icenowy Zheng (4):
      dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics
      dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2
      drm/panel: ilitek-ili9881c: add Mingjun MJ070BI30IA2
      drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback

 .../bindings/display/panel/ilitek,ili9881c.yaml    |   1 +
 .../devicetree/bindings/vendor-prefixes.yaml       |   2 +
 drivers/gpu/drm/panel/panel-ilitek-ili9881c.c      | 226 +++++++++++++++++++++
 3 files changed, 229 insertions(+)
---
base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222
change-id: 20261030-mj070bi30ia2-cd8b24ab77fe

Best regards,
--  
Icenowy Zheng <zhengxingda@iscas.ac.cn>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics
  2026-10-30  5:44 [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Icenowy Zheng
@ 2026-10-30  5:44 ` Icenowy Zheng
  2026-10-30  5:44 ` [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2 Icenowy Zheng
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Icenowy Zheng @ 2026-10-30  5:44 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao,
	Icenowy Zheng

Shenzhen Mingjun Optoelectronics Co, Ltd. is a vendor for LCD modules,
and it's the supplier for the MJ070BI30IA2 panel used in the Sipeed
Lichee Console 4A device.

Add a vendor prefix for it.

Link: https://www.fpdisplay.com/index.php?homepage=mjgd
Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
---
 Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index ba20029693734..094d9f12c11d5 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -1099,6 +1099,8 @@ patternProperties:
     description: Changzhou Milianke Electronic Technology Co., Ltd
   "^milkv,.*":
     description: MilkV Technology Co., Ltd
+  "^mingjun,.*":
+    description: Shenzhen Mingjun Optoelectronics Co., Ltd
   "^miniand,.*":
     description: Miniand Tech
   "^minix,.*":

-- 
2.56.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2
  2026-10-30  5:44 [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Icenowy Zheng
  2026-10-30  5:44 ` [PATCH 1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics Icenowy Zheng
@ 2026-10-30  5:44 ` Icenowy Zheng
  2026-10-30 12:09   ` Krzysztof Kozlowski
  2026-10-30 12:09   ` Krzysztof Kozlowski
  2026-10-30  5:44 ` [PATCH 3/4] drm/panel: ilitek-ili9881c: add " Icenowy Zheng
  2026-10-30  5:44 ` [PATCH 4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback Icenowy Zheng
  3 siblings, 2 replies; 8+ messages in thread
From: Icenowy Zheng @ 2026-10-30  5:44 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao,
	Icenowy Zheng

Mingjun MJ070BI30IA2 is the LCD panel used by Sipeed Lichee Console 4A,
and its initialization sequence seems to match ILI9881C controller.

Add its compatible string to the ILI9881C binding.

Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
---
 Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml b/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
index 42e35986fbf60..0139e35d85c4b 100644
--- a/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
+++ b/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
@@ -20,6 +20,7 @@ properties:
           - bananapi,lhr050h41
           - bestar,bsd1218-a101kl68
           - feixin,k101-im2byl02
+          - mingjun,mj070bi30ia2
           - raspberrypi,dsi-5inch
           - raspberrypi,dsi-7inch
           - startek,kd050hdfia020

-- 
2.56.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] drm/panel: ilitek-ili9881c: add Mingjun MJ070BI30IA2
  2026-10-30  5:44 [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Icenowy Zheng
  2026-10-30  5:44 ` [PATCH 1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics Icenowy Zheng
  2026-10-30  5:44 ` [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2 Icenowy Zheng
@ 2026-10-30  5:44 ` Icenowy Zheng
  2026-10-30  5:54   ` sashiko-bot
  2026-10-30  5:44 ` [PATCH 4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback Icenowy Zheng
  3 siblings, 1 reply; 8+ messages in thread
From: Icenowy Zheng @ 2026-10-30  5:44 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao,
	Icenowy Zheng

Mingjun MJ070BI30IA2 is a 7" MIPI DSI LCD panel used by Lichee Console
4A, with a initialization sequence matching the pattern of Ilitek
ILI9881C driver chip.

Add it to the driver for ILI9881C-based panels.

Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
---
 drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 222 ++++++++++++++++++++++++++
 1 file changed, 222 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index c3d5ab67121d9..83148c40e25ca 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -2198,6 +2198,201 @@ static const struct ili9881c_instr waveshare_7inch_a_init[] = {
 	ILI9881C_COMMAND_INSTR(0x36, 0x00),
 };
 
+static const struct ili9881c_instr mj070bi30ia2_init[] = {
+	ILI9881C_SWITCH_PAGE_INSTR(3),
+	ILI9881C_COMMAND_INSTR(0x01, 0x00),
+	ILI9881C_COMMAND_INSTR(0x02, 0x00),
+	ILI9881C_COMMAND_INSTR(0x03, 0x73),
+	ILI9881C_COMMAND_INSTR(0x04, 0x13),
+	ILI9881C_COMMAND_INSTR(0x05, 0x00),
+	ILI9881C_COMMAND_INSTR(0x06, 0x0A),
+	ILI9881C_COMMAND_INSTR(0x07, 0x05),
+	ILI9881C_COMMAND_INSTR(0x11, 0x00),
+	ILI9881C_COMMAND_INSTR(0x09, 0x28),
+	ILI9881C_COMMAND_INSTR(0x0A, 0x00),
+	ILI9881C_COMMAND_INSTR(0x0B, 0x00),
+	ILI9881C_COMMAND_INSTR(0x0C, 0x00),
+	ILI9881C_COMMAND_INSTR(0x0D, 0x28),
+	ILI9881C_COMMAND_INSTR(0x0E, 0x00),
+	ILI9881C_COMMAND_INSTR(0x0F, 0x28),
+	ILI9881C_COMMAND_INSTR(0x10, 0x28),
+	ILI9881C_COMMAND_INSTR(0x11, 0x00),
+	ILI9881C_COMMAND_INSTR(0x12, 0x00),
+	ILI9881C_COMMAND_INSTR(0x13, 0x00),
+	ILI9881C_COMMAND_INSTR(0x14, 0x00),
+	ILI9881C_COMMAND_INSTR(0x15, 0x00),
+	ILI9881C_COMMAND_INSTR(0x16, 0x00),
+	ILI9881C_COMMAND_INSTR(0x17, 0x00),
+	ILI9881C_COMMAND_INSTR(0x18, 0x00),
+	ILI9881C_COMMAND_INSTR(0x19, 0x00),
+	ILI9881C_COMMAND_INSTR(0x1A, 0x00),
+	ILI9881C_COMMAND_INSTR(0x1B, 0x00),
+	ILI9881C_COMMAND_INSTR(0x1C, 0x00),
+	ILI9881C_COMMAND_INSTR(0x1D, 0x00),
+	ILI9881C_COMMAND_INSTR(0x1E, 0x40),
+	ILI9881C_COMMAND_INSTR(0x1F, 0x80),
+	ILI9881C_COMMAND_INSTR(0x20, 0x06),
+	ILI9881C_COMMAND_INSTR(0x21, 0x01),
+	ILI9881C_COMMAND_INSTR(0x22, 0x00),
+	ILI9881C_COMMAND_INSTR(0x23, 0x00),
+	ILI9881C_COMMAND_INSTR(0x24, 0x00),
+	ILI9881C_COMMAND_INSTR(0x25, 0x00),
+	ILI9881C_COMMAND_INSTR(0x26, 0x00),
+	ILI9881C_COMMAND_INSTR(0x27, 0x00),
+	ILI9881C_COMMAND_INSTR(0x28, 0x33),
+	ILI9881C_COMMAND_INSTR(0x29, 0x33),
+	ILI9881C_COMMAND_INSTR(0x2A, 0x00),
+	ILI9881C_COMMAND_INSTR(0x2B, 0x00),
+	ILI9881C_COMMAND_INSTR(0x2C, 0x04),
+	ILI9881C_COMMAND_INSTR(0x2D, 0x0C),
+	ILI9881C_COMMAND_INSTR(0x2E, 0x05),
+	ILI9881C_COMMAND_INSTR(0x2F, 0x05),
+	ILI9881C_COMMAND_INSTR(0x30, 0x00),
+	ILI9881C_COMMAND_INSTR(0x31, 0x00),
+	ILI9881C_COMMAND_INSTR(0x32, 0x31),
+	ILI9881C_COMMAND_INSTR(0x33, 0x00),
+	ILI9881C_COMMAND_INSTR(0x34, 0x00),
+	ILI9881C_COMMAND_INSTR(0x35, 0x0A),
+	ILI9881C_COMMAND_INSTR(0x36, 0x00),
+	ILI9881C_COMMAND_INSTR(0x37, 0x08),
+	ILI9881C_COMMAND_INSTR(0x70, 0x00),
+	ILI9881C_COMMAND_INSTR(0x39, 0x00),
+	ILI9881C_COMMAND_INSTR(0x3A, 0x00),
+	ILI9881C_COMMAND_INSTR(0x3B, 0x00),
+	ILI9881C_COMMAND_INSTR(0x3C, 0x00),
+	ILI9881C_COMMAND_INSTR(0x3D, 0x00),
+	ILI9881C_COMMAND_INSTR(0x3E, 0x00),
+	ILI9881C_COMMAND_INSTR(0x3F, 0x00),
+	ILI9881C_COMMAND_INSTR(0x40, 0x00),
+	ILI9881C_COMMAND_INSTR(0x41, 0x00),
+	ILI9881C_COMMAND_INSTR(0x42, 0x00),
+	ILI9881C_COMMAND_INSTR(0x43, 0x08),
+	ILI9881C_COMMAND_INSTR(0x44, 0x00),
+	ILI9881C_COMMAND_INSTR(0xA0, 0x02),
+	ILI9881C_COMMAND_INSTR(0x51, 0x23),
+	ILI9881C_COMMAND_INSTR(0x52, 0x44),
+	ILI9881C_COMMAND_INSTR(0x53, 0x67),
+	ILI9881C_COMMAND_INSTR(0x54, 0x89),
+	ILI9881C_COMMAND_INSTR(0x55, 0xAB),
+	ILI9881C_COMMAND_INSTR(0x56, 0x01),
+	ILI9881C_COMMAND_INSTR(0x57, 0x23),
+	ILI9881C_COMMAND_INSTR(0x58, 0x45),
+	ILI9881C_COMMAND_INSTR(0x59, 0x67),
+	ILI9881C_COMMAND_INSTR(0x5A, 0x89),
+	ILI9881C_COMMAND_INSTR(0x5B, 0xAB),
+	ILI9881C_COMMAND_INSTR(0x5C, 0xCD),
+	ILI9881C_COMMAND_INSTR(0x5D, 0xEF),
+	ILI9881C_COMMAND_INSTR(0x5E, 0x11),
+	ILI9881C_COMMAND_INSTR(0x5F, 0x02),
+	ILI9881C_COMMAND_INSTR(0x60, 0x08),
+	ILI9881C_COMMAND_INSTR(0x61, 0x0E),
+	ILI9881C_COMMAND_INSTR(0x62, 0x0F),
+	ILI9881C_COMMAND_INSTR(0x63, 0x0C),
+	ILI9881C_COMMAND_INSTR(0x64, 0x0D),
+	ILI9881C_COMMAND_INSTR(0x65, 0x17),
+	ILI9881C_COMMAND_INSTR(0x66, 0x01),
+	ILI9881C_COMMAND_INSTR(0x67, 0x01),
+	ILI9881C_COMMAND_INSTR(0x68, 0x02),
+	ILI9881C_COMMAND_INSTR(0x69, 0x02),
+	ILI9881C_COMMAND_INSTR(0x6A, 0x00),
+	ILI9881C_COMMAND_INSTR(0x6B, 0x00),
+	ILI9881C_COMMAND_INSTR(0x6C, 0x02),
+	ILI9881C_COMMAND_INSTR(0x6D, 0x02),
+	ILI9881C_COMMAND_INSTR(0x6E, 0x16),
+	ILI9881C_COMMAND_INSTR(0x6F, 0x16),
+	ILI9881C_COMMAND_INSTR(0x70, 0x06),
+	ILI9881C_COMMAND_INSTR(0x71, 0x06),
+	ILI9881C_COMMAND_INSTR(0x72, 0x07),
+	ILI9881C_COMMAND_INSTR(0x73, 0x07),
+	ILI9881C_COMMAND_INSTR(0x74, 0x02),
+	ILI9881C_COMMAND_INSTR(0x75, 0x02),
+	ILI9881C_COMMAND_INSTR(0x76, 0x08),
+	ILI9881C_COMMAND_INSTR(0x77, 0x0E),
+	ILI9881C_COMMAND_INSTR(0x78, 0x0F),
+	ILI9881C_COMMAND_INSTR(0x79, 0x0C),
+	ILI9881C_COMMAND_INSTR(0x7A, 0x0D),
+	ILI9881C_COMMAND_INSTR(0x7B, 0x17),
+	ILI9881C_COMMAND_INSTR(0x7C, 0x01),
+	ILI9881C_COMMAND_INSTR(0x7D, 0x01),
+	ILI9881C_COMMAND_INSTR(0x7E, 0x02),
+	ILI9881C_COMMAND_INSTR(0x7F, 0x02),
+	ILI9881C_COMMAND_INSTR(0x80, 0x00),
+	ILI9881C_COMMAND_INSTR(0x81, 0x00),
+	ILI9881C_COMMAND_INSTR(0x82, 0x02),
+	ILI9881C_COMMAND_INSTR(0x83, 0x02),
+	ILI9881C_COMMAND_INSTR(0x84, 0x16),
+	ILI9881C_COMMAND_INSTR(0x85, 0x16),
+	ILI9881C_COMMAND_INSTR(0x86, 0x06),
+	ILI9881C_COMMAND_INSTR(0x87, 0x06),
+	ILI9881C_COMMAND_INSTR(0x88, 0x07),
+	ILI9881C_COMMAND_INSTR(0x89, 0x07),
+	ILI9881C_COMMAND_INSTR(0x8A, 0x02),
+
+	ILI9881C_SWITCH_PAGE_INSTR(4),
+	ILI9881C_COMMAND_INSTR(0x6E, 0x1A),
+	ILI9881C_COMMAND_INSTR(0x6F, 0x37),
+	ILI9881C_COMMAND_INSTR(0x3A, 0xA4),
+	ILI9881C_COMMAND_INSTR(0x8D, 0x1F),
+	ILI9881C_COMMAND_INSTR(0x87, 0xBA),
+	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),
+	ILI9881C_COMMAND_INSTR(0x88, 0x0B),
+	ILI9881C_COMMAND_INSTR(0x38, 0x01),
+	ILI9881C_COMMAND_INSTR(0x39, 0x00),
+	ILI9881C_COMMAND_INSTR(0xB5, 0x02),
+	ILI9881C_COMMAND_INSTR(0x31, 0x25),
+	ILI9881C_COMMAND_INSTR(0x3B, 0x98),
+
+	ILI9881C_SWITCH_PAGE_INSTR(1),
+	ILI9881C_COMMAND_INSTR(0x22, 0x0A),
+	ILI9881C_COMMAND_INSTR(0x31, 0x00),
+	ILI9881C_COMMAND_INSTR(0xA6, 0xA6),
+	ILI9881C_COMMAND_INSTR(0x55, 0x3D),
+	ILI9881C_COMMAND_INSTR(0x50, 0x9E),
+	ILI9881C_COMMAND_INSTR(0x51, 0x99),
+	ILI9881C_COMMAND_INSTR(0x60, 0x06),
+	ILI9881C_COMMAND_INSTR(0x62, 0x20),
+	ILI9881C_COMMAND_INSTR(0xA0, 0x00),
+	ILI9881C_COMMAND_INSTR(0xA1, 0x17),
+	ILI9881C_COMMAND_INSTR(0xA2, 0x26),
+	ILI9881C_COMMAND_INSTR(0xA3, 0x13),
+	ILI9881C_COMMAND_INSTR(0xA4, 0x16),
+	ILI9881C_COMMAND_INSTR(0xA5, 0x29),
+	ILI9881C_COMMAND_INSTR(0xA6, 0x1E),
+	ILI9881C_COMMAND_INSTR(0xA7, 0x1F),
+	ILI9881C_COMMAND_INSTR(0xA8, 0x8B),
+	ILI9881C_COMMAND_INSTR(0xA9, 0x1D),
+	ILI9881C_COMMAND_INSTR(0xAA, 0x2A),
+	ILI9881C_COMMAND_INSTR(0xAB, 0x7B),
+	ILI9881C_COMMAND_INSTR(0xAC, 0x1A),
+	ILI9881C_COMMAND_INSTR(0xAD, 0x19),
+	ILI9881C_COMMAND_INSTR(0xAE, 0x4E),
+	ILI9881C_COMMAND_INSTR(0xAF, 0x24),
+	ILI9881C_COMMAND_INSTR(0xB0, 0x29),
+	ILI9881C_COMMAND_INSTR(0xB1, 0x4F),
+	ILI9881C_COMMAND_INSTR(0xB2, 0x5C),
+	ILI9881C_COMMAND_INSTR(0xB3, 0x3E),
+	ILI9881C_COMMAND_INSTR(0xC0, 0x00),
+	ILI9881C_COMMAND_INSTR(0xC1, 0x17),
+	ILI9881C_COMMAND_INSTR(0xC2, 0x26),
+	ILI9881C_COMMAND_INSTR(0xC3, 0x13),
+	ILI9881C_COMMAND_INSTR(0xC4, 0x16),
+	ILI9881C_COMMAND_INSTR(0xC5, 0x29),
+	ILI9881C_COMMAND_INSTR(0xC6, 0x1E),
+	ILI9881C_COMMAND_INSTR(0xC7, 0x1F),
+	ILI9881C_COMMAND_INSTR(0xC8, 0x8B),
+	ILI9881C_COMMAND_INSTR(0xC9, 0x1D),
+	ILI9881C_COMMAND_INSTR(0xCA, 0x2A),
+	ILI9881C_COMMAND_INSTR(0xCB, 0x7B),
+	ILI9881C_COMMAND_INSTR(0xCC, 0x1A),
+	ILI9881C_COMMAND_INSTR(0xCD, 0x19),
+	ILI9881C_COMMAND_INSTR(0xCE, 0x4E),
+	ILI9881C_COMMAND_INSTR(0xCF, 0x24),
+	ILI9881C_COMMAND_INSTR(0xD0, 0x29),
+	ILI9881C_COMMAND_INSTR(0xD1, 0x4D),
+	ILI9881C_COMMAND_INSTR(0xD2, 0x5C),
+	ILI9881C_COMMAND_INSTR(0xD3, 0x3E),
+};
+
 static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
 {
 	return container_of(panel, struct ili9881c, panel);
@@ -2493,6 +2688,23 @@ static const struct drm_display_mode waveshare_7inch_a_mode = {
 	.height_mm	= 154,
 };
 
+static const struct drm_display_mode mj070bi30ia2_mode = {
+	.clock		= 75750,
+
+	.hdisplay	= 800,
+	.hsync_start	= 800 + 48,
+	.hsync_end	= 800 + 48 + 32,
+	.htotal		= 800 + 48 + 32 + 80,
+
+	.vdisplay	= 1280,
+	.vsync_start	= 1280 + 3,
+	.vsync_end	= 1280 + 3 + 10,
+	.vtotal		= 1280 + 3 + 10 + 24,
+
+	.width_mm	= 94,
+	.height_mm	= 150,
+};
+
 static int ili9881c_get_modes(struct drm_panel *panel,
 			      struct drm_connector *connector)
 {
@@ -2704,6 +2916,15 @@ static const struct ili9881c_desc waveshare_7inch_a_desc = {
 	.lanes = 2,
 };
 
+static const struct ili9881c_desc mj070bi30ia2_desc = {
+	.init = mj070bi30ia2_init,
+	.init_length = ARRAY_SIZE(mj070bi30ia2_init),
+	.mode = &mj070bi30ia2_mode,
+	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		      MIPI_DSI_MODE_LPM,
+	.lanes = 4,
+};
+
 static const struct of_device_id ili9881c_of_match[] = {
 	{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
 	{ .compatible = "bestar,bsd1218-a101kl68", .data = &bsd1218_a101kl68_desc },
@@ -2714,6 +2935,7 @@ static const struct of_device_id ili9881c_of_match[] = {
 	{ .compatible = "wanchanglong,w552946aba", .data = &w552946aba_desc },
 	{ .compatible = "waveshare,7.0-dsi-touch-a", .data = &waveshare_7inch_a_desc },
 	{ .compatible = "ampire,am8001280g", .data = &am8001280g_desc },
+	{ .compatible = "mingjun,mj070bi30ia2", .data = &mj070bi30ia2_desc },
 	{ .compatible = "raspberrypi,dsi-5inch", &rpi_5inch_desc },
 	{ .compatible = "raspberrypi,dsi-7inch", &rpi_7inch_desc },
 	{ }

-- 
2.56.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback
  2026-10-30  5:44 [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Icenowy Zheng
                   ` (2 preceding siblings ...)
  2026-10-30  5:44 ` [PATCH 3/4] drm/panel: ilitek-ili9881c: add " Icenowy Zheng
@ 2026-10-30  5:44 ` Icenowy Zheng
  3 siblings, 0 replies; 8+ messages in thread
From: Icenowy Zheng @ 2026-10-30  5:44 UTC (permalink / raw)
  To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao,
	Icenowy Zheng

In case of neither reset pin nor switchable power supply is available,
the LCD module could be DC polarized (which is harmful) when the MIPI
DSI host is shut down.

It seems that do a soft reset for the LCD controller could stop the LCD
controller from biasing the liquid crystal, thus preventing the harm.

Add a soft reset after putting the LCD controller into sleep mode.

Tested on a Sipeed Lichee Console 4A, which has no LCD reset pin, and
the LCD supply is an always-on one.

Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
---
 drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index 83148c40e25ca..8b874c6f7d37c 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -2493,6 +2493,10 @@ static int ili9881c_unprepare(struct drm_panel *panel)
 
 	mipi_dsi_dcs_set_display_off_multi(&mctx);
 	mipi_dsi_dcs_enter_sleep_mode_multi(&mctx);
+	mipi_dsi_msleep(&mctx, 120);
+	mipi_dsi_dcs_soft_reset_multi(&mctx);
+	mipi_dsi_msleep(&mctx, 5);
+
 	regulator_disable(ctx->power);
 	if (ctx->iovcc)
 		regulator_disable(ctx->iovcc);

-- 
2.56.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/4] drm/panel: ilitek-ili9881c: add Mingjun MJ070BI30IA2
  2026-10-30  5:44 ` [PATCH 3/4] drm/panel: ilitek-ili9881c: add " Icenowy Zheng
@ 2026-10-30  5:54   ` sashiko-bot
  0 siblings, 0 replies; 8+ messages in thread
From: sashiko-bot @ 2026-10-30  5:54 UTC (permalink / raw)
  To: Icenowy Zheng; +Cc: devicetree, dri-devel, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] drm/panel: ilitek-ili9881c: bit-shifted registers in mj070bi30ia2_init
--

commit 77fed3fe20435bd131c211abca1d6f6a36c89b5f
Author: Icenowy Zheng <zhengxingda@iscas.ac.cn>

drm/panel: ilitek-ili9881c: add Mingjun MJ070BI30IA2

This patch adds support for the Mingjun MJ070BI30IA2 7" MIPI DSI LCD panel,
including its initialization sequence, display mode timings, and device tree
compatible entry in the Ilitek ILI9881C panel driver.

> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> index c3d5ab67121d9..83148c40e25ca 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> @@ -2198,6 +2198,201 @@ static const struct ili9881c_instr waveshare_7inch_a_init[] = {
>  	ILI9881C_COMMAND_INSTR(0x36, 0x00),
>  };
>  
> +static const struct ili9881c_instr mj070bi30ia2_init[] = {
> +	ILI9881C_SWITCH_PAGE_INSTR(3),
> +	ILI9881C_COMMAND_INSTR(0x01, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x02, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x03, 0x73),
> +	ILI9881C_COMMAND_INSTR(0x04, 0x13),
> +	ILI9881C_COMMAND_INSTR(0x05, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x06, 0x0A),
> +	ILI9881C_COMMAND_INSTR(0x07, 0x05),
> +	ILI9881C_COMMAND_INSTR(0x11, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x09, 0x28),
> +	ILI9881C_COMMAND_INSTR(0x0A, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x0B, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x0C, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x0D, 0x28),
> +	ILI9881C_COMMAND_INSTR(0x0E, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x0F, 0x28),
> +	ILI9881C_COMMAND_INSTR(0x10, 0x28),
> +	ILI9881C_COMMAND_INSTR(0x11, 0x00),

[ ... ]

> +	ILI9881C_COMMAND_INSTR(0x36, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x37, 0x08),
> +	ILI9881C_COMMAND_INSTR(0x70, 0x00),
> +	ILI9881C_COMMAND_INSTR(0x39, 0x00),

[ ... ]

> +	ILI9881C_COMMAND_INSTR(0x43, 0x08),
> +	ILI9881C_COMMAND_INSTR(0x44, 0x00),
> +	ILI9881C_COMMAND_INSTR(0xA0, 0x02),
> +	ILI9881C_COMMAND_INSTR(0x51, 0x23),
> +	ILI9881C_COMMAND_INSTR(0x52, 0x44),
> +	ILI9881C_COMMAND_INSTR(0x53, 0x67),

[ ... ]

> +	ILI9881C_COMMAND_INSTR(0x6E, 0x16),
> +	ILI9881C_COMMAND_INSTR(0x6F, 0x16),
> +	ILI9881C_COMMAND_INSTR(0x70, 0x06),
> +	ILI9881C_COMMAND_INSTR(0x71, 0x06),

[ ... ]

> +	ILI9881C_SWITCH_PAGE_INSTR(1),
> +	ILI9881C_COMMAND_INSTR(0x22, 0x0A),
> +	ILI9881C_COMMAND_INSTR(0x31, 0x00),
> +	ILI9881C_COMMAND_INSTR(0xA6, 0xA6),
> +	ILI9881C_COMMAND_INSTR(0x55, 0x3D),
> +	ILI9881C_COMMAND_INSTR(0x50, 0x9E),
> +	ILI9881C_COMMAND_INSTR(0x51, 0x99),
> +	ILI9881C_COMMAND_INSTR(0x60, 0x06),
> +	ILI9881C_COMMAND_INSTR(0x62, 0x20),
> +	ILI9881C_COMMAND_INSTR(0xA0, 0x00),
> +	ILI9881C_COMMAND_INSTR(0xA1, 0x17),
> +	ILI9881C_COMMAND_INSTR(0xA2, 0x26),
> +	ILI9881C_COMMAND_INSTR(0xA3, 0x13),
> +	ILI9881C_COMMAND_INSTR(0xA4, 0x16),
> +	ILI9881C_COMMAND_INSTR(0xA5, 0x29),
> +	ILI9881C_COMMAND_INSTR(0xA6, 0x1E),

[Severity: High]
Are some of the register addresses and values in mj070bi30ia2_init[] shifted
left by one bit (perhaps from a MIPI DSI bus capture or transcription error)?

When ili9881c_prepare() sends mj070bi30ia2_init[] to the panel controller,
four entries appear to have bit-shifted command addresses that leave their
intended registers unprogrammed while writing to registers that are later
overwritten:

1. In Page 3, between registers 0x07 and 0x09 (where all other ILI9881C
panels program register 0x08), the sequence writes to 0x11 ((0x08 << 1) | 1),
which is already programmed in its normal sequential position after 0x10.

2. In Page 3, between registers 0x37 and 0x39 (where register 0x38 belongs),
the sequence writes (0x70, 0x00) (0x38 << 1 == 0x70). Register 0x70 is later
overwritten in the 0x5F..0x8A GIP output mapping block with (0x70, 0x06),
leaving register 0x38 uninitialized.

3. In Page 3, between registers 0x44 and 0x51, at the start of the standard
0x50..0x5D GIP sequence (0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, ...), the table
has (0xA0, 0x02) instead of (0x50, 0x01) (0x50 << 1 == 0xA0, 0x01 << 1 ==
0x02), and register 0x52 is set to 0x44 instead of 0x45.

4. In Page 1, between register 0x31 and VCOM2 register 0x55 (where other
ILI9881C panels program VCOM1 register 0x53), the sequence writes
(0xA6, 0xA6) (0x53 << 1 == 0xA6). In Page 1, 0xA6 is a positive gamma
register that is unconditionally overwritten a few lines later by
(0xA6, 0x1E), leaving VCOM1 register 0x53 uninitialized.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261030-mj070bi30ia2-v1-0-a0f65b65c290@iscas.ac.cn?part=3

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2
  2026-10-30  5:44 ` [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2 Icenowy Zheng
@ 2026-10-30 12:09   ` Krzysztof Kozlowski
  2026-10-30 12:09   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-30 12:09 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, devicetree,
	linux-kernel, dri-devel, Icenowy Zheng, Han Gao

On Fri, Oct 30, 2026 at 01:44:13PM +0800, Icenowy Zheng wrote:
> Mingjun MJ070BI30IA2 is the LCD panel used by Sipeed Lichee Console 4A,
> and its initialization sequence seems to match ILI9881C controller.
> 
> Add its compatible string to the ILI9881C binding.
> 
> Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
> ---
>  Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml | 1 +
>  1 file changed, 1 insertion(+)

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2
  2026-10-30  5:44 ` [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2 Icenowy Zheng
  2026-10-30 12:09   ` Krzysztof Kozlowski
@ 2026-10-30 12:09   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-30 12:09 UTC (permalink / raw)
  To: Icenowy Zheng
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, devicetree,
	linux-kernel, dri-devel, Icenowy Zheng, Han Gao

On Fri, Oct 30, 2026 at 01:44:13PM +0800, Icenowy Zheng wrote:
> Mingjun MJ070BI30IA2 is the LCD panel used by Sipeed Lichee Console 4A,
> and its initialization sequence seems to match ILI9881C controller.
> 
> Add its compatible string to the ILI9881C binding.
> 
> Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
> ---
>  Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml | 1 +
>  1 file changed, 1 insertion(+)

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-10-30 12:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-30  5:44 [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Icenowy Zheng
2026-10-30  5:44 ` [PATCH 1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics Icenowy Zheng
2026-10-30  5:44 ` [PATCH 2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2 Icenowy Zheng
2026-10-30 12:09   ` Krzysztof Kozlowski
2026-10-30 12:09   ` Krzysztof Kozlowski
2026-10-30  5:44 ` [PATCH 3/4] drm/panel: ilitek-ili9881c: add " Icenowy Zheng
2026-10-30  5:54   ` sashiko-bot
2026-10-30  5:44 ` [PATCH 4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback Icenowy Zheng

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.