|
@@ -609,10 +609,10 @@ static int dw_mipi_dsi_dcs_short_write(struct dw_mipi_dsi *dsi,
|
|
|
static int dw_mipi_dsi_dcs_long_write(struct dw_mipi_dsi *dsi,
|
|
|
const struct mipi_dsi_msg *msg)
|
|
|
{
|
|
|
- const u32 *tx_buf = msg->tx_buf;
|
|
|
- int len = msg->tx_len, pld_data_bytes = sizeof(*tx_buf), ret;
|
|
|
+ const u8 *tx_buf = msg->tx_buf;
|
|
|
+ int len = msg->tx_len, pld_data_bytes = sizeof(u32), ret;
|
|
|
u32 hdr_val = GEN_HDATA(msg->tx_len) | GEN_HTYPE(msg->type);
|
|
|
- u32 remainder = 0;
|
|
|
+ u32 remainder;
|
|
|
u32 val;
|
|
|
|
|
|
if (msg->tx_len < 3) {
|
|
@@ -623,12 +623,14 @@ static int dw_mipi_dsi_dcs_long_write(struct dw_mipi_dsi *dsi,
|
|
|
|
|
|
while (DIV_ROUND_UP(len, pld_data_bytes)) {
|
|
|
if (len < pld_data_bytes) {
|
|
|
+ remainder = 0;
|
|
|
memcpy(&remainder, tx_buf, len);
|
|
|
dsi_write(dsi, DSI_GEN_PLD_DATA, remainder);
|
|
|
len = 0;
|
|
|
} else {
|
|
|
- dsi_write(dsi, DSI_GEN_PLD_DATA, *tx_buf);
|
|
|
- tx_buf++;
|
|
|
+ memcpy(&remainder, tx_buf, pld_data_bytes);
|
|
|
+ dsi_write(dsi, DSI_GEN_PLD_DATA, remainder);
|
|
|
+ tx_buf += pld_data_bytes;
|
|
|
len -= pld_data_bytes;
|
|
|
}
|
|
|
|