* [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board
@ 2025-07-07 16:48 Heiko Stuebner
2025-07-07 16:48 ` [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails Heiko Stuebner
` (16 more replies)
0 siblings, 17 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
This enables all the necesary bits and bindings to get display output
on the dm-m10r800-v3s addon module for the Firefly roc-rk3576-pc board.
A bit of cleanup of the ili9881c, because the driver was still trying
to send dcs commands when the underlying DSI driver might have already
switched to video-mode, which caused me quite a bit of headache until
I realized this being the culprit for my garbled display output :-) .
Only the last patch has a dependency on Nicolas' pwm series [0]
everything else, is directly usable.
[0] https://lore.kernel.org/lkml/20250602-rk3576-pwm-v2-0-a6434b0ce60c@collabora.com/
Guochun Huang (1):
drm/rockchip: dsi2: add support rk3576
Heiko Stuebner (12):
drm/panel: ilitek-ili9881c: turn off power-supply when init fails
drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to
(un-)prepare
drm/panel: ilitek-ili9881c: convert (un-)prepare to
mipi_dsi_multi_context
dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar
Electronic
dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel
drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support
dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon
dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2
controller schema
arm64: dts: rockchip: add mipi-dcphy to rk3576
arm64: dts: rockchip: add the dsi controller to rk3576
arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc
arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc
.../display/panel/ilitek,ili9881c.yaml | 1 +
.../rockchip/rockchip,rk3588-mipi-dsi2.yaml | 1 +
.../devicetree/bindings/soc/rockchip/grf.yaml | 1 +
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
arch/arm64/boot/dts/rockchip/Makefile | 5 +
.../rk3576-roc-pc-dm-m10r800-v3s.dtso | 134 ++++++++
.../arm64/boot/dts/rockchip/rk3576-roc-pc.dts | 16 +
arch/arm64/boot/dts/rockchip/rk3576.dtsi | 50 +++
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 301 ++++++++++++++----
.../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 21 ++
10 files changed, 475 insertions(+), 57 deletions(-)
create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso
--
2.47.2
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
@ 2025-07-07 16:48 ` Heiko Stuebner
2025-08-04 15:15 ` neil.armstrong
2025-07-07 16:48 ` [PATCH 02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare Heiko Stuebner
` (15 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
The prepare function turns on the power-supply regulator first, when
preparing the display. But in an error case, just returns the error
code, but does not power off the regulator again, fix that.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index 28cd7560e5db..d7a17dca2a9c 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -1292,7 +1292,7 @@ static int ili9881c_prepare(struct drm_panel *panel)
instr->arg.cmd.data);
if (ret)
- return ret;
+ goto disable_power;
}
ret = ili9881c_switch_page(ctx, 0);
@@ -1304,18 +1304,22 @@ static int ili9881c_prepare(struct drm_panel *panel)
&ctx->address_mode,
sizeof(ctx->address_mode));
if (ret < 0)
- return ret;
+ goto disable_power;
}
ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
if (ret)
- return ret;
+ goto disable_power;
ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
if (ret)
- return ret;
+ goto disable_power;
return 0;
+
+disable_power:
+ regulator_disable(ctx->power);
+ return ret;
}
static int ili9881c_enable(struct drm_panel *panel)
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
2025-07-07 16:48 ` [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails Heiko Stuebner
@ 2025-07-07 16:48 ` Heiko Stuebner
2025-08-04 15:15 ` neil.armstrong
2025-07-07 16:48 ` [PATCH 03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context Heiko Stuebner
` (14 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
At least for panel-bridges, the atomic_enable call is defined as being
called right after the preceding element in the display pipe is enabled.
It is also stated that "The bridge can assume that the display pipe (i.e.
clocks and timing signals) feeding it is running when this callback is
called"
This means the DSI controller driving this display would have already
switched over to video-mode from command mode and thus dcs functions
should not be called anymore at this point.
This caused a non-working display for me, when trying to enable
the rk3576 dsi controller using a display using this controller.
Therefore move the display_on/off calls the more appropriate
prepare/unprepare callbacks.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 27 +++++--------------
1 file changed, 7 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index d7a17dca2a9c..a20b52181ea0 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -1315,35 +1315,24 @@ static int ili9881c_prepare(struct drm_panel *panel)
if (ret)
goto disable_power;
- return 0;
-
-disable_power:
- regulator_disable(ctx->power);
- return ret;
-}
-
-static int ili9881c_enable(struct drm_panel *panel)
-{
- struct ili9881c *ctx = panel_to_ili9881c(panel);
-
msleep(120);
- mipi_dsi_dcs_set_display_on(ctx->dsi);
+ ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
+ if (ret)
+ goto disable_power;
return 0;
-}
-static int ili9881c_disable(struct drm_panel *panel)
-{
- struct ili9881c *ctx = panel_to_ili9881c(panel);
-
- return mipi_dsi_dcs_set_display_off(ctx->dsi);
+disable_power:
+ regulator_disable(ctx->power);
+ return ret;
}
static int ili9881c_unprepare(struct drm_panel *panel)
{
struct ili9881c *ctx = panel_to_ili9881c(panel);
+ mipi_dsi_dcs_set_display_off(ctx->dsi);
mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
regulator_disable(ctx->power);
gpiod_set_value_cansleep(ctx->reset, 1);
@@ -1499,8 +1488,6 @@ static enum drm_panel_orientation ili9881c_get_orientation(struct drm_panel *pan
static const struct drm_panel_funcs ili9881c_funcs = {
.prepare = ili9881c_prepare,
.unprepare = ili9881c_unprepare,
- .enable = ili9881c_enable,
- .disable = ili9881c_disable,
.get_modes = ili9881c_get_modes,
.get_orientation = ili9881c_get_orientation,
};
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
2025-07-07 16:48 ` [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails Heiko Stuebner
2025-07-07 16:48 ` [PATCH 02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare Heiko Stuebner
@ 2025-07-07 16:48 ` Heiko Stuebner
2025-08-04 15:16 ` neil.armstrong
2025-07-07 16:48 ` [PATCH 04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic Heiko Stuebner
` (13 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
This saves some lines for error handling.
For the address mode change, that value is always an u8, so switching
to dcs_write_buffer function should be appropriate.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 66 ++++++-------------
1 file changed, 21 insertions(+), 45 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index a20b52181ea0..154eea5f4d77 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -1239,33 +1239,24 @@ static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
* So before any attempt at sending a command or data, we have to be
* sure if we're in the right page or not.
*/
-static int ili9881c_switch_page(struct ili9881c *ctx, u8 page)
+static void ili9881c_switch_page(struct mipi_dsi_multi_context *mctx, u8 page)
{
u8 buf[4] = { 0xff, 0x98, 0x81, page };
- int ret;
-
- ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));
- if (ret < 0)
- return ret;
- return 0;
+ mipi_dsi_dcs_write_buffer_multi(mctx, buf, sizeof(buf));
}
-static int ili9881c_send_cmd_data(struct ili9881c *ctx, u8 cmd, u8 data)
+static void ili9881c_send_cmd_data(struct mipi_dsi_multi_context *mctx, u8 cmd, u8 data)
{
u8 buf[2] = { cmd, data };
- int ret;
- ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));
- if (ret < 0)
- return ret;
-
- return 0;
+ mipi_dsi_dcs_write_buffer_multi(mctx, buf, sizeof(buf));
}
static int ili9881c_prepare(struct drm_panel *panel)
{
struct ili9881c *ctx = panel_to_ili9881c(panel);
+ struct mipi_dsi_multi_context mctx = { .dsi = ctx->dsi };
unsigned int i;
int ret;
@@ -1286,54 +1277,39 @@ static int ili9881c_prepare(struct drm_panel *panel)
const struct ili9881c_instr *instr = &ctx->desc->init[i];
if (instr->op == ILI9881C_SWITCH_PAGE)
- ret = ili9881c_switch_page(ctx, instr->arg.page);
+ ili9881c_switch_page(&mctx, instr->arg.page);
else if (instr->op == ILI9881C_COMMAND)
- ret = ili9881c_send_cmd_data(ctx, instr->arg.cmd.cmd,
- instr->arg.cmd.data);
-
- if (ret)
- goto disable_power;
- }
-
- ret = ili9881c_switch_page(ctx, 0);
- if (ret)
- return ret;
-
- if (ctx->address_mode) {
- ret = mipi_dsi_dcs_write(ctx->dsi, MIPI_DCS_SET_ADDRESS_MODE,
- &ctx->address_mode,
- sizeof(ctx->address_mode));
- if (ret < 0)
- goto disable_power;
+ ili9881c_send_cmd_data(&mctx, instr->arg.cmd.cmd,
+ instr->arg.cmd.data);
}
- ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
- if (ret)
- goto disable_power;
-
- ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
- if (ret)
- goto disable_power;
+ ili9881c_switch_page(&mctx, 0);
- msleep(120);
+ if (ctx->address_mode)
+ ili9881c_send_cmd_data(&mctx, MIPI_DCS_SET_ADDRESS_MODE,
+ ctx->address_mode);
- ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
- if (ret)
+ mipi_dsi_dcs_set_tear_on_multi(&mctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
+ mipi_dsi_dcs_exit_sleep_mode_multi(&mctx);
+ mipi_dsi_msleep(&mctx, 120);
+ mipi_dsi_dcs_set_display_on_multi(&mctx);
+ if (mctx.accum_err)
goto disable_power;
return 0;
disable_power:
regulator_disable(ctx->power);
- return ret;
+ return mctx.accum_err;
}
static int ili9881c_unprepare(struct drm_panel *panel)
{
struct ili9881c *ctx = panel_to_ili9881c(panel);
+ struct mipi_dsi_multi_context mctx = { .dsi = ctx->dsi };
- mipi_dsi_dcs_set_display_off(ctx->dsi);
- mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
+ mipi_dsi_dcs_set_display_off_multi(&mctx);
+ mipi_dsi_dcs_enter_sleep_mode_multi(&mctx);
regulator_disable(ctx->power);
gpiod_set_value_cansleep(ctx->reset, 1);
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (2 preceding siblings ...)
2025-07-07 16:48 ` [PATCH 03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context Heiko Stuebner
@ 2025-07-07 16:48 ` Heiko Stuebner
2025-07-08 20:04 ` Rob Herring (Arm)
2025-07-07 16:48 ` [PATCH 05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel Heiko Stuebner
` (12 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
Add the prefix for Bestar, named in full both on Panelook.com and their
display datasheets as
Shenzhen Bestar Electronic Technology Co., Ltd.
which produces at least DSI displays and maybe more.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
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 5d2a7a8d3ac6..5e066c07c188 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -216,6 +216,8 @@ patternProperties:
description: BeagleBoard.org Foundation
"^belling,.*":
description: Shanghai Belling Co., Ltd.
+ "^bestar,.*":
+ description: Shenzhen Bestar Electronic Technology Co., Ltd.
"^bhf,.*":
description: Beckhoff Automation GmbH & Co. KG
"^bigtreetech,.*":
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (3 preceding siblings ...)
2025-07-07 16:48 ` [PATCH 04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic Heiko Stuebner
@ 2025-07-07 16:48 ` Heiko Stuebner
2025-07-08 20:04 ` Rob Herring (Arm)
2025-07-07 16:48 ` [PATCH 06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support Heiko Stuebner
` (11 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
Document the compatible value for Bestar BSD1218-A101KL68 LCD panels
that are based around the ili9881c controller.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
.../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 baf5dfe5f5eb..79064f9dde23 100644
--- a/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
+++ b/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
@@ -18,6 +18,7 @@ properties:
- enum:
- ampire,am8001280g
- bananapi,lhr050h41
+ - bestar,bsd1218-a101kl68
- feixin,k101-im2byl02
- startek,kd050hdfia020
- tdo,tl050hdv35
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (4 preceding siblings ...)
2025-07-07 16:48 ` [PATCH 05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel Heiko Stuebner
@ 2025-07-07 16:48 ` Heiko Stuebner
2025-08-04 15:16 ` neil.armstrong
2025-07-07 16:49 ` [PATCH 07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon Heiko Stuebner
` (10 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:48 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
Add support for the Bestar BSD1218-A101KL68 panel.
The init table comes from the Firefly BSP ([1]).
[1] https://gitlab.com/firefly-linux/kernel/-/blob/rk3588/firefly/arch/arm64/boot/dts/rockchip/aio-3588l-mipi101-BSD1218-A101KL68.dtsi
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 220 ++++++++++++++++++
1 file changed, 220 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index 154eea5f4d77..3095a8bd1ebf 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -1223,6 +1223,200 @@ static const struct ili9881c_instr am8001280g_init[] = {
ILI9881C_COMMAND_INSTR(MIPI_DCS_WRITE_POWER_SAVE, 0x00),
};
+static const struct ili9881c_instr bsd1218_a101kl68_init[] = {
+ ILI9881C_SWITCH_PAGE_INSTR(3),
+ ILI9881C_COMMAND_INSTR(0x01, 0x00),
+ ILI9881C_COMMAND_INSTR(0x02, 0x00),
+ ILI9881C_COMMAND_INSTR(0x03, 0x55),
+ ILI9881C_COMMAND_INSTR(0x04, 0x55),
+ ILI9881C_COMMAND_INSTR(0x05, 0x03),
+ ILI9881C_COMMAND_INSTR(0x06, 0x06),
+ ILI9881C_COMMAND_INSTR(0x07, 0x00),
+ ILI9881C_COMMAND_INSTR(0x08, 0x07),
+ ILI9881C_COMMAND_INSTR(0x09, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0a, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0b, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0c, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0d, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0e, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0f, 0x00),
+ ILI9881C_COMMAND_INSTR(0x10, 0x00),
+ 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, 0xc0),
+ ILI9881C_COMMAND_INSTR(0x1f, 0x80),
+ ILI9881C_COMMAND_INSTR(0x20, 0x04),
+ ILI9881C_COMMAND_INSTR(0x21, 0x03),
+ 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, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2d, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2e, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2f, 0x00),
+ ILI9881C_COMMAND_INSTR(0x30, 0x00),
+ ILI9881C_COMMAND_INSTR(0x31, 0x00),
+ ILI9881C_COMMAND_INSTR(0x32, 0x00),
+ ILI9881C_COMMAND_INSTR(0x33, 0x00),
+ ILI9881C_COMMAND_INSTR(0x34, 0x04),
+ ILI9881C_COMMAND_INSTR(0x35, 0x00),
+ ILI9881C_COMMAND_INSTR(0x36, 0x00),
+ ILI9881C_COMMAND_INSTR(0x37, 0x00),
+ ILI9881C_COMMAND_INSTR(0x38, 0x3c),
+ 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, 0x00),
+ ILI9881C_COMMAND_INSTR(0x44, 0x00),
+ ILI9881C_COMMAND_INSTR(0x50, 0x00),
+ ILI9881C_COMMAND_INSTR(0x51, 0x11),
+ ILI9881C_COMMAND_INSTR(0x52, 0x44),
+ ILI9881C_COMMAND_INSTR(0x53, 0x55),
+ ILI9881C_COMMAND_INSTR(0x54, 0x88),
+ ILI9881C_COMMAND_INSTR(0x55, 0xab),
+ ILI9881C_COMMAND_INSTR(0x56, 0x00),
+ ILI9881C_COMMAND_INSTR(0x57, 0x11),
+ ILI9881C_COMMAND_INSTR(0x58, 0x22),
+ ILI9881C_COMMAND_INSTR(0x59, 0x33),
+ ILI9881C_COMMAND_INSTR(0x5a, 0x44),
+ ILI9881C_COMMAND_INSTR(0x5b, 0x55),
+ ILI9881C_COMMAND_INSTR(0x5c, 0x66),
+ ILI9881C_COMMAND_INSTR(0x5d, 0x77),
+ ILI9881C_COMMAND_INSTR(0x5e, 0x00),
+ ILI9881C_COMMAND_INSTR(0x5f, 0x02),
+ ILI9881C_COMMAND_INSTR(0x60, 0x02),
+ ILI9881C_COMMAND_INSTR(0x61, 0x0a),
+ ILI9881C_COMMAND_INSTR(0x62, 0x09),
+ ILI9881C_COMMAND_INSTR(0x63, 0x08),
+ ILI9881C_COMMAND_INSTR(0x64, 0x13),
+ ILI9881C_COMMAND_INSTR(0x65, 0x12),
+ ILI9881C_COMMAND_INSTR(0x66, 0x11),
+ ILI9881C_COMMAND_INSTR(0x67, 0x10),
+ ILI9881C_COMMAND_INSTR(0x68, 0x0f),
+ ILI9881C_COMMAND_INSTR(0x69, 0x0e),
+ ILI9881C_COMMAND_INSTR(0x6a, 0x0d),
+ ILI9881C_COMMAND_INSTR(0x6b, 0x0c),
+ ILI9881C_COMMAND_INSTR(0x6c, 0x06),
+ ILI9881C_COMMAND_INSTR(0x6d, 0x07),
+ ILI9881C_COMMAND_INSTR(0x6e, 0x02),
+ ILI9881C_COMMAND_INSTR(0x6f, 0x02),
+ ILI9881C_COMMAND_INSTR(0x70, 0x02),
+ ILI9881C_COMMAND_INSTR(0x71, 0x02),
+ ILI9881C_COMMAND_INSTR(0x72, 0x02),
+ ILI9881C_COMMAND_INSTR(0x73, 0x02),
+ ILI9881C_COMMAND_INSTR(0x74, 0x02),
+ ILI9881C_COMMAND_INSTR(0x75, 0x02),
+ ILI9881C_COMMAND_INSTR(0x76, 0x02),
+ ILI9881C_COMMAND_INSTR(0x77, 0x0a),
+ ILI9881C_COMMAND_INSTR(0x78, 0x06),
+ ILI9881C_COMMAND_INSTR(0x79, 0x07),
+ ILI9881C_COMMAND_INSTR(0x7a, 0x10),
+ ILI9881C_COMMAND_INSTR(0x7b, 0x11),
+ ILI9881C_COMMAND_INSTR(0x7c, 0x12),
+ ILI9881C_COMMAND_INSTR(0x7d, 0x13),
+ ILI9881C_COMMAND_INSTR(0x7e, 0x0c),
+ ILI9881C_COMMAND_INSTR(0x7f, 0x0d),
+ ILI9881C_COMMAND_INSTR(0x80, 0x0e),
+ ILI9881C_COMMAND_INSTR(0x81, 0x0f),
+ ILI9881C_COMMAND_INSTR(0x82, 0x09),
+ ILI9881C_COMMAND_INSTR(0x83, 0x08),
+ ILI9881C_COMMAND_INSTR(0x84, 0x02),
+ ILI9881C_COMMAND_INSTR(0x85, 0x02),
+ ILI9881C_COMMAND_INSTR(0x86, 0x02),
+ ILI9881C_COMMAND_INSTR(0x87, 0x02),
+ ILI9881C_COMMAND_INSTR(0x88, 0x02),
+ ILI9881C_COMMAND_INSTR(0x89, 0x02),
+ ILI9881C_COMMAND_INSTR(0x8a, 0x02),
+
+ ILI9881C_SWITCH_PAGE_INSTR(4),
+ ILI9881C_COMMAND_INSTR(0x6e, 0x2a),
+ ILI9881C_COMMAND_INSTR(0x6f, 0x37),
+ ILI9881C_COMMAND_INSTR(0x3a, 0x24),
+ ILI9881C_COMMAND_INSTR(0x8d, 0x19),
+ 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, 0x0c),
+ ILI9881C_COMMAND_INSTR(0x53, 0x40),
+ ILI9881C_COMMAND_INSTR(0x55, 0x45),
+ ILI9881C_COMMAND_INSTR(0x50, 0xb7),
+ ILI9881C_COMMAND_INSTR(0x51, 0xb2),
+ ILI9881C_COMMAND_INSTR(0x60, 0x07),
+ ILI9881C_COMMAND_INSTR(0xa0, 0x22),
+ ILI9881C_COMMAND_INSTR(0xa1, 0x3f),
+ ILI9881C_COMMAND_INSTR(0xa2, 0x4e),
+ ILI9881C_COMMAND_INSTR(0xa3, 0x17),
+ ILI9881C_COMMAND_INSTR(0xa4, 0x1a),
+ ILI9881C_COMMAND_INSTR(0xa5, 0x2d),
+ ILI9881C_COMMAND_INSTR(0xa6, 0x21),
+ ILI9881C_COMMAND_INSTR(0xa7, 0x22),
+ ILI9881C_COMMAND_INSTR(0xa8, 0xc4),
+ ILI9881C_COMMAND_INSTR(0xa9, 0x1b),
+ ILI9881C_COMMAND_INSTR(0xaa, 0x25),
+ ILI9881C_COMMAND_INSTR(0xab, 0xa7),
+ ILI9881C_COMMAND_INSTR(0xac, 0x1a),
+ ILI9881C_COMMAND_INSTR(0xad, 0x19),
+ ILI9881C_COMMAND_INSTR(0xae, 0x4b),
+ ILI9881C_COMMAND_INSTR(0xaf, 0x1f),
+ ILI9881C_COMMAND_INSTR(0xb0, 0x2a),
+ ILI9881C_COMMAND_INSTR(0xb1, 0x59),
+ ILI9881C_COMMAND_INSTR(0xb2, 0x64),
+ ILI9881C_COMMAND_INSTR(0xb3, 0x3f),
+ ILI9881C_COMMAND_INSTR(0xc0, 0x22),
+ ILI9881C_COMMAND_INSTR(0xc1, 0x48),
+ ILI9881C_COMMAND_INSTR(0xc2, 0x59),
+ ILI9881C_COMMAND_INSTR(0xc3, 0x15),
+ ILI9881C_COMMAND_INSTR(0xc4, 0x15),
+ ILI9881C_COMMAND_INSTR(0xc5, 0x28),
+ ILI9881C_COMMAND_INSTR(0xc6, 0x1c),
+ ILI9881C_COMMAND_INSTR(0xc7, 0x1e),
+ ILI9881C_COMMAND_INSTR(0xc8, 0xc4),
+ ILI9881C_COMMAND_INSTR(0xc9, 0x1c),
+ ILI9881C_COMMAND_INSTR(0xca, 0x2b),
+ ILI9881C_COMMAND_INSTR(0xcb, 0xa3),
+ ILI9881C_COMMAND_INSTR(0xcc, 0x1f),
+ ILI9881C_COMMAND_INSTR(0xcd, 0x1e),
+ ILI9881C_COMMAND_INSTR(0xce, 0x52),
+ ILI9881C_COMMAND_INSTR(0xcf, 0x24),
+ ILI9881C_COMMAND_INSTR(0xd0, 0x2a),
+ ILI9881C_COMMAND_INSTR(0xd1, 0x58),
+ ILI9881C_COMMAND_INSTR(0xd2, 0x68),
+ ILI9881C_COMMAND_INSTR(0xd3, 0x3f),
+};
+
static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
{
return container_of(panel, struct ili9881c, panel);
@@ -1418,6 +1612,23 @@ static const struct drm_display_mode am8001280g_default_mode = {
.height_mm = 151,
};
+static const struct drm_display_mode bsd1218_a101kl68_default_mode = {
+ .clock = 70000,
+
+ .hdisplay = 800,
+ .hsync_start = 800 + 40,
+ .hsync_end = 800 + 40 + 20,
+ .htotal = 800 + 40 + 20 + 20,
+
+ .vdisplay = 1280,
+ .vsync_start = 1280 + 20,
+ .vsync_end = 1280 + 20 + 4,
+ .vtotal = 1280 + 20 + 4 + 20,
+
+ .width_mm = 120,
+ .height_mm = 170,
+};
+
static int ili9881c_get_modes(struct drm_panel *panel,
struct drm_connector *connector)
{
@@ -1576,8 +1787,17 @@ static const struct ili9881c_desc am8001280g_desc = {
MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM,
};
+static const struct ili9881c_desc bsd1218_a101kl68_desc = {
+ .init = bsd1218_a101kl68_init,
+ .init_length = ARRAY_SIZE(bsd1218_a101kl68_init),
+ .mode = &bsd1218_a101kl68_default_mode,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+ MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,
+};
+
static const struct of_device_id ili9881c_of_match[] = {
{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
+ { .compatible = "bestar,bsd1218-a101kl68", .data = &bsd1218_a101kl68_desc },
{ .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },
{ .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc },
{ .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (5 preceding siblings ...)
2025-07-07 16:48 ` [PATCH 06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-07-08 20:06 ` Rob Herring (Arm)
2025-07-07 16:49 ` [PATCH 08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema Heiko Stuebner
` (9 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
RK3576 CSI and DSI support requires the GRF for its DC-PHY.
The "general register files" provide additional setting-bits
outside the regular ip-block reg-space.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
Documentation/devicetree/bindings/soc/rockchip/grf.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/soc/rockchip/grf.yaml b/Documentation/devicetree/bindings/soc/rockchip/grf.yaml
index ccdcc889ba8e..d4fda4ee33e4 100644
--- a/Documentation/devicetree/bindings/soc/rockchip/grf.yaml
+++ b/Documentation/devicetree/bindings/soc/rockchip/grf.yaml
@@ -31,6 +31,7 @@ properties:
- rockchip,rk3568-usb2phy-grf
- rockchip,rk3576-bigcore-grf
- rockchip,rk3576-cci-grf
+ - rockchip,rk3576-dcphy-grf
- rockchip,rk3576-gpu-grf
- rockchip,rk3576-hdptxphy-grf
- rockchip,rk3576-litcore-grf
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (6 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-07-08 20:10 ` Rob Herring (Arm)
2025-07-07 16:49 ` [PATCH 09/13] drm/rockchip: dsi2: add support rk3576 Heiko Stuebner
` (8 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
The rk3576 controller is based on the same newer Synopsis IP as the one
found in the rk3588.
Its external setting bits in the GRF are different though, so it needs
its own distinct compatible.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
.../bindings/display/rockchip/rockchip,rk3588-mipi-dsi2.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/display/rockchip/rockchip,rk3588-mipi-dsi2.yaml b/Documentation/devicetree/bindings/display/rockchip/rockchip,rk3588-mipi-dsi2.yaml
index 53384e47b507..75cd1c13fa52 100644
--- a/Documentation/devicetree/bindings/display/rockchip/rockchip,rk3588-mipi-dsi2.yaml
+++ b/Documentation/devicetree/bindings/display/rockchip/rockchip,rk3588-mipi-dsi2.yaml
@@ -12,6 +12,7 @@ maintainers:
properties:
compatible:
enum:
+ - rockchip,rk3576-mipi-dsi2
- rockchip,rk3588-mipi-dsi2
reg:
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 09/13] drm/rockchip: dsi2: add support rk3576
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (7 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-08-13 7:56 ` Andy Yan
2025-07-07 16:49 ` [PATCH 10/13] arm64: dts: rockchip: add mipi-dcphy to rk3576 Heiko Stuebner
` (7 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip, Guochun Huang
From: Guochun Huang <hero.huang@rock-chips.com>
Add the necessary specific bits to support the rk3576-variant of the
DW-DSI2 controller.
Signed-off-by: Guochun Huang <hero.huang@rock-chips.com>
[adapted from the vendor-kernel for mainline]
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
.../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
index cdd490778756..0aea764e29b2 100644
--- a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
@@ -437,6 +437,15 @@ static void dw_mipi_dsi2_rockchip_remove(struct platform_device *pdev)
dw_mipi_dsi2_remove(dsi2->dmd);
}
+static const struct dsigrf_reg rk3576_dsi_grf_reg_fields[MAX_FIELDS] = {
+ [TXREQCLKHS_EN] = { 0x0028, 1, 1 },
+ [GATING_EN] = { 0x0028, 0, 0 },
+ [IPI_SHUTDN] = { 0x0028, 3, 3 },
+ [IPI_COLORM] = { 0x0028, 2, 2 },
+ [IPI_COLOR_DEPTH] = { 0x0028, 8, 11 },
+ [IPI_FORMAT] = { 0x0028, 4, 7 },
+};
+
static const struct dsigrf_reg rk3588_dsi0_grf_reg_fields[MAX_FIELDS] = {
[TXREQCLKHS_EN] = { 0x0000, 11, 11 },
[GATING_EN] = { 0x0000, 10, 10 },
@@ -455,6 +464,15 @@ static const struct dsigrf_reg rk3588_dsi1_grf_reg_fields[MAX_FIELDS] = {
[IPI_FORMAT] = { 0x0004, 0, 3 },
};
+static const struct rockchip_dw_dsi2_chip_data rk3576_chip_data[] = {
+ {
+ .reg = 0x27d80000,
+ .grf_regs = rk3576_dsi_grf_reg_fields,
+ .max_bit_rate_per_lane = 2500000ULL,
+ },
+ { /* sentinel */ }
+};
+
static const struct rockchip_dw_dsi2_chip_data rk3588_chip_data[] = {
{
.reg = 0xfde20000,
@@ -470,6 +488,9 @@ static const struct rockchip_dw_dsi2_chip_data rk3588_chip_data[] = {
static const struct of_device_id dw_mipi_dsi2_rockchip_dt_ids[] = {
{
+ .compatible = "rockchip,rk3576-mipi-dsi2",
+ .data = &rk3576_chip_data,
+ }, {
.compatible = "rockchip,rk3588-mipi-dsi2",
.data = &rk3588_chip_data,
},
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 10/13] arm64: dts: rockchip: add mipi-dcphy to rk3576
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (8 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 09/13] drm/rockchip: dsi2: add support rk3576 Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-07-07 16:49 ` [PATCH 11/13] arm64: dts: rockchip: add the dsi controller " Heiko Stuebner
` (6 subsequent siblings)
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
Add the MIPI-DC-phy node to the RK3576, that will be used by the one
DSI2 controller and hopefully in some future also for camera input.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
arch/arm64/boot/dts/rockchip/rk3576.dtsi | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
index 8b2161b83059..87d518422a60 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
@@ -822,6 +822,12 @@ hdptxphy_grf: syscon@26032000 {
reg = <0x0 0x26032000 0x0 0x100>;
};
+ mipidcphy_grf: syscon@26034000 {
+ compatible = "rockchip,rk3576-dcphy-grf", "syscon";
+ reg = <0x0 0x26034000 0x0 0x2000>;
+ clocks = <&cru PCLK_PMUPHY_ROOT>;
+ };
+
vo1_grf: syscon@26036000 {
compatible = "rockchip,rk3576-vo1-grf", "syscon";
reg = <0x0 0x26036000 0x0 0x100>;
@@ -2538,6 +2544,22 @@ uart11: serial@2afd0000 {
status = "disabled";
};
+ mipidcphy: phy@2b020000 {
+ compatible = "rockchip,rk3576-mipi-dcphy";
+ reg = <0x0 0x2b020000 0x0 0x10000>;
+ clocks = <&cru PCLK_MIPI_DCPHY>,
+ <&cru CLK_PHY_REF_SRC>;
+ clock-names = "pclk", "ref";
+ resets = <&cru SRST_M_MIPI_DCPHY>,
+ <&cru SRST_P_MIPI_DCPHY>,
+ <&cru SRST_P_DCPHY_GRF>,
+ <&cru SRST_S_MIPI_DCPHY>;
+ reset-names = "m_phy", "apb", "grf", "s_phy";
+ rockchip,grf = <&mipidcphy_grf>;
+ #phy-cells = <1>;
+ status = "disabled";
+ };
+
combphy0_ps: phy@2b050000 {
compatible = "rockchip,rk3576-naneng-combphy";
reg = <0x0 0x2b050000 0x0 0x100>;
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 11/13] arm64: dts: rockchip: add the dsi controller to rk3576
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (9 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 10/13] arm64: dts: rockchip: add mipi-dcphy to rk3576 Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-07-07 16:49 ` [PATCH 12/13] arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc Heiko Stuebner
` (5 subsequent siblings)
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
The RK3576 comes with one DSI2 controllers based on the same newer
Synopsis IP as the ones on the RK3588.
Add the necessary node for it.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
arch/arm64/boot/dts/rockchip/rk3576.dtsi | 28 ++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
index 87d518422a60..5e9c3dce5823 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi
@@ -1271,6 +1271,34 @@ sai6: sai@27d50000 {
status = "disabled";
};
+ dsi: dsi@27d80000 {
+ compatible = "rockchip,rk3576-mipi-dsi2";
+ reg = <0x0 0x27d80000 0x0 0x10000>;
+ interrupts = <GIC_SPI 345 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&cru PCLK_DSIHOST0>, <&cru CLK_DSIHOST0>;
+ clock-names = "pclk", "sys";
+ power-domains = <&power RK3576_PD_VO0>;
+ resets = <&cru SRST_P_DSIHOST0>;
+ reset-names = "apb";
+ phys = <&mipidcphy PHY_TYPE_DPHY>;
+ phy-names = "dcphy";
+ rockchip,grf = <&vo0_grf>;
+ status = "disabled";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ dsi_in: port@0 {
+ reg = <0>;
+ };
+
+ dsi_out: port@1 {
+ reg = <1>;
+ };
+ };
+ };
+
hdmi: hdmi@27da0000 {
compatible = "rockchip,rk3576-dw-hdmi-qp";
reg = <0x0 0x27da0000 0x0 0x20000>;
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 12/13] arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (10 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 11/13] arm64: dts: rockchip: add the dsi controller " Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-07-07 16:49 ` [PATCH 13/13] arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc Heiko Stuebner
` (4 subsequent siblings)
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
This fixed regulator is described by the schematics as being part of the
baseboard and its output supply is then routed to the 30pin DSI connector
on the board.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dts | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dts b/arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dts
index d4e437ea6cd8..d0ab1d1e0e11 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dts
@@ -107,6 +107,18 @@ vcc1v8_ufs_vccq2_s0: regulator-vcc1v8-ufs-vccq2-s0 {
vin-supply = <&vcc_1v8_s3>;
};
+ vcc3v3_lcd_s0: regulator-vcc3v3-lcd-s0 {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_pwren_h>;
+ regulator-name = "vcc3v3-lcd-s0";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <&vcc_3v3_s3>;
+ };
+
vcc3v3_pcie: regulator-vcc3v3-pcie {
compatible = "regulator-fixed";
enable-active-high;
@@ -715,6 +727,10 @@ rtc_int_l: rtc-int-l {
};
power {
+ lcd_pwren_h: lcd-pwren-h {
+ rockchip,pins = <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
vcc5vd_en: vcc5vd-en {
rockchip,pins = <2 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
};
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 13/13] arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (11 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 12/13] arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc Heiko Stuebner
@ 2025-07-07 16:49 ` Heiko Stuebner
2025-07-08 13:23 ` [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Rob Herring (Arm)
` (3 subsequent siblings)
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-07-07 16:49 UTC (permalink / raw)
To: heiko
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
Add DT-overlay for the DM-M10R800-V3S display module when connected to
the ROC-RK3576-PC board. It contains a bestar,bsd1218-a101kl68 display
and a Goodix GT911 touchscreen in one enclosed case.
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
arch/arm64/boot/dts/rockchip/Makefile | 5 +
.../rk3576-roc-pc-dm-m10r800-v3s.dtso | 134 ++++++++++++++++++
2 files changed, 139 insertions(+)
create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso
diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
index 4bf84622db47..f320dd2b5f6f 100644
--- a/arch/arm64/boot/dts/rockchip/Makefile
+++ b/arch/arm64/boot/dts/rockchip/Makefile
@@ -145,6 +145,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-wolfvision-pf5-io-expander.dtbo
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-armsom-sige5.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-evb1-v10.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-roc-pc.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-roc-pc-dm-m10r800-v3s.dtbo
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-rock-4d.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3582-radxa-e52c.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-armsom-sige7.dtb
@@ -225,6 +226,10 @@ rk3568-wolfvision-pf5-vz-2-uhd-dtbs := rk3568-wolfvision-pf5.dtb \
rk3568-wolfvision-pf5-display-vz.dtbo \
rk3568-wolfvision-pf5-io-expander.dtbo
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-roc-pc-dm-m10r800-v3s.dtb
+rk3576-roc-pc-dm-m10r800-v3s-dtbs := rk3576-roc-pc.dtb \
+ rk3576-roc-pc-dm-m10r800-v3s.dtbo
+
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-edgeble-neu6a-wifi.dtb
rk3588-edgeble-neu6a-wifi-dtbs := rk3588-edgeble-neu6a-io.dtb \
rk3588-edgeble-neu6a-wifi.dtbo
diff --git a/arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso b/arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso
new file mode 100644
index 000000000000..2817cc585c3a
--- /dev/null
+++ b/arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso
@@ -0,0 +1,134 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2025 Heiko Stuebner <heiko@sntech.de>
+ *
+ * DM-M10R800-V3S display module for ROC-RK3576-PC
+ * https://en.t-firefly.com/doc/download/303.html
+ *
+ * DT-overlay for the DM-M10R800-V3S display module when connected to a
+ * ROC-RK3576-PC board. It contains a bestar,bsd1218-a101kl68 display
+ * and a Goodix GT911 touchscreen in one enclosed case.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pinctrl/rockchip.h>
+#include <dt-bindings/soc/rockchip,vop2.h>
+
+&{/} {
+ backlight: backlight {
+ compatible = "pwm-backlight";
+ enable-gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&mipi_bl_en>;
+ pwms = <&pwm1_6ch_1 0 50000 1>;
+ };
+
+ vcc_tp: regulator-vcc-tp {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc-tp";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ vin-supply = <&vcc5v0_device_s0>;
+ };
+};
+
+&dsi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+
+ panel@0 {
+ compatible = "bestar,bsd1218-a101kl68", "ilitek,ili9881c";
+ reg = <0>;
+ backlight = <&backlight>;
+ power-supply = <&vcc3v3_lcd_s0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&lcd_reset_l>;
+ reset-gpios = <&gpio0 RK_PB4 GPIO_ACTIVE_LOW>;
+
+ port {
+ mipi_panel_in: endpoint {
+ remote-endpoint = <&dsi_out_panel>;
+ };
+ };
+ };
+};
+
+&dsi_in {
+ dsi_in_vp1: endpoint {
+ remote-endpoint = <&vp1_out_dsi>;
+ };
+};
+
+&dsi_out {
+ dsi_out_panel: endpoint {
+ remote-endpoint = <&mipi_panel_in>;
+ };
+};
+
+&i2c0 {
+ /* GT911 is limited to 400KHz */
+ clock-frequency = <400000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c0m1_xfer>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+
+ touchscreen@14 {
+ compatible = "goodix,gt911";
+ reg = <0x14>;
+ interrupt-parent = <&gpio0>;
+ interrupts = <RK_PC6 IRQ_TYPE_LEVEL_LOW>;
+ irq-gpios = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&touch_int>, <&touch_reset>;
+ reset-gpios = <&gpio0 RK_PD0 GPIO_ACTIVE_HIGH>;
+ AVDD28-supply = <&vcc_tp>;
+ VDDIO-supply = <&vcc3v3_lcd_s0>;
+ };
+};
+
+&mipidcphy {
+ status = "okay";
+};
+
+&pinctrl {
+ dsi {
+ lcd_reset_l: lcd-reset-l {
+ rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ mipi_bl_en: mipi-bl-en {
+ rockchip,pins = <3 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ touch {
+ touch_int: touch-int {
+ rockchip,pins = <0 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ touch_reset: touch-reset {
+ rockchip,pins = <0 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+};
+
+&pwm1_6ch_1 {
+ status = "okay";
+};
+
+&vp1 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ vp1_out_dsi: endpoint@ROCKCHIP_VOP2_EP_MIPI0 {
+ reg = <ROCKCHIP_VOP2_EP_MIPI0>;
+ remote-endpoint = <&dsi_in_vp1>;
+ };
+};
--
2.47.2
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (12 preceding siblings ...)
2025-07-07 16:49 ` [PATCH 13/13] arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc Heiko Stuebner
@ 2025-07-08 13:23 ` Rob Herring (Arm)
2025-07-08 13:25 ` Heiko Stübner
2025-08-22 21:08 ` (subset) " Heiko Stuebner
` (2 subsequent siblings)
16 siblings, 1 reply; 28+ messages in thread
From: Rob Herring (Arm) @ 2025-07-08 13:23 UTC (permalink / raw)
To: Heiko Stuebner
Cc: mripard, andy.yan, devicetree, linux-kernel, andyshrk, hjc,
linux-rockchip, linux-arm-kernel, tzimmermann, conor+dt,
dri-devel, quic_jesszhan, maarten.lankhorst, neil.armstrong,
krzk+dt, nicolas.frattaroli
On Mon, 07 Jul 2025 18:48:53 +0200, Heiko Stuebner wrote:
> This enables all the necesary bits and bindings to get display output
> on the dm-m10r800-v3s addon module for the Firefly roc-rk3576-pc board.
>
> A bit of cleanup of the ili9881c, because the driver was still trying
> to send dcs commands when the underlying DSI driver might have already
> switched to video-mode, which caused me quite a bit of headache until
> I realized this being the culprit for my garbled display output :-) .
>
> Only the last patch has a dependency on Nicolas' pwm series [0]
> everything else, is directly usable.
>
>
> [0] https://lore.kernel.org/lkml/20250602-rk3576-pwm-v2-0-a6434b0ce60c@collabora.com/
>
> Guochun Huang (1):
> drm/rockchip: dsi2: add support rk3576
>
> Heiko Stuebner (12):
> drm/panel: ilitek-ili9881c: turn off power-supply when init fails
> drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to
> (un-)prepare
> drm/panel: ilitek-ili9881c: convert (un-)prepare to
> mipi_dsi_multi_context
> dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar
> Electronic
> dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel
> drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support
> dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon
> dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2
> controller schema
> arm64: dts: rockchip: add mipi-dcphy to rk3576
> arm64: dts: rockchip: add the dsi controller to rk3576
> arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc
> arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc
>
> .../display/panel/ilitek,ili9881c.yaml | 1 +
> .../rockchip/rockchip,rk3588-mipi-dsi2.yaml | 1 +
> .../devicetree/bindings/soc/rockchip/grf.yaml | 1 +
> .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> arch/arm64/boot/dts/rockchip/Makefile | 5 +
> .../rk3576-roc-pc-dm-m10r800-v3s.dtso | 134 ++++++++
> .../arm64/boot/dts/rockchip/rk3576-roc-pc.dts | 16 +
> arch/arm64/boot/dts/rockchip/rk3576.dtsi | 50 +++
> drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 301 ++++++++++++++----
> .../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 21 ++
> 10 files changed, 475 insertions(+), 57 deletions(-)
> create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso
>
> --
> 2.47.2
>
>
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
This patch series was applied (using b4) to base:
Base: attempting to guess base-commit...
Base: tags/v6.16-rc1-17-g63289206e26f (best guess, 8/9 blobs matched)
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/rockchip/' for 20250707164906.1445288-1-heiko@sntech.de:
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm1:pwm1m1-ch5:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm0:pwm0m1-ch1:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): i3c1:i3c1m1-xfer:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): i3c1:i3c1m1-xfer:rockchip,pins:1:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): i3c1_sda:i3c1_sdam1-pu:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch1:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m0-ch4:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch0:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m0-ch2:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch2:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch5:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch6:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m0-ch3:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch3:rockchip,pins:0:2: 14 is greater than the maximum of 13
from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[21, 492]]
from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
arch/arm64/boot/dts/rockchip/rk3576-armsom-sige5.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[20, 492]]
from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
arch/arm64/boot/dts/rockchip/rk3576-evb1-v10.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[21, 492]]
from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
arch/arm64/boot/dts/rockchip/rk3576-rock-4d.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[21, 492]]
from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board
2025-07-08 13:23 ` [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Rob Herring (Arm)
@ 2025-07-08 13:25 ` Heiko Stübner
0 siblings, 0 replies; 28+ messages in thread
From: Heiko Stübner @ 2025-07-08 13:25 UTC (permalink / raw)
To: Rob Herring (Arm)
Cc: mripard, andy.yan, devicetree, linux-kernel, andyshrk, hjc,
linux-rockchip, linux-arm-kernel, tzimmermann, conor+dt,
dri-devel, quic_jesszhan, maarten.lankhorst, neil.armstrong,
krzk+dt, nicolas.frattaroli
Am Dienstag, 8. Juli 2025, 15:23:32 Mitteleuropäische Sommerzeit schrieb Rob Herring (Arm):
>
> On Mon, 07 Jul 2025 18:48:53 +0200, Heiko Stuebner wrote:
> > This enables all the necesary bits and bindings to get display output
> > on the dm-m10r800-v3s addon module for the Firefly roc-rk3576-pc board.
> >
> > A bit of cleanup of the ili9881c, because the driver was still trying
> > to send dcs commands when the underlying DSI driver might have already
> > switched to video-mode, which caused me quite a bit of headache until
> > I realized this being the culprit for my garbled display output :-) .
> >
> > Only the last patch has a dependency on Nicolas' pwm series [0]
> > everything else, is directly usable.
> >
> >
> > [0] https://lore.kernel.org/lkml/20250602-rk3576-pwm-v2-0-a6434b0ce60c@collabora.com/
> >
> > Guochun Huang (1):
> > drm/rockchip: dsi2: add support rk3576
> >
> > Heiko Stuebner (12):
> > drm/panel: ilitek-ili9881c: turn off power-supply when init fails
> > drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to
> > (un-)prepare
> > drm/panel: ilitek-ili9881c: convert (un-)prepare to
> > mipi_dsi_multi_context
> > dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar
> > Electronic
> > dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel
> > drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support
> > dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon
> > dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2
> > controller schema
> > arm64: dts: rockchip: add mipi-dcphy to rk3576
> > arm64: dts: rockchip: add the dsi controller to rk3576
> > arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc
> > arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc
> >
> > .../display/panel/ilitek,ili9881c.yaml | 1 +
> > .../rockchip/rockchip,rk3588-mipi-dsi2.yaml | 1 +
> > .../devicetree/bindings/soc/rockchip/grf.yaml | 1 +
> > .../devicetree/bindings/vendor-prefixes.yaml | 2 +
> > arch/arm64/boot/dts/rockchip/Makefile | 5 +
> > .../rk3576-roc-pc-dm-m10r800-v3s.dtso | 134 ++++++++
> > .../arm64/boot/dts/rockchip/rk3576-roc-pc.dts | 16 +
> > arch/arm64/boot/dts/rockchip/rk3576.dtsi | 50 +++
> > drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 301 ++++++++++++++----
> > .../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 21 ++
> > 10 files changed, 475 insertions(+), 57 deletions(-)
> > create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-roc-pc-dm-m10r800-v3s.dtso
> >
> > --
> > 2.47.2
> >
> >
> >
>
>
> My bot found new DTB warnings on the .dts files added or changed in this
> series.
>
> Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
> are fixed by another series. Ultimately, it is up to the platform
> maintainer whether these warnings are acceptable or not. No need to reply
> unless the platform maintainer has comments.
>
> If you already ran DT checks and didn't see these error(s), then
> make sure dt-schema is up to date:
>
> pip3 install dtschema --upgrade
>
>
> This patch series was applied (using b4) to base:
> Base: attempting to guess base-commit...
> Base: tags/v6.16-rc1-17-g63289206e26f (best guess, 8/9 blobs matched)
>
> If this is not the correct base, please add 'base-commit' tag
> (or use b4 which does this automatically)
>
> New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/rockchip/' for 20250707164906.1445288-1-heiko@sntech.de:
>
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm1:pwm1m1-ch5:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm0:pwm0m1-ch1:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): i3c1:i3c1m1-xfer:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): i3c1:i3c1m1-xfer:rockchip,pins:1:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): i3c1_sda:i3c1_sdam1-pu:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch1:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m0-ch4:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch0:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m0-ch2:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch2:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch5:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch6:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m0-ch3:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: pinctrl (rockchip,rk3576-pinctrl): pwm2:pwm2m1-ch3:rockchip,pins:0:2: 14 is greater than the maximum of 13
> from schema $id: http://devicetree.org/schemas/pinctrl/rockchip,pinctrl.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-roc-pc.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[21, 492]]
> from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-armsom-sige5.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[20, 492]]
> from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-evb1-v10.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[21, 492]]
> from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
> arch/arm64/boot/dts/rockchip/rk3576-rock-4d.dtb: syscon@26034000 (rockchip,rk3576-dcphy-grf): clocks: False schema does not allow [[21, 492]]
> from schema $id: http://devicetree.org/schemas/soc/rockchip/grf.yaml#
that stems from the depdency on the pwm-series of only the last patch in
this series - see cover-letter above.
Heiko
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic
2025-07-07 16:48 ` [PATCH 04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic Heiko Stuebner
@ 2025-07-08 20:04 ` Rob Herring (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring (Arm) @ 2025-07-08 20:04 UTC (permalink / raw)
To: Heiko Stuebner
Cc: andy.yan, quic_jesszhan, krzk+dt, linux-kernel, hjc, mripard,
tzimmermann, devicetree, neil.armstrong, nicolas.frattaroli,
linux-arm-kernel, andyshrk, dri-devel, conor+dt,
maarten.lankhorst, linux-rockchip
On Mon, 07 Jul 2025 18:48:57 +0200, Heiko Stuebner wrote:
> Add the prefix for Bestar, named in full both on Panelook.com and their
> display datasheets as
> Shenzhen Bestar Electronic Technology Co., Ltd.
> which produces at least DSI displays and maybe more.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel
2025-07-07 16:48 ` [PATCH 05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel Heiko Stuebner
@ 2025-07-08 20:04 ` Rob Herring (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring (Arm) @ 2025-07-08 20:04 UTC (permalink / raw)
To: Heiko Stuebner
Cc: devicetree, neil.armstrong, mripard, linux-rockchip, dri-devel,
hjc, quic_jesszhan, tzimmermann, linux-kernel, linux-arm-kernel,
nicolas.frattaroli, andyshrk, andy.yan, maarten.lankhorst,
conor+dt, krzk+dt
On Mon, 07 Jul 2025 18:48:58 +0200, Heiko Stuebner wrote:
> Document the compatible value for Bestar BSD1218-A101KL68 LCD panels
> that are based around the ili9881c controller.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> .../devicetree/bindings/display/panel/ilitek,ili9881c.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon
2025-07-07 16:49 ` [PATCH 07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon Heiko Stuebner
@ 2025-07-08 20:06 ` Rob Herring (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring (Arm) @ 2025-07-08 20:06 UTC (permalink / raw)
To: Heiko Stuebner
Cc: andy.yan, krzk+dt, hjc, linux-arm-kernel, andyshrk, tzimmermann,
quic_jesszhan, devicetree, neil.armstrong, linux-rockchip,
conor+dt, linux-kernel, dri-devel, nicolas.frattaroli,
maarten.lankhorst, mripard
On Mon, 07 Jul 2025 18:49:00 +0200, Heiko Stuebner wrote:
> RK3576 CSI and DSI support requires the GRF for its DC-PHY.
> The "general register files" provide additional setting-bits
> outside the regular ip-block reg-space.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> Documentation/devicetree/bindings/soc/rockchip/grf.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema
2025-07-07 16:49 ` [PATCH 08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema Heiko Stuebner
@ 2025-07-08 20:10 ` Rob Herring (Arm)
0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring (Arm) @ 2025-07-08 20:10 UTC (permalink / raw)
To: Heiko Stuebner
Cc: tzimmermann, nicolas.frattaroli, hjc, maarten.lankhorst,
devicetree, linux-arm-kernel, dri-devel, andyshrk, quic_jesszhan,
linux-kernel, linux-rockchip, neil.armstrong, andy.yan, krzk+dt,
conor+dt, mripard
On Mon, 07 Jul 2025 18:49:01 +0200, Heiko Stuebner wrote:
> The rk3576 controller is based on the same newer Synopsis IP as the one
> found in the rk3588.
>
> Its external setting bits in the GRF are different though, so it needs
> its own distinct compatible.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> .../bindings/display/rockchip/rockchip,rk3588-mipi-dsi2.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails
2025-07-07 16:48 ` [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails Heiko Stuebner
@ 2025-08-04 15:15 ` neil.armstrong
0 siblings, 0 replies; 28+ messages in thread
From: neil.armstrong @ 2025-08-04 15:15 UTC (permalink / raw)
To: Heiko Stuebner
Cc: quic_jesszhan, maarten.lankhorst, mripard, tzimmermann, robh,
krzk+dt, conor+dt, hjc, andy.yan, andyshrk, nicolas.frattaroli,
dri-devel, devicetree, linux-kernel, linux-arm-kernel,
linux-rockchip
On 07/07/2025 18:48, Heiko Stuebner wrote:
> The prepare function turns on the power-supply regulator first, when
> preparing the display. But in an error case, just returns the error
> code, but does not power off the regulator again, fix that.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> index 28cd7560e5db..d7a17dca2a9c 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> @@ -1292,7 +1292,7 @@ static int ili9881c_prepare(struct drm_panel *panel)
> instr->arg.cmd.data);
>
> if (ret)
> - return ret;
> + goto disable_power;
> }
>
> ret = ili9881c_switch_page(ctx, 0);
> @@ -1304,18 +1304,22 @@ static int ili9881c_prepare(struct drm_panel *panel)
> &ctx->address_mode,
> sizeof(ctx->address_mode));
> if (ret < 0)
> - return ret;
> + goto disable_power;
> }
>
> ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
> if (ret)
> - return ret;
> + goto disable_power;
>
> ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
> if (ret)
> - return ret;
> + goto disable_power;
>
> return 0;
> +
> +disable_power:
> + regulator_disable(ctx->power);
> + return ret;
> }
>
> static int ili9881c_enable(struct drm_panel *panel)
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare
2025-07-07 16:48 ` [PATCH 02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare Heiko Stuebner
@ 2025-08-04 15:15 ` neil.armstrong
0 siblings, 0 replies; 28+ messages in thread
From: neil.armstrong @ 2025-08-04 15:15 UTC (permalink / raw)
To: Heiko Stuebner
Cc: quic_jesszhan, maarten.lankhorst, mripard, tzimmermann, robh,
krzk+dt, conor+dt, hjc, andy.yan, andyshrk, nicolas.frattaroli,
dri-devel, devicetree, linux-kernel, linux-arm-kernel,
linux-rockchip
On 07/07/2025 18:48, Heiko Stuebner wrote:
> At least for panel-bridges, the atomic_enable call is defined as being
> called right after the preceding element in the display pipe is enabled.
>
> It is also stated that "The bridge can assume that the display pipe (i.e.
> clocks and timing signals) feeding it is running when this callback is
> called"
>
> This means the DSI controller driving this display would have already
> switched over to video-mode from command mode and thus dcs functions
> should not be called anymore at this point.
>
> This caused a non-working display for me, when trying to enable
> the rk3576 dsi controller using a display using this controller.
>
> Therefore move the display_on/off calls the more appropriate
> prepare/unprepare callbacks.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 27 +++++--------------
> 1 file changed, 7 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> index d7a17dca2a9c..a20b52181ea0 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> @@ -1315,35 +1315,24 @@ static int ili9881c_prepare(struct drm_panel *panel)
> if (ret)
> goto disable_power;
>
> - return 0;
> -
> -disable_power:
> - regulator_disable(ctx->power);
> - return ret;
> -}
> -
> -static int ili9881c_enable(struct drm_panel *panel)
> -{
> - struct ili9881c *ctx = panel_to_ili9881c(panel);
> -
> msleep(120);
>
> - mipi_dsi_dcs_set_display_on(ctx->dsi);
> + ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
> + if (ret)
> + goto disable_power;
>
> return 0;
> -}
>
> -static int ili9881c_disable(struct drm_panel *panel)
> -{
> - struct ili9881c *ctx = panel_to_ili9881c(panel);
> -
> - return mipi_dsi_dcs_set_display_off(ctx->dsi);
> +disable_power:
> + regulator_disable(ctx->power);
> + return ret;
> }
>
> static int ili9881c_unprepare(struct drm_panel *panel)
> {
> struct ili9881c *ctx = panel_to_ili9881c(panel);
>
> + mipi_dsi_dcs_set_display_off(ctx->dsi);
> mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
> regulator_disable(ctx->power);
> gpiod_set_value_cansleep(ctx->reset, 1);
> @@ -1499,8 +1488,6 @@ static enum drm_panel_orientation ili9881c_get_orientation(struct drm_panel *pan
> static const struct drm_panel_funcs ili9881c_funcs = {
> .prepare = ili9881c_prepare,
> .unprepare = ili9881c_unprepare,
> - .enable = ili9881c_enable,
> - .disable = ili9881c_disable,
> .get_modes = ili9881c_get_modes,
> .get_orientation = ili9881c_get_orientation,
> };
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context
2025-07-07 16:48 ` [PATCH 03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context Heiko Stuebner
@ 2025-08-04 15:16 ` neil.armstrong
0 siblings, 0 replies; 28+ messages in thread
From: neil.armstrong @ 2025-08-04 15:16 UTC (permalink / raw)
To: Heiko Stuebner
Cc: quic_jesszhan, maarten.lankhorst, mripard, tzimmermann, robh,
krzk+dt, conor+dt, hjc, andy.yan, andyshrk, nicolas.frattaroli,
dri-devel, devicetree, linux-kernel, linux-arm-kernel,
linux-rockchip
On 07/07/2025 18:48, Heiko Stuebner wrote:
> This saves some lines for error handling.
>
> For the address mode change, that value is always an u8, so switching
> to dcs_write_buffer function should be appropriate.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 66 ++++++-------------
> 1 file changed, 21 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> index a20b52181ea0..154eea5f4d77 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> @@ -1239,33 +1239,24 @@ static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
> * So before any attempt at sending a command or data, we have to be
> * sure if we're in the right page or not.
> */
> -static int ili9881c_switch_page(struct ili9881c *ctx, u8 page)
> +static void ili9881c_switch_page(struct mipi_dsi_multi_context *mctx, u8 page)
> {
> u8 buf[4] = { 0xff, 0x98, 0x81, page };
> - int ret;
> -
> - ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));
> - if (ret < 0)
> - return ret;
>
> - return 0;
> + mipi_dsi_dcs_write_buffer_multi(mctx, buf, sizeof(buf));
> }
>
> -static int ili9881c_send_cmd_data(struct ili9881c *ctx, u8 cmd, u8 data)
> +static void ili9881c_send_cmd_data(struct mipi_dsi_multi_context *mctx, u8 cmd, u8 data)
> {
> u8 buf[2] = { cmd, data };
> - int ret;
>
> - ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));
> - if (ret < 0)
> - return ret;
> -
> - return 0;
> + mipi_dsi_dcs_write_buffer_multi(mctx, buf, sizeof(buf));
> }
>
> static int ili9881c_prepare(struct drm_panel *panel)
> {
> struct ili9881c *ctx = panel_to_ili9881c(panel);
> + struct mipi_dsi_multi_context mctx = { .dsi = ctx->dsi };
> unsigned int i;
> int ret;
>
> @@ -1286,54 +1277,39 @@ static int ili9881c_prepare(struct drm_panel *panel)
> const struct ili9881c_instr *instr = &ctx->desc->init[i];
>
> if (instr->op == ILI9881C_SWITCH_PAGE)
> - ret = ili9881c_switch_page(ctx, instr->arg.page);
> + ili9881c_switch_page(&mctx, instr->arg.page);
> else if (instr->op == ILI9881C_COMMAND)
> - ret = ili9881c_send_cmd_data(ctx, instr->arg.cmd.cmd,
> - instr->arg.cmd.data);
> -
> - if (ret)
> - goto disable_power;
> - }
> -
> - ret = ili9881c_switch_page(ctx, 0);
> - if (ret)
> - return ret;
> -
> - if (ctx->address_mode) {
> - ret = mipi_dsi_dcs_write(ctx->dsi, MIPI_DCS_SET_ADDRESS_MODE,
> - &ctx->address_mode,
> - sizeof(ctx->address_mode));
> - if (ret < 0)
> - goto disable_power;
> + ili9881c_send_cmd_data(&mctx, instr->arg.cmd.cmd,
> + instr->arg.cmd.data);
> }
>
> - ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
> - if (ret)
> - goto disable_power;
> -
> - ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
> - if (ret)
> - goto disable_power;
> + ili9881c_switch_page(&mctx, 0);
>
> - msleep(120);
> + if (ctx->address_mode)
> + ili9881c_send_cmd_data(&mctx, MIPI_DCS_SET_ADDRESS_MODE,
> + ctx->address_mode);
>
> - ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
> - if (ret)
> + mipi_dsi_dcs_set_tear_on_multi(&mctx, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
> + mipi_dsi_dcs_exit_sleep_mode_multi(&mctx);
> + mipi_dsi_msleep(&mctx, 120);
> + mipi_dsi_dcs_set_display_on_multi(&mctx);
> + if (mctx.accum_err)
> goto disable_power;
>
> return 0;
>
> disable_power:
> regulator_disable(ctx->power);
> - return ret;
> + return mctx.accum_err;
> }
>
> static int ili9881c_unprepare(struct drm_panel *panel)
> {
> struct ili9881c *ctx = panel_to_ili9881c(panel);
> + struct mipi_dsi_multi_context mctx = { .dsi = ctx->dsi };
>
> - mipi_dsi_dcs_set_display_off(ctx->dsi);
> - mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
> + mipi_dsi_dcs_set_display_off_multi(&mctx);
> + mipi_dsi_dcs_enter_sleep_mode_multi(&mctx);
> regulator_disable(ctx->power);
> gpiod_set_value_cansleep(ctx->reset, 1);
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support
2025-07-07 16:48 ` [PATCH 06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support Heiko Stuebner
@ 2025-08-04 15:16 ` neil.armstrong
0 siblings, 0 replies; 28+ messages in thread
From: neil.armstrong @ 2025-08-04 15:16 UTC (permalink / raw)
To: Heiko Stuebner
Cc: quic_jesszhan, maarten.lankhorst, mripard, tzimmermann, robh,
krzk+dt, conor+dt, hjc, andy.yan, andyshrk, nicolas.frattaroli,
dri-devel, devicetree, linux-kernel, linux-arm-kernel,
linux-rockchip
On 07/07/2025 18:48, Heiko Stuebner wrote:
> Add support for the Bestar BSD1218-A101KL68 panel.
>
> The init table comes from the Firefly BSP ([1]).
>
> [1] https://gitlab.com/firefly-linux/kernel/-/blob/rk3588/firefly/arch/arm64/boot/dts/rockchip/aio-3588l-mipi101-BSD1218-A101KL68.dtsi
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 220 ++++++++++++++++++
> 1 file changed, 220 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> index 154eea5f4d77..3095a8bd1ebf 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> @@ -1223,6 +1223,200 @@ static const struct ili9881c_instr am8001280g_init[] = {
> ILI9881C_COMMAND_INSTR(MIPI_DCS_WRITE_POWER_SAVE, 0x00),
> };
>
> +static const struct ili9881c_instr bsd1218_a101kl68_init[] = {
> + ILI9881C_SWITCH_PAGE_INSTR(3),
> + ILI9881C_COMMAND_INSTR(0x01, 0x00),
> + ILI9881C_COMMAND_INSTR(0x02, 0x00),
> + ILI9881C_COMMAND_INSTR(0x03, 0x55),
> + ILI9881C_COMMAND_INSTR(0x04, 0x55),
> + ILI9881C_COMMAND_INSTR(0x05, 0x03),
> + ILI9881C_COMMAND_INSTR(0x06, 0x06),
> + ILI9881C_COMMAND_INSTR(0x07, 0x00),
> + ILI9881C_COMMAND_INSTR(0x08, 0x07),
> + ILI9881C_COMMAND_INSTR(0x09, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0a, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0b, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0c, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0d, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0e, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0f, 0x00),
> + ILI9881C_COMMAND_INSTR(0x10, 0x00),
> + 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, 0xc0),
> + ILI9881C_COMMAND_INSTR(0x1f, 0x80),
> + ILI9881C_COMMAND_INSTR(0x20, 0x04),
> + ILI9881C_COMMAND_INSTR(0x21, 0x03),
> + 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, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2d, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2e, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2f, 0x00),
> + ILI9881C_COMMAND_INSTR(0x30, 0x00),
> + ILI9881C_COMMAND_INSTR(0x31, 0x00),
> + ILI9881C_COMMAND_INSTR(0x32, 0x00),
> + ILI9881C_COMMAND_INSTR(0x33, 0x00),
> + ILI9881C_COMMAND_INSTR(0x34, 0x04),
> + ILI9881C_COMMAND_INSTR(0x35, 0x00),
> + ILI9881C_COMMAND_INSTR(0x36, 0x00),
> + ILI9881C_COMMAND_INSTR(0x37, 0x00),
> + ILI9881C_COMMAND_INSTR(0x38, 0x3c),
> + 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, 0x00),
> + ILI9881C_COMMAND_INSTR(0x44, 0x00),
> + ILI9881C_COMMAND_INSTR(0x50, 0x00),
> + ILI9881C_COMMAND_INSTR(0x51, 0x11),
> + ILI9881C_COMMAND_INSTR(0x52, 0x44),
> + ILI9881C_COMMAND_INSTR(0x53, 0x55),
> + ILI9881C_COMMAND_INSTR(0x54, 0x88),
> + ILI9881C_COMMAND_INSTR(0x55, 0xab),
> + ILI9881C_COMMAND_INSTR(0x56, 0x00),
> + ILI9881C_COMMAND_INSTR(0x57, 0x11),
> + ILI9881C_COMMAND_INSTR(0x58, 0x22),
> + ILI9881C_COMMAND_INSTR(0x59, 0x33),
> + ILI9881C_COMMAND_INSTR(0x5a, 0x44),
> + ILI9881C_COMMAND_INSTR(0x5b, 0x55),
> + ILI9881C_COMMAND_INSTR(0x5c, 0x66),
> + ILI9881C_COMMAND_INSTR(0x5d, 0x77),
> + ILI9881C_COMMAND_INSTR(0x5e, 0x00),
> + ILI9881C_COMMAND_INSTR(0x5f, 0x02),
> + ILI9881C_COMMAND_INSTR(0x60, 0x02),
> + ILI9881C_COMMAND_INSTR(0x61, 0x0a),
> + ILI9881C_COMMAND_INSTR(0x62, 0x09),
> + ILI9881C_COMMAND_INSTR(0x63, 0x08),
> + ILI9881C_COMMAND_INSTR(0x64, 0x13),
> + ILI9881C_COMMAND_INSTR(0x65, 0x12),
> + ILI9881C_COMMAND_INSTR(0x66, 0x11),
> + ILI9881C_COMMAND_INSTR(0x67, 0x10),
> + ILI9881C_COMMAND_INSTR(0x68, 0x0f),
> + ILI9881C_COMMAND_INSTR(0x69, 0x0e),
> + ILI9881C_COMMAND_INSTR(0x6a, 0x0d),
> + ILI9881C_COMMAND_INSTR(0x6b, 0x0c),
> + ILI9881C_COMMAND_INSTR(0x6c, 0x06),
> + ILI9881C_COMMAND_INSTR(0x6d, 0x07),
> + ILI9881C_COMMAND_INSTR(0x6e, 0x02),
> + ILI9881C_COMMAND_INSTR(0x6f, 0x02),
> + ILI9881C_COMMAND_INSTR(0x70, 0x02),
> + ILI9881C_COMMAND_INSTR(0x71, 0x02),
> + ILI9881C_COMMAND_INSTR(0x72, 0x02),
> + ILI9881C_COMMAND_INSTR(0x73, 0x02),
> + ILI9881C_COMMAND_INSTR(0x74, 0x02),
> + ILI9881C_COMMAND_INSTR(0x75, 0x02),
> + ILI9881C_COMMAND_INSTR(0x76, 0x02),
> + ILI9881C_COMMAND_INSTR(0x77, 0x0a),
> + ILI9881C_COMMAND_INSTR(0x78, 0x06),
> + ILI9881C_COMMAND_INSTR(0x79, 0x07),
> + ILI9881C_COMMAND_INSTR(0x7a, 0x10),
> + ILI9881C_COMMAND_INSTR(0x7b, 0x11),
> + ILI9881C_COMMAND_INSTR(0x7c, 0x12),
> + ILI9881C_COMMAND_INSTR(0x7d, 0x13),
> + ILI9881C_COMMAND_INSTR(0x7e, 0x0c),
> + ILI9881C_COMMAND_INSTR(0x7f, 0x0d),
> + ILI9881C_COMMAND_INSTR(0x80, 0x0e),
> + ILI9881C_COMMAND_INSTR(0x81, 0x0f),
> + ILI9881C_COMMAND_INSTR(0x82, 0x09),
> + ILI9881C_COMMAND_INSTR(0x83, 0x08),
> + ILI9881C_COMMAND_INSTR(0x84, 0x02),
> + ILI9881C_COMMAND_INSTR(0x85, 0x02),
> + ILI9881C_COMMAND_INSTR(0x86, 0x02),
> + ILI9881C_COMMAND_INSTR(0x87, 0x02),
> + ILI9881C_COMMAND_INSTR(0x88, 0x02),
> + ILI9881C_COMMAND_INSTR(0x89, 0x02),
> + ILI9881C_COMMAND_INSTR(0x8a, 0x02),
> +
> + ILI9881C_SWITCH_PAGE_INSTR(4),
> + ILI9881C_COMMAND_INSTR(0x6e, 0x2a),
> + ILI9881C_COMMAND_INSTR(0x6f, 0x37),
> + ILI9881C_COMMAND_INSTR(0x3a, 0x24),
> + ILI9881C_COMMAND_INSTR(0x8d, 0x19),
> + 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, 0x0c),
> + ILI9881C_COMMAND_INSTR(0x53, 0x40),
> + ILI9881C_COMMAND_INSTR(0x55, 0x45),
> + ILI9881C_COMMAND_INSTR(0x50, 0xb7),
> + ILI9881C_COMMAND_INSTR(0x51, 0xb2),
> + ILI9881C_COMMAND_INSTR(0x60, 0x07),
> + ILI9881C_COMMAND_INSTR(0xa0, 0x22),
> + ILI9881C_COMMAND_INSTR(0xa1, 0x3f),
> + ILI9881C_COMMAND_INSTR(0xa2, 0x4e),
> + ILI9881C_COMMAND_INSTR(0xa3, 0x17),
> + ILI9881C_COMMAND_INSTR(0xa4, 0x1a),
> + ILI9881C_COMMAND_INSTR(0xa5, 0x2d),
> + ILI9881C_COMMAND_INSTR(0xa6, 0x21),
> + ILI9881C_COMMAND_INSTR(0xa7, 0x22),
> + ILI9881C_COMMAND_INSTR(0xa8, 0xc4),
> + ILI9881C_COMMAND_INSTR(0xa9, 0x1b),
> + ILI9881C_COMMAND_INSTR(0xaa, 0x25),
> + ILI9881C_COMMAND_INSTR(0xab, 0xa7),
> + ILI9881C_COMMAND_INSTR(0xac, 0x1a),
> + ILI9881C_COMMAND_INSTR(0xad, 0x19),
> + ILI9881C_COMMAND_INSTR(0xae, 0x4b),
> + ILI9881C_COMMAND_INSTR(0xaf, 0x1f),
> + ILI9881C_COMMAND_INSTR(0xb0, 0x2a),
> + ILI9881C_COMMAND_INSTR(0xb1, 0x59),
> + ILI9881C_COMMAND_INSTR(0xb2, 0x64),
> + ILI9881C_COMMAND_INSTR(0xb3, 0x3f),
> + ILI9881C_COMMAND_INSTR(0xc0, 0x22),
> + ILI9881C_COMMAND_INSTR(0xc1, 0x48),
> + ILI9881C_COMMAND_INSTR(0xc2, 0x59),
> + ILI9881C_COMMAND_INSTR(0xc3, 0x15),
> + ILI9881C_COMMAND_INSTR(0xc4, 0x15),
> + ILI9881C_COMMAND_INSTR(0xc5, 0x28),
> + ILI9881C_COMMAND_INSTR(0xc6, 0x1c),
> + ILI9881C_COMMAND_INSTR(0xc7, 0x1e),
> + ILI9881C_COMMAND_INSTR(0xc8, 0xc4),
> + ILI9881C_COMMAND_INSTR(0xc9, 0x1c),
> + ILI9881C_COMMAND_INSTR(0xca, 0x2b),
> + ILI9881C_COMMAND_INSTR(0xcb, 0xa3),
> + ILI9881C_COMMAND_INSTR(0xcc, 0x1f),
> + ILI9881C_COMMAND_INSTR(0xcd, 0x1e),
> + ILI9881C_COMMAND_INSTR(0xce, 0x52),
> + ILI9881C_COMMAND_INSTR(0xcf, 0x24),
> + ILI9881C_COMMAND_INSTR(0xd0, 0x2a),
> + ILI9881C_COMMAND_INSTR(0xd1, 0x58),
> + ILI9881C_COMMAND_INSTR(0xd2, 0x68),
> + ILI9881C_COMMAND_INSTR(0xd3, 0x3f),
> +};
> +
> static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
> {
> return container_of(panel, struct ili9881c, panel);
> @@ -1418,6 +1612,23 @@ static const struct drm_display_mode am8001280g_default_mode = {
> .height_mm = 151,
> };
>
> +static const struct drm_display_mode bsd1218_a101kl68_default_mode = {
> + .clock = 70000,
> +
> + .hdisplay = 800,
> + .hsync_start = 800 + 40,
> + .hsync_end = 800 + 40 + 20,
> + .htotal = 800 + 40 + 20 + 20,
> +
> + .vdisplay = 1280,
> + .vsync_start = 1280 + 20,
> + .vsync_end = 1280 + 20 + 4,
> + .vtotal = 1280 + 20 + 4 + 20,
> +
> + .width_mm = 120,
> + .height_mm = 170,
> +};
> +
> static int ili9881c_get_modes(struct drm_panel *panel,
> struct drm_connector *connector)
> {
> @@ -1576,8 +1787,17 @@ static const struct ili9881c_desc am8001280g_desc = {
> MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM,
> };
>
> +static const struct ili9881c_desc bsd1218_a101kl68_desc = {
> + .init = bsd1218_a101kl68_init,
> + .init_length = ARRAY_SIZE(bsd1218_a101kl68_init),
> + .mode = &bsd1218_a101kl68_default_mode,
> + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
> + MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,
> +};
> +
> static const struct of_device_id ili9881c_of_match[] = {
> { .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
> + { .compatible = "bestar,bsd1218-a101kl68", .data = &bsd1218_a101kl68_desc },
> { .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },
> { .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc },
> { .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re:[PATCH 09/13] drm/rockchip: dsi2: add support rk3576
2025-07-07 16:49 ` [PATCH 09/13] drm/rockchip: dsi2: add support rk3576 Heiko Stuebner
@ 2025-08-13 7:56 ` Andy Yan
0 siblings, 0 replies; 28+ messages in thread
From: Andy Yan @ 2025-08-13 7:56 UTC (permalink / raw)
To: Heiko Stuebner
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip, Guochun Huang
Hello Heiko,
At 2025-07-08 00:49:02, "Heiko Stuebner" <heiko@sntech.de> wrote:
>From: Guochun Huang <hero.huang@rock-chips.com>
>
>Add the necessary specific bits to support the rk3576-variant of the
>DW-DSI2 controller.
>
>Signed-off-by: Guochun Huang <hero.huang@rock-chips.com>
>[adapted from the vendor-kernel for mainline]
>Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Andy Yan <andy.yan@rock-chips.com>
Thanks.
>---
> .../gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c | 21 +++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
>diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
>index cdd490778756..0aea764e29b2 100644
>--- a/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
>+++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi2-rockchip.c
>@@ -437,6 +437,15 @@ static void dw_mipi_dsi2_rockchip_remove(struct platform_device *pdev)
> dw_mipi_dsi2_remove(dsi2->dmd);
> }
>
>+static const struct dsigrf_reg rk3576_dsi_grf_reg_fields[MAX_FIELDS] = {
>+ [TXREQCLKHS_EN] = { 0x0028, 1, 1 },
>+ [GATING_EN] = { 0x0028, 0, 0 },
>+ [IPI_SHUTDN] = { 0x0028, 3, 3 },
>+ [IPI_COLORM] = { 0x0028, 2, 2 },
>+ [IPI_COLOR_DEPTH] = { 0x0028, 8, 11 },
>+ [IPI_FORMAT] = { 0x0028, 4, 7 },
>+};
>+
> static const struct dsigrf_reg rk3588_dsi0_grf_reg_fields[MAX_FIELDS] = {
> [TXREQCLKHS_EN] = { 0x0000, 11, 11 },
> [GATING_EN] = { 0x0000, 10, 10 },
>@@ -455,6 +464,15 @@ static const struct dsigrf_reg rk3588_dsi1_grf_reg_fields[MAX_FIELDS] = {
> [IPI_FORMAT] = { 0x0004, 0, 3 },
> };
>
>+static const struct rockchip_dw_dsi2_chip_data rk3576_chip_data[] = {
>+ {
>+ .reg = 0x27d80000,
>+ .grf_regs = rk3576_dsi_grf_reg_fields,
>+ .max_bit_rate_per_lane = 2500000ULL,
>+ },
>+ { /* sentinel */ }
>+};
>+
> static const struct rockchip_dw_dsi2_chip_data rk3588_chip_data[] = {
> {
> .reg = 0xfde20000,
>@@ -470,6 +488,9 @@ static const struct rockchip_dw_dsi2_chip_data rk3588_chip_data[] = {
>
> static const struct of_device_id dw_mipi_dsi2_rockchip_dt_ids[] = {
> {
>+ .compatible = "rockchip,rk3576-mipi-dsi2",
>+ .data = &rk3576_chip_data,
>+ }, {
> .compatible = "rockchip,rk3588-mipi-dsi2",
> .data = &rk3588_chip_data,
> },
>--
>2.47.2
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: (subset) [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (13 preceding siblings ...)
2025-07-08 13:23 ` [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Rob Herring (Arm)
@ 2025-08-22 21:08 ` Heiko Stuebner
2025-08-22 21:15 ` Heiko Stuebner
2025-08-22 21:22 ` Heiko Stuebner
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-08-22 21:08 UTC (permalink / raw)
To: Heiko Stuebner
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
On Mon, 07 Jul 2025 18:48:53 +0200, Heiko Stuebner wrote:
> This enables all the necesary bits and bindings to get display output
> on the dm-m10r800-v3s addon module for the Firefly roc-rk3576-pc board.
>
> A bit of cleanup of the ili9881c, because the driver was still trying
> to send dcs commands when the underlying DSI driver might have already
> switched to video-mode, which caused me quite a bit of headache until
> I realized this being the culprit for my garbled display output :-) .
>
> [...]
Applied, thanks!
[01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails
commit: 6c66eba502709a78281333187c1add7b71f7201f
[02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare
commit: 5efa82492066fcb32308210fb3f0b752af74334f
[03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context
commit: 9002f55ee4480f23bd2ce91fb5fca536ce31717e
[04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic
commit: 8e484ff181b177ea2e86e537fd7a5c8f9d7532ad
[05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel
commit: 157ba8c6742931a617a34555c27dd10b36385cf3
[06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support
commit: 38dbbbb41c515d72b0a82fde3cec450d068f5e94
Best regards,
--
Heiko Stuebner <heiko@sntech.de>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: (subset) [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (14 preceding siblings ...)
2025-08-22 21:08 ` (subset) " Heiko Stuebner
@ 2025-08-22 21:15 ` Heiko Stuebner
2025-08-22 21:22 ` Heiko Stuebner
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-08-22 21:15 UTC (permalink / raw)
To: Heiko Stuebner
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
On Mon, 07 Jul 2025 18:48:53 +0200, Heiko Stuebner wrote:
> This enables all the necesary bits and bindings to get display output
> on the dm-m10r800-v3s addon module for the Firefly roc-rk3576-pc board.
>
> A bit of cleanup of the ili9881c, because the driver was still trying
> to send dcs commands when the underlying DSI driver might have already
> switched to video-mode, which caused me quite a bit of headache until
> I realized this being the culprit for my garbled display output :-) .
>
> [...]
Applied, thanks!
[08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema
commit: f05530bdaf42aa0e6bb4cde76ba6a081cf473d44
[09/13] drm/rockchip: dsi2: add support rk3576
commit: b6f11f114759a088acf44e86b5cd72f24de85d44
Best regards,
--
Heiko Stuebner <heiko@sntech.de>
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: (subset) [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
` (15 preceding siblings ...)
2025-08-22 21:15 ` Heiko Stuebner
@ 2025-08-22 21:22 ` Heiko Stuebner
16 siblings, 0 replies; 28+ messages in thread
From: Heiko Stuebner @ 2025-08-22 21:22 UTC (permalink / raw)
To: Heiko Stuebner
Cc: neil.armstrong, quic_jesszhan, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, hjc, andy.yan, andyshrk,
nicolas.frattaroli, dri-devel, devicetree, linux-kernel,
linux-arm-kernel, linux-rockchip
On Mon, 07 Jul 2025 18:48:53 +0200, Heiko Stuebner wrote:
> This enables all the necesary bits and bindings to get display output
> on the dm-m10r800-v3s addon module for the Firefly roc-rk3576-pc board.
>
> A bit of cleanup of the ili9881c, because the driver was still trying
> to send dcs commands when the underlying DSI driver might have already
> switched to video-mode, which caused me quite a bit of headache until
> I realized this being the culprit for my garbled display output :-) .
>
> [...]
Applied, thanks!
[07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon
commit: 0e3f3d7c7ae3dec5ff52325915e3efcbce652a82
[10/13] arm64: dts: rockchip: add mipi-dcphy to rk3576
commit: 21bc1a7fcea4635a49f6b2eff3e4c661e80e8f43
[11/13] arm64: dts: rockchip: add the dsi controller to rk3576
commit: e51828f80df99a2899e263b750cada6426f14c92
[12/13] arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc
commit: 3d5c0c21d86fed05caeae43549e0c13ddd203c31
Best regards,
--
Heiko Stuebner <heiko@sntech.de>
^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2025-08-22 21:22 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-07 16:48 [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Heiko Stuebner
2025-07-07 16:48 ` [PATCH 01/13] drm/panel: ilitek-ili9881c: turn off power-supply when init fails Heiko Stuebner
2025-08-04 15:15 ` neil.armstrong
2025-07-07 16:48 ` [PATCH 02/13] drm/panel: ilitek-ili9881c: move display_on/_off dcs calls to (un-)prepare Heiko Stuebner
2025-08-04 15:15 ` neil.armstrong
2025-07-07 16:48 ` [PATCH 03/13] drm/panel: ilitek-ili9881c: convert (un-)prepare to mipi_dsi_multi_context Heiko Stuebner
2025-08-04 15:16 ` neil.armstrong
2025-07-07 16:48 ` [PATCH 04/13] dt-bindings: vendor-prefixes: Add prefix for Shenzhen Bestar Electronic Heiko Stuebner
2025-07-08 20:04 ` Rob Herring (Arm)
2025-07-07 16:48 ` [PATCH 05/13] dt-bindings: display: ili9881c: Add Bestar BSD1218-A101KL68 LCD panel Heiko Stuebner
2025-07-08 20:04 ` Rob Herring (Arm)
2025-07-07 16:48 ` [PATCH 06/13] drm/panel: ilitek-ili9881c: Add Bestar BSD1218-A101KL68 support Heiko Stuebner
2025-08-04 15:16 ` neil.armstrong
2025-07-07 16:49 ` [PATCH 07/13] dt-bindings: soc: rockchip: add rk3576 mipi dcphy syscon Heiko Stuebner
2025-07-08 20:06 ` Rob Herring (Arm)
2025-07-07 16:49 ` [PATCH 08/13] dt-bindings: display: rockchip: Add rk3576 to RK3588 DW DSI2 controller schema Heiko Stuebner
2025-07-08 20:10 ` Rob Herring (Arm)
2025-07-07 16:49 ` [PATCH 09/13] drm/rockchip: dsi2: add support rk3576 Heiko Stuebner
2025-08-13 7:56 ` Andy Yan
2025-07-07 16:49 ` [PATCH 10/13] arm64: dts: rockchip: add mipi-dcphy to rk3576 Heiko Stuebner
2025-07-07 16:49 ` [PATCH 11/13] arm64: dts: rockchip: add the dsi controller " Heiko Stuebner
2025-07-07 16:49 ` [PATCH 12/13] arm64: dts: rockchip: add vcc3v3-lcd-s0 regulator to roc-rk3576-pc Heiko Stuebner
2025-07-07 16:49 ` [PATCH 13/13] arm64: dts: rockchip: add dm-m10r800-v3s overlay for roc-rk3576-pc Heiko Stuebner
2025-07-08 13:23 ` [PATCH 00/13] Support DSI output on rk3576 and roc-rk3576-pc board Rob Herring (Arm)
2025-07-08 13:25 ` Heiko Stübner
2025-08-22 21:08 ` (subset) " Heiko Stuebner
2025-08-22 21:15 ` Heiko Stuebner
2025-08-22 21:22 ` Heiko Stuebner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).