* [PATCH v2 0/3] drm/panel: ilitek-ili9805: convert to *_multi API
@ 2026-07-19 19:03 Michail Tatas
2026-07-19 19:03 ` [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants Michail Tatas
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Michail Tatas @ 2026-07-19 19:03 UTC (permalink / raw)
To: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel, Michail Tatas
This series converts panel-ilitek-ili9805 to the
mipi_dsi_*_multi helpers and cleans up the resulting code.
Patch 1: Convert the individual DSI calls to their
*_multi variants
Patch 2: Replace the ILI9805_INSTR table with per
panel init functions using the *_multi API, dropping
struct ili9805_instr
Patch 3: makes ili9805_power_off() and ili9805_deactivate()
return void, since no one checks their return values.
Michail Tatas (3):
drm/panel: ilitek-ili9805: Use _multi variants
drm/panel: ilitek-ili9805: Use dsi_multi in init
drm/panel: ilitek-ili9805: make cleanup funcs void
drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 207 ++++++++-----------
1 file changed, 84 insertions(+), 123 deletions(-)
--
Changes in v2:
Addresses review feedback from Doug on v1
- Patch 1 remains the same as v1
- Added patch 2 dropping struct ili9805_instr and used
per-panel init functions
- Added patch 3 making the cleanup functions return void
Revisions
- v1: https://lore.kernel.org/all/allWpYxgHfpKughy@michalis-linux/
The changes are compile tested only. Also I run checkpatch.pl,
sparse, smatch, gcc W=1, clang W=1 and coccinelle.
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants
2026-07-19 19:03 [PATCH v2 0/3] drm/panel: ilitek-ili9805: convert to *_multi API Michail Tatas
@ 2026-07-19 19:03 ` Michail Tatas
2026-07-20 12:38 ` neil.armstrong
2026-07-20 20:07 ` Doug Anderson
2026-07-19 19:03 ` [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init Michail Tatas
2026-07-19 19:03 ` [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void Michail Tatas
2 siblings, 2 replies; 11+ messages in thread
From: Michail Tatas @ 2026-07-19 19:03 UTC (permalink / raw)
To: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel, Michail Tatas
Convert functions mipi_dsi_* to mipi_dsi_*_multi as per the
gpu/todo file.
The multi variant of these functions include improved error
handling.
Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
---
drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 51 +++++---------------
1 file changed, 13 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
index e6c483851f1f..7e9587afebbe 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
@@ -159,36 +159,23 @@ static int ili9805_power_off(struct ili9805 *ctx)
static int ili9805_activate(struct ili9805 *ctx)
{
- struct mipi_dsi_device *dsi = ctx->dsi;
- struct device *dev = &dsi->dev;
- int i, ret;
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
+ int i;
for (i = 0; i < ctx->desc->init_length; i++) {
const struct ili9805_instr *instr = &ctx->desc->init[i];
- ret = mipi_dsi_dcs_write_buffer(ctx->dsi, instr->data, instr->len);
- if (ret < 0)
- return ret;
+ mipi_dsi_dcs_write_buffer_multi(&dsi_ctx, instr->data, instr->len);
if (instr->delay > 0)
- msleep(instr->delay);
- }
-
- ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
- if (ret) {
- dev_err(dev, "Failed to exit sleep mode (%d)\n", ret);
- return ret;
+ mipi_dsi_msleep(&dsi_ctx, instr->delay);
}
- usleep_range(5000, 6000);
+ mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
+ mipi_dsi_usleep_range(&dsi_ctx, 5000, 6000);
+ mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
- ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
- if (ret) {
- dev_err(dev, "Failed to set display ON (%d)\n", ret);
- return ret;
- }
-
- return 0;
+ return dsi_ctx.accum_err;
}
static int ili9805_prepare(struct drm_panel *panel)
@@ -211,25 +198,13 @@ static int ili9805_prepare(struct drm_panel *panel)
static int ili9805_deactivate(struct ili9805 *ctx)
{
- struct mipi_dsi_device *dsi = ctx->dsi;
- struct device *dev = &dsi->dev;
- int ret;
-
- ret = mipi_dsi_dcs_set_display_off(ctx->dsi);
- if (ret < 0) {
- dev_err(dev, "Failed to set display OFF (%d)\n", ret);
- return ret;
- }
+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
- usleep_range(5000, 10000);
-
- ret = mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
- if (ret < 0) {
- dev_err(dev, "Failed to enter sleep mode (%d)\n", ret);
- return ret;
- }
+ mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
+ mipi_dsi_usleep_range(&dsi_ctx, 5000, 10000);
+ mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
- return 0;
+ return dsi_ctx.accum_err;
}
static int ili9805_unprepare(struct drm_panel *panel)
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init
2026-07-19 19:03 [PATCH v2 0/3] drm/panel: ilitek-ili9805: convert to *_multi API Michail Tatas
2026-07-19 19:03 ` [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants Michail Tatas
@ 2026-07-19 19:03 ` Michail Tatas
2026-07-20 12:39 ` neil.armstrong
2026-07-20 20:08 ` Doug Anderson
2026-07-19 19:03 ` [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void Michail Tatas
2 siblings, 2 replies; 11+ messages in thread
From: Michail Tatas @ 2026-07-19 19:03 UTC (permalink / raw)
To: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel, Michail Tatas
Drop the struct ili9805_instr and the init table
and use init functions.
Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
---
drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 156 +++++++++----------
1 file changed, 73 insertions(+), 83 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
index 7e9587afebbe..a70b9512746a 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
@@ -25,22 +25,9 @@
#define ILI9805_SETEXTC_PARAMETER2 (0x98)
#define ILI9805_SETEXTC_PARAMETER3 (0x05)
-#define ILI9805_INSTR(_delay, ...) { \
- .delay = (_delay), \
- .len = sizeof((u8[]) {__VA_ARGS__}), \
- .data = (u8[]){__VA_ARGS__} \
- }
-
-struct ili9805_instr {
- size_t len;
- const u8 *data;
- u32 delay;
-};
-
struct ili9805_desc {
const char *name;
- const struct ili9805_instr *init;
- const size_t init_length;
+ void (*init)(struct mipi_dsi_multi_context *ctx);
const struct drm_display_mode *mode;
u32 width_mm;
u32 height_mm;
@@ -56,65 +43,78 @@ struct ili9805 {
struct gpio_desc *reset_gpio;
};
-static const struct ili9805_instr gpm1780a0_init[] = {
- ILI9805_INSTR(100, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
- ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3),
- ILI9805_INSTR(100, 0xFD, 0x0F, 0x10, 0x44, 0x00),
- ILI9805_INSTR(0, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
- 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00),
- ILI9805_INSTR(0, 0xB8, 0x62),
- ILI9805_INSTR(0, 0xF1, 0x00),
- ILI9805_INSTR(0, 0xF2, 0x00, 0x58, 0x40),
- ILI9805_INSTR(0, 0xF3, 0x60, 0x83, 0x04),
- ILI9805_INSTR(0, 0xFC, 0x04, 0x0F, 0x01),
- ILI9805_INSTR(0, 0xEB, 0x08, 0x0F),
- ILI9805_INSTR(0, 0xe0, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
- 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a),
- ILI9805_INSTR(0, 0xe1, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
- 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a),
- ILI9805_INSTR(10, 0xc1, 0x13, 0x39, 0x19, 0x06),
- ILI9805_INSTR(10, 0xc7, 0xe5),
- ILI9805_INSTR(10, 0xB1, 0x00, 0x12, 0x14),
- ILI9805_INSTR(10, 0xB4, 0x02),
- ILI9805_INSTR(0, 0xBB, 0x14, 0x55),
- ILI9805_INSTR(0, MIPI_DCS_SET_ADDRESS_MODE, 0x08),
- ILI9805_INSTR(0, MIPI_DCS_SET_PIXEL_FORMAT, 0x77),
- ILI9805_INSTR(0, 0x20),
- ILI9805_INSTR(0, 0xB0, 0x01),
- ILI9805_INSTR(0, 0xB6, 0x31, 0x00, 0xef),
- ILI9805_INSTR(0, 0xDF, 0x23),
- ILI9805_INSTR(0, 0xB9, 0x02, 0x00),
-};
+static void gpm1780a0_init(struct mipi_dsi_multi_context *ctx)
+{
+ mipi_dsi_dcs_write_seq_multi(ctx, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
+ ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3);
+ mipi_dsi_msleep(ctx, 100);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xFD, 0x0F, 0x10, 0x44, 0x00);
+ mipi_dsi_msleep(ctx, 100);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB8, 0x62);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xF1, 0x00);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xF2, 0x00, 0x58, 0x40);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xF3, 0x60, 0x83, 0x04);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xFC, 0x04, 0x0F, 0x01);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xEB, 0x08, 0x0F);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xe0, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
+ 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xe1, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
+ 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xc1, 0x13, 0x39, 0x19, 0x06);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xc7, 0xe5);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB1, 0x00, 0x12, 0x14);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB4, 0x02);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xBB, 0x14, 0x55);
+ mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_ADDRESS_MODE, 0x08);
+ mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_PIXEL_FORMAT, 0x77);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x20);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB0, 0x01);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB6, 0x31, 0x00, 0xef);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xDF, 0x23);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB9, 0x02, 0x00);
+}
-static const struct ili9805_instr tm041xdhg01_init[] = {
- ILI9805_INSTR(100, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
- ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3),
- ILI9805_INSTR(100, 0xFD, 0x0F, 0x13, 0x44, 0x00),
- ILI9805_INSTR(0, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x01,
- 0x01, 0x30, 0x01, 0x01, 0x30, 0x01, 0x01),
- ILI9805_INSTR(0, 0xB8, 0x74),
- ILI9805_INSTR(0, 0xF1, 0x00),
- ILI9805_INSTR(0, 0xF2, 0x00, 0x58, 0x40),
- ILI9805_INSTR(0, 0xFC, 0x04, 0x0F, 0x01),
- ILI9805_INSTR(0, 0xEB, 0x08, 0x0F),
- ILI9805_INSTR(0, 0xe0, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
- 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08),
- ILI9805_INSTR(0, 0xe1, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
- 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08),
- ILI9805_INSTR(10, 0xc1, 0x15, 0x03, 0x03, 0x31),
- ILI9805_INSTR(10, 0xB1, 0x00, 0x12, 0x14),
- ILI9805_INSTR(10, 0xB4, 0x02),
- ILI9805_INSTR(0, 0xBB, 0x14, 0x55),
- ILI9805_INSTR(0, MIPI_DCS_SET_ADDRESS_MODE, 0x0a),
- ILI9805_INSTR(0, MIPI_DCS_SET_PIXEL_FORMAT, 0x77),
- ILI9805_INSTR(0, 0x20),
- ILI9805_INSTR(0, 0xB0, 0x00),
- ILI9805_INSTR(0, 0xB6, 0x01),
- ILI9805_INSTR(0, 0xc2, 0x11),
- ILI9805_INSTR(0, 0x51, 0xFF),
- ILI9805_INSTR(0, 0x53, 0x24),
- ILI9805_INSTR(0, 0x55, 0x00),
-};
+static void tm041xdhg01_init(struct mipi_dsi_multi_context *ctx)
+{
+ mipi_dsi_dcs_write_seq_multi(ctx, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
+ ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3);
+ mipi_dsi_msleep(ctx, 100);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xFD, 0x0F, 0x13, 0x44, 0x00);
+ mipi_dsi_msleep(ctx, 100);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x01,
+ 0x01, 0x30, 0x01, 0x01, 0x30, 0x01, 0x01);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB8, 0x74);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xF1, 0x00);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xF2, 0x00, 0x58, 0x40);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xFC, 0x04, 0x0F, 0x01);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xEB, 0x08, 0x0F);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xe0, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
+ 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xe1, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
+ 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xc1, 0x15, 0x03, 0x03, 0x31);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB1, 0x00, 0x12, 0x14);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB4, 0x02);
+ mipi_dsi_msleep(ctx, 10);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xBB, 0x14, 0x55);
+ mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_ADDRESS_MODE, 0x0a);
+ mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_PIXEL_FORMAT, 0x77);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x20);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB0, 0x00);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB6, 0x01);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xc2, 0x11);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x51, 0xFF);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x53, 0x24);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x55, 0x00);
+}
static inline struct ili9805 *panel_to_ili9805(struct drm_panel *panel)
{
@@ -160,16 +160,8 @@ static int ili9805_power_off(struct ili9805 *ctx)
static int ili9805_activate(struct ili9805 *ctx)
{
struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
- int i;
- for (i = 0; i < ctx->desc->init_length; i++) {
- const struct ili9805_instr *instr = &ctx->desc->init[i];
-
- mipi_dsi_dcs_write_buffer_multi(&dsi_ctx, instr->data, instr->len);
-
- if (instr->delay > 0)
- mipi_dsi_msleep(&dsi_ctx, instr->delay);
- }
+ ctx->desc->init(&dsi_ctx);
mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
mipi_dsi_usleep_range(&dsi_ctx, 5000, 6000);
@@ -343,7 +335,6 @@ static void ili9805_dsi_remove(struct mipi_dsi_device *dsi)
static const struct ili9805_desc gpm1780a0_desc = {
.init = gpm1780a0_init,
- .init_length = ARRAY_SIZE(gpm1780a0_init),
.mode = &gpm1780a0_timing,
.width_mm = 65,
.height_mm = 65,
@@ -351,7 +342,6 @@ static const struct ili9805_desc gpm1780a0_desc = {
static const struct ili9805_desc tm041xdhg01_desc = {
.init = tm041xdhg01_init,
- .init_length = ARRAY_SIZE(tm041xdhg01_init),
.mode = &tm041xdhg01_timing,
.width_mm = 42,
.height_mm = 96,
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void
2026-07-19 19:03 [PATCH v2 0/3] drm/panel: ilitek-ili9805: convert to *_multi API Michail Tatas
2026-07-19 19:03 ` [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants Michail Tatas
2026-07-19 19:03 ` [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init Michail Tatas
@ 2026-07-19 19:03 ` Michail Tatas
2026-07-20 12:40 ` neil.armstrong
2026-07-20 20:08 ` Doug Anderson
2 siblings, 2 replies; 11+ messages in thread
From: Michail Tatas @ 2026-07-19 19:03 UTC (permalink / raw)
To: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel, Michail Tatas
Make cleanup functions return void since no one is checking
their return values
Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
---
drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
index a70b9512746a..64cfaf981e9f 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
@@ -148,13 +148,11 @@ static int ili9805_power_on(struct ili9805 *ctx)
return 0;
}
-static int ili9805_power_off(struct ili9805 *ctx)
+static void ili9805_power_off(struct ili9805 *ctx)
{
gpiod_set_value(ctx->reset_gpio, 0);
regulator_disable(ctx->dvdd);
regulator_disable(ctx->avdd);
-
- return 0;
}
static int ili9805_activate(struct ili9805 *ctx)
@@ -188,15 +186,13 @@ static int ili9805_prepare(struct drm_panel *panel)
return 0;
}
-static int ili9805_deactivate(struct ili9805 *ctx)
+static void ili9805_deactivate(struct ili9805 *ctx)
{
struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
mipi_dsi_usleep_range(&dsi_ctx, 5000, 10000);
mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
-
- return dsi_ctx.accum_err;
}
static int ili9805_unprepare(struct drm_panel *panel)
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants
2026-07-19 19:03 ` [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants Michail Tatas
@ 2026-07-20 12:38 ` neil.armstrong
2026-07-20 20:07 ` Doug Anderson
1 sibling, 0 replies; 11+ messages in thread
From: neil.armstrong @ 2026-07-20 12:38 UTC (permalink / raw)
To: Michail Tatas, michael, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel
On 7/19/26 21:03, Michail Tatas wrote:
> Convert functions mipi_dsi_* to mipi_dsi_*_multi as per the
> gpu/todo file.
> The multi variant of these functions include improved error
> handling.
>
> Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 51 +++++---------------
> 1 file changed, 13 insertions(+), 38 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> index e6c483851f1f..7e9587afebbe 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> @@ -159,36 +159,23 @@ static int ili9805_power_off(struct ili9805 *ctx)
>
> static int ili9805_activate(struct ili9805 *ctx)
> {
> - struct mipi_dsi_device *dsi = ctx->dsi;
> - struct device *dev = &dsi->dev;
> - int i, ret;
> + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
> + int i;
>
> for (i = 0; i < ctx->desc->init_length; i++) {
> const struct ili9805_instr *instr = &ctx->desc->init[i];
>
> - ret = mipi_dsi_dcs_write_buffer(ctx->dsi, instr->data, instr->len);
> - if (ret < 0)
> - return ret;
> + mipi_dsi_dcs_write_buffer_multi(&dsi_ctx, instr->data, instr->len);
>
> if (instr->delay > 0)
> - msleep(instr->delay);
> - }
> -
> - ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
> - if (ret) {
> - dev_err(dev, "Failed to exit sleep mode (%d)\n", ret);
> - return ret;
> + mipi_dsi_msleep(&dsi_ctx, instr->delay);
> }
>
> - usleep_range(5000, 6000);
> + mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
> + mipi_dsi_usleep_range(&dsi_ctx, 5000, 6000);
> + mipi_dsi_dcs_set_display_on_multi(&dsi_ctx);
>
> - ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
> - if (ret) {
> - dev_err(dev, "Failed to set display ON (%d)\n", ret);
> - return ret;
> - }
> -
> - return 0;
> + return dsi_ctx.accum_err;
> }
>
> static int ili9805_prepare(struct drm_panel *panel)
> @@ -211,25 +198,13 @@ static int ili9805_prepare(struct drm_panel *panel)
>
> static int ili9805_deactivate(struct ili9805 *ctx)
> {
> - struct mipi_dsi_device *dsi = ctx->dsi;
> - struct device *dev = &dsi->dev;
> - int ret;
> -
> - ret = mipi_dsi_dcs_set_display_off(ctx->dsi);
> - if (ret < 0) {
> - dev_err(dev, "Failed to set display OFF (%d)\n", ret);
> - return ret;
> - }
> + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
>
> - usleep_range(5000, 10000);
> -
> - ret = mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
> - if (ret < 0) {
> - dev_err(dev, "Failed to enter sleep mode (%d)\n", ret);
> - return ret;
> - }
> + mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
> + mipi_dsi_usleep_range(&dsi_ctx, 5000, 10000);
> + mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
>
> - return 0;
> + return dsi_ctx.accum_err;
> }
>
> static int ili9805_unprepare(struct drm_panel *panel)
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init
2026-07-19 19:03 ` [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init Michail Tatas
@ 2026-07-20 12:39 ` neil.armstrong
2026-07-20 20:08 ` Doug Anderson
1 sibling, 0 replies; 11+ messages in thread
From: neil.armstrong @ 2026-07-20 12:39 UTC (permalink / raw)
To: Michail Tatas, michael, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel
On 7/19/26 21:03, Michail Tatas wrote:
> Drop the struct ili9805_instr and the init table
> and use init functions.
>
> Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 156 +++++++++----------
> 1 file changed, 73 insertions(+), 83 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> index 7e9587afebbe..a70b9512746a 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> @@ -25,22 +25,9 @@
> #define ILI9805_SETEXTC_PARAMETER2 (0x98)
> #define ILI9805_SETEXTC_PARAMETER3 (0x05)
>
> -#define ILI9805_INSTR(_delay, ...) { \
> - .delay = (_delay), \
> - .len = sizeof((u8[]) {__VA_ARGS__}), \
> - .data = (u8[]){__VA_ARGS__} \
> - }
> -
> -struct ili9805_instr {
> - size_t len;
> - const u8 *data;
> - u32 delay;
> -};
> -
> struct ili9805_desc {
> const char *name;
> - const struct ili9805_instr *init;
> - const size_t init_length;
> + void (*init)(struct mipi_dsi_multi_context *ctx);
> const struct drm_display_mode *mode;
> u32 width_mm;
> u32 height_mm;
> @@ -56,65 +43,78 @@ struct ili9805 {
> struct gpio_desc *reset_gpio;
> };
>
> -static const struct ili9805_instr gpm1780a0_init[] = {
> - ILI9805_INSTR(100, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> - ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3),
> - ILI9805_INSTR(100, 0xFD, 0x0F, 0x10, 0x44, 0x00),
> - ILI9805_INSTR(0, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
> - 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00),
> - ILI9805_INSTR(0, 0xB8, 0x62),
> - ILI9805_INSTR(0, 0xF1, 0x00),
> - ILI9805_INSTR(0, 0xF2, 0x00, 0x58, 0x40),
> - ILI9805_INSTR(0, 0xF3, 0x60, 0x83, 0x04),
> - ILI9805_INSTR(0, 0xFC, 0x04, 0x0F, 0x01),
> - ILI9805_INSTR(0, 0xEB, 0x08, 0x0F),
> - ILI9805_INSTR(0, 0xe0, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
> - 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a),
> - ILI9805_INSTR(0, 0xe1, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
> - 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a),
> - ILI9805_INSTR(10, 0xc1, 0x13, 0x39, 0x19, 0x06),
> - ILI9805_INSTR(10, 0xc7, 0xe5),
> - ILI9805_INSTR(10, 0xB1, 0x00, 0x12, 0x14),
> - ILI9805_INSTR(10, 0xB4, 0x02),
> - ILI9805_INSTR(0, 0xBB, 0x14, 0x55),
> - ILI9805_INSTR(0, MIPI_DCS_SET_ADDRESS_MODE, 0x08),
> - ILI9805_INSTR(0, MIPI_DCS_SET_PIXEL_FORMAT, 0x77),
> - ILI9805_INSTR(0, 0x20),
> - ILI9805_INSTR(0, 0xB0, 0x01),
> - ILI9805_INSTR(0, 0xB6, 0x31, 0x00, 0xef),
> - ILI9805_INSTR(0, 0xDF, 0x23),
> - ILI9805_INSTR(0, 0xB9, 0x02, 0x00),
> -};
> +static void gpm1780a0_init(struct mipi_dsi_multi_context *ctx)
> +{
> + mipi_dsi_dcs_write_seq_multi(ctx, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> + ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3);
> + mipi_dsi_msleep(ctx, 100);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xFD, 0x0F, 0x10, 0x44, 0x00);
> + mipi_dsi_msleep(ctx, 100);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
> + 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB8, 0x62);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xF1, 0x00);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xF2, 0x00, 0x58, 0x40);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xF3, 0x60, 0x83, 0x04);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xFC, 0x04, 0x0F, 0x01);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xEB, 0x08, 0x0F);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xe0, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
> + 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xe1, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
> + 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xc1, 0x13, 0x39, 0x19, 0x06);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xc7, 0xe5);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB1, 0x00, 0x12, 0x14);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB4, 0x02);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xBB, 0x14, 0x55);
> + mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_ADDRESS_MODE, 0x08);
> + mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_PIXEL_FORMAT, 0x77);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0x20);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB0, 0x01);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB6, 0x31, 0x00, 0xef);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xDF, 0x23);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB9, 0x02, 0x00);
> +}
>
> -static const struct ili9805_instr tm041xdhg01_init[] = {
> - ILI9805_INSTR(100, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> - ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3),
> - ILI9805_INSTR(100, 0xFD, 0x0F, 0x13, 0x44, 0x00),
> - ILI9805_INSTR(0, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x01,
> - 0x01, 0x30, 0x01, 0x01, 0x30, 0x01, 0x01),
> - ILI9805_INSTR(0, 0xB8, 0x74),
> - ILI9805_INSTR(0, 0xF1, 0x00),
> - ILI9805_INSTR(0, 0xF2, 0x00, 0x58, 0x40),
> - ILI9805_INSTR(0, 0xFC, 0x04, 0x0F, 0x01),
> - ILI9805_INSTR(0, 0xEB, 0x08, 0x0F),
> - ILI9805_INSTR(0, 0xe0, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
> - 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08),
> - ILI9805_INSTR(0, 0xe1, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
> - 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08),
> - ILI9805_INSTR(10, 0xc1, 0x15, 0x03, 0x03, 0x31),
> - ILI9805_INSTR(10, 0xB1, 0x00, 0x12, 0x14),
> - ILI9805_INSTR(10, 0xB4, 0x02),
> - ILI9805_INSTR(0, 0xBB, 0x14, 0x55),
> - ILI9805_INSTR(0, MIPI_DCS_SET_ADDRESS_MODE, 0x0a),
> - ILI9805_INSTR(0, MIPI_DCS_SET_PIXEL_FORMAT, 0x77),
> - ILI9805_INSTR(0, 0x20),
> - ILI9805_INSTR(0, 0xB0, 0x00),
> - ILI9805_INSTR(0, 0xB6, 0x01),
> - ILI9805_INSTR(0, 0xc2, 0x11),
> - ILI9805_INSTR(0, 0x51, 0xFF),
> - ILI9805_INSTR(0, 0x53, 0x24),
> - ILI9805_INSTR(0, 0x55, 0x00),
> -};
> +static void tm041xdhg01_init(struct mipi_dsi_multi_context *ctx)
> +{
> + mipi_dsi_dcs_write_seq_multi(ctx, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> + ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3);
> + mipi_dsi_msleep(ctx, 100);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xFD, 0x0F, 0x13, 0x44, 0x00);
> + mipi_dsi_msleep(ctx, 100);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x01,
> + 0x01, 0x30, 0x01, 0x01, 0x30, 0x01, 0x01);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB8, 0x74);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xF1, 0x00);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xF2, 0x00, 0x58, 0x40);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xFC, 0x04, 0x0F, 0x01);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xEB, 0x08, 0x0F);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xe0, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
> + 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xe1, 0x01, 0x0d, 0x15, 0x0e, 0x0f, 0x0f, 0x0b, 0x08, 0x04,
> + 0x07, 0x0a, 0x0d, 0x0c, 0x15, 0x0f, 0x08);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xc1, 0x15, 0x03, 0x03, 0x31);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB1, 0x00, 0x12, 0x14);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB4, 0x02);
> + mipi_dsi_msleep(ctx, 10);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xBB, 0x14, 0x55);
> + mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_ADDRESS_MODE, 0x0a);
> + mipi_dsi_dcs_write_seq_multi(ctx, MIPI_DCS_SET_PIXEL_FORMAT, 0x77);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0x20);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB0, 0x00);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xB6, 0x01);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xc2, 0x11);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0x51, 0xFF);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0x53, 0x24);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0x55, 0x00);
> +}
>
> static inline struct ili9805 *panel_to_ili9805(struct drm_panel *panel)
> {
> @@ -160,16 +160,8 @@ static int ili9805_power_off(struct ili9805 *ctx)
> static int ili9805_activate(struct ili9805 *ctx)
> {
> struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
> - int i;
>
> - for (i = 0; i < ctx->desc->init_length; i++) {
> - const struct ili9805_instr *instr = &ctx->desc->init[i];
> -
> - mipi_dsi_dcs_write_buffer_multi(&dsi_ctx, instr->data, instr->len);
> -
> - if (instr->delay > 0)
> - mipi_dsi_msleep(&dsi_ctx, instr->delay);
> - }
> + ctx->desc->init(&dsi_ctx);
>
> mipi_dsi_dcs_exit_sleep_mode_multi(&dsi_ctx);
> mipi_dsi_usleep_range(&dsi_ctx, 5000, 6000);
> @@ -343,7 +335,6 @@ static void ili9805_dsi_remove(struct mipi_dsi_device *dsi)
>
> static const struct ili9805_desc gpm1780a0_desc = {
> .init = gpm1780a0_init,
> - .init_length = ARRAY_SIZE(gpm1780a0_init),
> .mode = &gpm1780a0_timing,
> .width_mm = 65,
> .height_mm = 65,
> @@ -351,7 +342,6 @@ static const struct ili9805_desc gpm1780a0_desc = {
>
> static const struct ili9805_desc tm041xdhg01_desc = {
> .init = tm041xdhg01_init,
> - .init_length = ARRAY_SIZE(tm041xdhg01_init),
> .mode = &tm041xdhg01_timing,
> .width_mm = 42,
> .height_mm = 96,
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void
2026-07-19 19:03 ` [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void Michail Tatas
@ 2026-07-20 12:40 ` neil.armstrong
2026-07-20 20:08 ` Doug Anderson
1 sibling, 0 replies; 11+ messages in thread
From: neil.armstrong @ 2026-07-20 12:40 UTC (permalink / raw)
To: Michail Tatas, michael, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dianders
Cc: dri-devel, linux-kernel
On 7/19/26 21:03, Michail Tatas wrote:
> Make cleanup functions return void since no one is checking
> their return values
>
> Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> index a70b9512746a..64cfaf981e9f 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> @@ -148,13 +148,11 @@ static int ili9805_power_on(struct ili9805 *ctx)
> return 0;
> }
>
> -static int ili9805_power_off(struct ili9805 *ctx)
> +static void ili9805_power_off(struct ili9805 *ctx)
> {
> gpiod_set_value(ctx->reset_gpio, 0);
> regulator_disable(ctx->dvdd);
> regulator_disable(ctx->avdd);
> -
> - return 0;
> }
>
> static int ili9805_activate(struct ili9805 *ctx)
> @@ -188,15 +186,13 @@ static int ili9805_prepare(struct drm_panel *panel)
> return 0;
> }
>
> -static int ili9805_deactivate(struct ili9805 *ctx)
> +static void ili9805_deactivate(struct ili9805 *ctx)
> {
> struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi };
>
> mipi_dsi_dcs_set_display_off_multi(&dsi_ctx);
> mipi_dsi_usleep_range(&dsi_ctx, 5000, 10000);
> mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx);
> -
> - return dsi_ctx.accum_err;
> }
>
> static int ili9805_unprepare(struct drm_panel *panel)
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants
2026-07-19 19:03 ` [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants Michail Tatas
2026-07-20 12:38 ` neil.armstrong
@ 2026-07-20 20:07 ` Doug Anderson
1 sibling, 0 replies; 11+ messages in thread
From: Doug Anderson @ 2026-07-20 20:07 UTC (permalink / raw)
To: Michail Tatas
Cc: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dri-devel, linux-kernel
Hi,
On Sun, Jul 19, 2026 at 12:04 PM Michail Tatas <michail.tatas@gmail.com> wrote:
>
> Convert functions mipi_dsi_* to mipi_dsi_*_multi as per the
> gpu/todo file.
> The multi variant of these functions include improved error
> handling.
>
> Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 51 +++++---------------
> 1 file changed, 13 insertions(+), 38 deletions(-)
Reviewed-by: Douglas Anderson <dianders@chromium.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init
2026-07-19 19:03 ` [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init Michail Tatas
2026-07-20 12:39 ` neil.armstrong
@ 2026-07-20 20:08 ` Doug Anderson
2026-07-21 17:32 ` Michail Tatas
1 sibling, 1 reply; 11+ messages in thread
From: Doug Anderson @ 2026-07-20 20:08 UTC (permalink / raw)
To: Michail Tatas
Cc: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dri-devel, linux-kernel
Hi,
On Sun, Jul 19, 2026 at 12:04 PM Michail Tatas <michail.tatas@gmail.com> wrote:
>
> Drop the struct ili9805_instr and the init table
> and use init functions.
>
> Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 156 +++++++++----------
> 1 file changed, 73 insertions(+), 83 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> index 7e9587afebbe..a70b9512746a 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9805.c
> @@ -25,22 +25,9 @@
> #define ILI9805_SETEXTC_PARAMETER2 (0x98)
> #define ILI9805_SETEXTC_PARAMETER3 (0x05)
>
> -#define ILI9805_INSTR(_delay, ...) { \
> - .delay = (_delay), \
> - .len = sizeof((u8[]) {__VA_ARGS__}), \
> - .data = (u8[]){__VA_ARGS__} \
> - }
> -
> -struct ili9805_instr {
> - size_t len;
> - const u8 *data;
> - u32 delay;
> -};
> -
> struct ili9805_desc {
> const char *name;
> - const struct ili9805_instr *init;
> - const size_t init_length;
> + void (*init)(struct mipi_dsi_multi_context *ctx);
> const struct drm_display_mode *mode;
> u32 width_mm;
> u32 height_mm;
> @@ -56,65 +43,78 @@ struct ili9805 {
> struct gpio_desc *reset_gpio;
> };
>
> -static const struct ili9805_instr gpm1780a0_init[] = {
> - ILI9805_INSTR(100, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> - ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3),
> - ILI9805_INSTR(100, 0xFD, 0x0F, 0x10, 0x44, 0x00),
> - ILI9805_INSTR(0, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
> - 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00),
> - ILI9805_INSTR(0, 0xB8, 0x62),
> - ILI9805_INSTR(0, 0xF1, 0x00),
> - ILI9805_INSTR(0, 0xF2, 0x00, 0x58, 0x40),
> - ILI9805_INSTR(0, 0xF3, 0x60, 0x83, 0x04),
> - ILI9805_INSTR(0, 0xFC, 0x04, 0x0F, 0x01),
> - ILI9805_INSTR(0, 0xEB, 0x08, 0x0F),
> - ILI9805_INSTR(0, 0xe0, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
> - 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a),
> - ILI9805_INSTR(0, 0xe1, 0x00, 0x08, 0x0d, 0x0e, 0x0e, 0x0d, 0x0a, 0x08, 0x04,
> - 0x08, 0x0d, 0x0f, 0x0b, 0x1c, 0x14, 0x0a),
> - ILI9805_INSTR(10, 0xc1, 0x13, 0x39, 0x19, 0x06),
> - ILI9805_INSTR(10, 0xc7, 0xe5),
> - ILI9805_INSTR(10, 0xB1, 0x00, 0x12, 0x14),
> - ILI9805_INSTR(10, 0xB4, 0x02),
> - ILI9805_INSTR(0, 0xBB, 0x14, 0x55),
> - ILI9805_INSTR(0, MIPI_DCS_SET_ADDRESS_MODE, 0x08),
> - ILI9805_INSTR(0, MIPI_DCS_SET_PIXEL_FORMAT, 0x77),
> - ILI9805_INSTR(0, 0x20),
> - ILI9805_INSTR(0, 0xB0, 0x01),
> - ILI9805_INSTR(0, 0xB6, 0x31, 0x00, 0xef),
> - ILI9805_INSTR(0, 0xDF, 0x23),
> - ILI9805_INSTR(0, 0xB9, 0x02, 0x00),
> -};
> +static void gpm1780a0_init(struct mipi_dsi_multi_context *ctx)
> +{
> + mipi_dsi_dcs_write_seq_multi(ctx, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> + ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3);
nit: the indentation of the 2nd line of your two-line
mipi_dsi_dcs_write_seq_multi() seems off. checkpatch.sh --strict
yells:
CHECK: Alignment should match open parenthesis
Strict mode also yells about a few lines that are over 100 characters.
I'm not quite as picky about that, but it would be nic eto fix too...
> + mipi_dsi_msleep(ctx, 100);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xFD, 0x0F, 0x10, 0x44, 0x00);
> + mipi_dsi_msleep(ctx, 100);
> + mipi_dsi_dcs_write_seq_multi(ctx, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
> + 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00);
Since you're touching these lines anyway, can you also fix these
functions to consistently use lower case hex instead of (mostly)
uppercase hex? AKA 0xfd rather than 0xFD.
Other than above nits, this looks great to me.
Reviewed-by: Douglas Anderson <dianders@chromium.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void
2026-07-19 19:03 ` [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void Michail Tatas
2026-07-20 12:40 ` neil.armstrong
@ 2026-07-20 20:08 ` Doug Anderson
1 sibling, 0 replies; 11+ messages in thread
From: Doug Anderson @ 2026-07-20 20:08 UTC (permalink / raw)
To: Michail Tatas
Cc: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dri-devel, linux-kernel
Hi,
On Sun, Jul 19, 2026 at 12:04 PM Michail Tatas <michail.tatas@gmail.com> wrote:
>
> Make cleanup functions return void since no one is checking
> their return values
>
> Signed-off-by: Michail Tatas <michail.tatas@gmail.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9805.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
Reviewed-by: Douglas Anderson <dianders@chromium.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init
2026-07-20 20:08 ` Doug Anderson
@ 2026-07-21 17:32 ` Michail Tatas
0 siblings, 0 replies; 11+ messages in thread
From: Michail Tatas @ 2026-07-21 17:32 UTC (permalink / raw)
To: Doug Anderson
Cc: michael, neil.armstrong, jesszhan0024, maarten.lankhorst, mripard,
tzimmermann, airlied, simona, dri-devel, linux-kernel
Hello,
Thanks a lot for the review Neil and Doug, I appreciate the feedback
> > +static void gpm1780a0_init(struct mipi_dsi_multi_context *ctx)
> > +{
> > + mipi_dsi_dcs_write_seq_multi(ctx, ILI9805_EXTCMD_CMD_SET_ENABLE_REG, ILI9805_SETEXTC_PARAMETER1,
> > + ILI9805_SETEXTC_PARAMETER2, ILI9805_SETEXTC_PARAMETER3);
>
> nit: the indentation of the 2nd line of your two-line
> mipi_dsi_dcs_write_seq_multi() seems off. checkpatch.sh --strict
> yells:
>
> CHECK: Alignment should match open parenthesis
>
> Strict mode also yells about a few lines that are over 100 characters.
> I'm not quite as picky about that, but it would be nic eto fix too...
>
> > + mipi_dsi_msleep(ctx, 100);
> > + mipi_dsi_dcs_write_seq_multi(ctx, 0xFD, 0x0F, 0x10, 0x44, 0x00);
> > + mipi_dsi_msleep(ctx, 100);
> > + mipi_dsi_dcs_write_seq_multi(ctx, 0xf8, 0x18, 0x02, 0x02, 0x18, 0x02, 0x02, 0x30, 0x00,
> > + 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00);
>
> Since you're touching these lines anyway, can you also fix these
> functions to consistently use lower case hex instead of (mostly)
> uppercase hex? AKA 0xfd rather than 0xFD.
>
>
> Other than above nits, this looks great to me.
I have sent a new version with these changes
Regards,
Michail
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-07-21 17:32 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-19 19:03 [PATCH v2 0/3] drm/panel: ilitek-ili9805: convert to *_multi API Michail Tatas
2026-07-19 19:03 ` [PATCH v2 1/3] drm/panel: ilitek-ili9805: Use _multi variants Michail Tatas
2026-07-20 12:38 ` neil.armstrong
2026-07-20 20:07 ` Doug Anderson
2026-07-19 19:03 ` [PATCH v2 2/3] drm/panel: ilitek-ili9805: Use dsi_multi in init Michail Tatas
2026-07-20 12:39 ` neil.armstrong
2026-07-20 20:08 ` Doug Anderson
2026-07-21 17:32 ` Michail Tatas
2026-07-19 19:03 ` [PATCH v2 3/3] drm/panel: ilitek-ili9805: make cleanup funcs void Michail Tatas
2026-07-20 12:40 ` neil.armstrong
2026-07-20 20:08 ` Doug Anderson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.