mirror of https://lore.kernel.org/lkml/
 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
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ 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] 12+ 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
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ 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	[flat|nested] 12+ 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
                   ` (3 subsequent siblings)
  5 siblings, 2 replies; 12+ 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	[flat|nested] 12+ 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-11-02 13:06   ` Neil Armstrong
  2026-10-30  5:44 ` [PATCH 4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback Icenowy Zheng
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 12+ 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	[flat|nested] 12+ 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
  2026-11-02 13:06   ` Neil Armstrong
  2026-11-02 13:40 ` [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Neil Armstrong
  2026-11-02 13:50 ` Neil Armstrong
  5 siblings, 1 reply; 12+ 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	[flat|nested] 12+ 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; 12+ 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] 12+ 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; 12+ 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] 12+ 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-11-02 13:06   ` Neil Armstrong
  0 siblings, 0 replies; 12+ messages in thread
From: Neil Armstrong @ 2026-11-02 13:06 UTC (permalink / raw)
  To: Icenowy Zheng, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao

On 10/30/26 06:44, Icenowy Zheng wrote:
> 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 },
>   	{ }
> 

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Thanks,
Neil

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

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

On 10/30/26 06:44, Icenowy Zheng wrote:
> 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);
> 

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Thanks,
Neil

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

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

Hi,

On Fri, 30 Oct 2026 13:44:11 +0800, Icenowy Zheng wrote:
> 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).
> 
> [...]

Thanks, Applied to https://gitlab.freedesktop.org/drm/misc/kernel.git (drm-misc-next)

[1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun Optoelectronics
      https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/f423a211f99ca820c2c99a84a3418aa505d6dd02
[2/4] dt-bindings: ili9881c: add compatible string for Mingjun MJ070BI30IA2
      https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/ea74b623855291e60835c0f7fa7a29673332ad41
[3/4] drm/panel: ilitek-ili9881c: add Mingjun MJ070BI30IA2
      (no commit info)
[4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback
      (no commit info)

-- 
Neil


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

* Re: [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2
  2026-11-02 13:40 ` [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Neil Armstrong
@ 2026-11-02 13:47   ` Icenowy Zheng
  0 siblings, 0 replies; 12+ messages in thread
From: Icenowy Zheng @ 2026-11-02 13:47 UTC (permalink / raw)
  To: Neil Armstrong, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Han Gao

在 2026-11-02一的 14:40 +0100,Neil Armstrong写道:
> Hi,
> 
> On Fri, 30 Oct 2026 13:44:11 +0800, Icenowy Zheng wrote:
> > 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).
> > 
> > [...]
> 
> Thanks, Applied to
> https://gitlab.freedesktop.org/drm/misc/kernel.git (drm-misc-next)
> 
> [1/4] dt-bindings: vendor-prefixes: add Shenzhen Mingjun
> Optoelectronics
>      
> https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/f423a211f99ca820c2c99a84a3418aa505d6dd02
> [2/4] dt-bindings: ili9881c: add compatible string for Mingjun
> MJ070BI30IA2
>      
> https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/ea74b623855291e60835c0f7fa7a29673332ad41
> [3/4] drm/panel: ilitek-ili9881c: add Mingjun MJ070BI30IA2
>       (no commit info)
> [4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare

Ah, the 4th patch is now found to be only needed because of the
initialization sequence error found by Sashiko in the 3rd one.

With the initialization sequence fixed by comparing to other panels,
this patch would be unnecessary and panel sleep mode is now safe w/o
software reset.

Should I send a revert when sending the sequence fix?

Thanks,
Icenowy

> callback
>       (no commit info)


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

* Re: [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2
  2026-10-30  5:44 [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Icenowy Zheng
                   ` (4 preceding siblings ...)
  2026-11-02 13:40 ` [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Neil Armstrong
@ 2026-11-02 13:50 ` Neil Armstrong
  5 siblings, 0 replies; 12+ messages in thread
From: Neil Armstrong @ 2026-11-02 13:50 UTC (permalink / raw)
  To: Icenowy Zheng, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Jessica Zhang, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter
  Cc: devicetree, linux-kernel, dri-devel, Icenowy Zheng, Han Gao

Hi,

On 10/30/26 06:44, Icenowy Zheng wrote:
> 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>

Could you rebase on the lastest drm-misc-next ?

Thanks,
Neil

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

end of thread, other threads:[~2026-11-02 13:50 UTC | newest]

Thread overview: 12+ 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-11-02 13:06   ` Neil Armstrong
2026-10-30  5:44 ` [PATCH 4/4] drm/panel: ilitek-ili9881c: do a soft reset in unprepare callback Icenowy Zheng
2026-11-02 13:06   ` Neil Armstrong
2026-11-02 13:40 ` [PATCH 0/4] drm/panel: ili9881c: add support for Mingjun MJ070BI30IA2 Neil Armstrong
2026-11-02 13:47   ` Icenowy Zheng
2026-11-02 13:50 ` Neil Armstrong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®