On 10/13/2014 12:16 PM, Thierry Reding wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > 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@xxxxxxxxxx> > --- > 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, _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel