Commit d9f9565c authored by Philippe CORNU's avatar Philippe CORNU Committed by Thierry Reding

drm/panel: otm8009a: Fix backlight updates

Backlight updates was not working anymore since the good implementation
of the DSI low-power mode in the DSI host driver. After a longer
analysis, the backlight updates in DSI video mode require the DSI high-
speed mode.

Note: it is important to keep the DSI low-power mode for the rest of the
driver as init sequence, sleep in/out... DSI commands work in low-power
mode.
Signed-off-by: default avatarPhilippe Cornu <philippe.cornu@st.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180423141054.13128-2-philippe.cornu@st.com
parent 0c08754b
...@@ -98,6 +98,20 @@ static void otm8009a_dcs_write_buf(struct otm8009a *ctx, const void *data, ...@@ -98,6 +98,20 @@ static void otm8009a_dcs_write_buf(struct otm8009a *ctx, const void *data,
DRM_WARN("mipi dsi dcs write buffer failed\n"); DRM_WARN("mipi dsi dcs write buffer failed\n");
} }
static void otm8009a_dcs_write_buf_hs(struct otm8009a *ctx, const void *data,
size_t len)
{
struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
/* data will be sent in dsi hs mode (ie. no lpm) */
dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
otm8009a_dcs_write_buf(ctx, data, len);
/* restore back the dsi lpm mode */
dsi->mode_flags |= MIPI_DSI_MODE_LPM;
}
#define dcs_write_seq(ctx, seq...) \ #define dcs_write_seq(ctx, seq...) \
({ \ ({ \
static const u8 d[] = { seq }; \ static const u8 d[] = { seq }; \
...@@ -387,7 +401,7 @@ static int otm8009a_backlight_update_status(struct backlight_device *bd) ...@@ -387,7 +401,7 @@ static int otm8009a_backlight_update_status(struct backlight_device *bd)
*/ */
data[0] = MIPI_DCS_SET_DISPLAY_BRIGHTNESS; data[0] = MIPI_DCS_SET_DISPLAY_BRIGHTNESS;
data[1] = bd->props.brightness; data[1] = bd->props.brightness;
otm8009a_dcs_write_buf(ctx, data, ARRAY_SIZE(data)); otm8009a_dcs_write_buf_hs(ctx, data, ARRAY_SIZE(data));
/* set Brightness Control & Backlight on */ /* set Brightness Control & Backlight on */
data[1] = 0x24; data[1] = 0x24;
...@@ -399,7 +413,7 @@ static int otm8009a_backlight_update_status(struct backlight_device *bd) ...@@ -399,7 +413,7 @@ static int otm8009a_backlight_update_status(struct backlight_device *bd)
/* Update Brightness Control & Backlight */ /* Update Brightness Control & Backlight */
data[0] = MIPI_DCS_WRITE_CONTROL_DISPLAY; data[0] = MIPI_DCS_WRITE_CONTROL_DISPLAY;
otm8009a_dcs_write_buf(ctx, data, ARRAY_SIZE(data)); otm8009a_dcs_write_buf_hs(ctx, data, ARRAY_SIZE(data));
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment