mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-11-22 04:56:15 +00:00
538a1d740c
The patches were generated from the RPi repo with the following command: git format-patch v6.6.58..rpi-6.6.y Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
103 lines
2.9 KiB
Diff
103 lines
2.9 KiB
Diff
From d644270369cc6bf39012cce735dde6b86ad01424 Mon Sep 17 00:00:00 2001
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
Date: Wed, 18 Sep 2024 16:09:28 +0100
|
|
Subject: [PATCH 1273/1350] drm: panel: ili9881: Add option to reconfigure
|
|
setup commands
|
|
|
|
The driver is typically asking for LP commands, but then tries
|
|
to send set_display_[on|off] from enable/disable when the host
|
|
will be in HS mode.
|
|
It also sends shutdown commands just before it asserts reset and
|
|
disables the regulator, which is rather redundant.
|
|
|
|
Add an option to configure these two choices from the panel_desc.
|
|
|
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
---
|
|
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 32 ++++++++++++++++---
|
|
1 file changed, 28 insertions(+), 4 deletions(-)
|
|
|
|
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
|
|
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
|
|
@@ -40,12 +40,19 @@ struct ili9881c_instr {
|
|
} arg;
|
|
};
|
|
|
|
+enum ili9881_desc_flags {
|
|
+ ILI9881_FLAGS_NO_SHUTDOWN_CMDS = BIT(0),
|
|
+ ILI9881_FLAGS_PANEL_ON_IN_PREPARE = BIT(1),
|
|
+ ILI9881_FLAGS_MAX = BIT(31),
|
|
+};
|
|
+
|
|
struct ili9881c_desc {
|
|
const struct ili9881c_instr *init;
|
|
const size_t init_length;
|
|
const struct drm_display_mode *mode;
|
|
const unsigned long mode_flags;
|
|
unsigned int lanes;
|
|
+ enum ili9881_desc_flags flags;
|
|
};
|
|
|
|
struct ili9881c {
|
|
@@ -1727,6 +1734,12 @@ static int ili9881c_prepare(struct drm_p
|
|
if (ret)
|
|
return ret;
|
|
|
|
+ if (ctx->desc->flags & ILI9881_FLAGS_PANEL_ON_IN_PREPARE) {
|
|
+ msleep(120);
|
|
+
|
|
+ ret = mipi_dsi_dcs_set_display_on(ctx->dsi);
|
|
+ }
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
@@ -1734,9 +1747,11 @@ static int ili9881c_enable(struct drm_pa
|
|
{
|
|
struct ili9881c *ctx = panel_to_ili9881c(panel);
|
|
|
|
- msleep(120);
|
|
+ if (!(ctx->desc->flags & ILI9881_FLAGS_PANEL_ON_IN_PREPARE)) {
|
|
+ msleep(120);
|
|
|
|
- mipi_dsi_dcs_set_display_on(ctx->dsi);
|
|
+ mipi_dsi_dcs_set_display_on(ctx->dsi);
|
|
+ }
|
|
|
|
return 0;
|
|
}
|
|
@@ -1745,7 +1760,8 @@ static int ili9881c_disable(struct drm_p
|
|
{
|
|
struct ili9881c *ctx = panel_to_ili9881c(panel);
|
|
|
|
- mipi_dsi_dcs_set_display_off(ctx->dsi);
|
|
+ if (!(ctx->desc->flags & ILI9881_FLAGS_PANEL_ON_IN_PREPARE))
|
|
+ mipi_dsi_dcs_set_display_off(ctx->dsi);
|
|
|
|
return 0;
|
|
}
|
|
@@ -1754,7 +1770,13 @@ static int ili9881c_unprepare(struct drm
|
|
{
|
|
struct ili9881c *ctx = panel_to_ili9881c(panel);
|
|
|
|
- mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
|
|
+ if (!(ctx->desc->flags & ILI9881_FLAGS_NO_SHUTDOWN_CMDS)) {
|
|
+ if (ctx->desc->flags & ILI9881_FLAGS_PANEL_ON_IN_PREPARE)
|
|
+ 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);
|
|
|
|
@@ -2066,6 +2088,8 @@ static const struct ili9881c_desc rpi_7i
|
|
.mode = &rpi_7inch_default_mode,
|
|
.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM,
|
|
.lanes = 2,
|
|
+ .flags = ILI9881_FLAGS_NO_SHUTDOWN_CMDS |
|
|
+ ILI9881_FLAGS_PANEL_ON_IN_PREPARE,
|
|
};
|
|
|
|
static const struct of_device_id ili9881c_of_match[] = {
|