[PATCH 13/15] drm/dsi: Always use low-power mode for DCS commands
Andrzej Hajda
a.hajda at samsung.com
Thu Oct 16 00:00:27 PDT 2014
On 10/13/2014 12:16 PM, Thierry Reding wrote:
> From: Thierry Reding <treding at nvidia.com>
>
> Many peripherals require DCS commands to be sent in low power mode and
> will fail to correctly process them in high speed mode. Section 5.2 of
> the MIPI DSI specification also mandates that on bidirectional lanes,
> data shall be transmitted in low power mode only.
I guess you are referring to phrase:
"For bidirectional Lanes, data shall be transmitted in the
peripheral-to-processor, or reverse,
direction using Low-Power (LP) Mode only".
This phrase is not clear but I guess the part "peripheral-to-processor,
or reverse, direction"
should be read as "peripheral-to-processor (ie. reverse) direction".
Otherwise we would end up
with insane restriction.
> At worst this change
> will make transmission of DCS commands slower than optimal on some DSI
> peripherals, but it should enable DCS commands to be successfully
> transmitted to any DSI peripheral.
I can imagine necessity of sending DCS/MCS commands in blank periods of
video mode. In such case
speed matters and in corner cases it will not be even possible to
transmit message in LP mode.
>
> If transmission in low power mode turns out to be too slow at some point
> in the future, one possible solution would be to explicitly mark devices
> that support high speed transmission of DCS commands.
We have MIPI_DSI_MODE_LPM flag in dsi.mode_flags it should be enough,
DCS helper should just check it.
Regards
Andrzej
>
> Signed-off-by: Thierry Reding <treding at nvidia.com>
> ---
> drivers/gpu/drm/drm_mipi_dsi.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
> index d4d3cf752be7..a0b9c7ea77a7 100644
> --- a/drivers/gpu/drm/drm_mipi_dsi.c
> +++ b/drivers/gpu/drm/drm_mipi_dsi.c
> @@ -370,6 +370,7 @@ ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi,
> {
> struct mipi_dsi_msg msg = {
> .channel = dsi->channel,
> + .flags = MIPI_DSI_MSG_USE_LPM,
> .tx_buf = data,
> .tx_len = len
> };
> @@ -457,6 +458,7 @@ ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd,
> }
>
> memset(&msg, 0, sizeof(msg));
> + msg.flags = MIPI_DSI_MSG_USE_LPM;
> msg.channel = dsi->channel;
> msg.tx_len = size;
> msg.tx_buf = tx;
> @@ -500,6 +502,7 @@ ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data,
> struct mipi_dsi_msg msg = {
> .channel = dsi->channel,
> .type = MIPI_DSI_DCS_READ,
> + .flags = MIPI_DSI_MSG_USE_LPM,
> .tx_buf = &cmd,
> .tx_len = 1,
> .rx_buf = data,
More information about the dri-devel
mailing list