ret = readl_poll_timeout(adp->mipi + DSI_CMD_PKT_STATUS,
val, !(val & GEN_CMD_FULL), 1000,
CMD_PKT_STATUS_TIMEOUT_US); if (ret) {
dev_err(adp->dsi.dev, "failed to get available command FIFO\n"); return ret;
}
writel(hdr_val, adp->mipi + DSI_GEN_HDR);
mask = GEN_CMD_EMPTY | GEN_PLD_W_EMPTY;
ret = readl_poll_timeout(adp->mipi + DSI_CMD_PKT_STATUS,
val, (val & mask) == mask,
1000, CMD_PKT_STATUS_TIMEOUT_US); if (ret) {
dev_err(adp->dsi.dev, "failed to write command FIFO\n"); return ret;
}
while (len) { if (len < pld_data_bytes) {
word = 0;
memcpy(&word, tx_buf, len);
writel(le32_to_cpu(word), adp->mipi + DSI_GEN_PLD_DATA);
len = 0;
} else {
memcpy(&word, tx_buf, pld_data_bytes);
writel(le32_to_cpu(word), adp->mipi + DSI_GEN_PLD_DATA);
tx_buf += pld_data_bytes;
len -= pld_data_bytes;
}
ret = readl_poll_timeout(adp->mipi + DSI_CMD_PKT_STATUS,
val, !(val & GEN_PLD_W_FULL), 1000,
CMD_PKT_STATUS_TIMEOUT_US); if (ret) {
dev_err(adp->dsi.dev, "failed to get available write payload FIFO\n"); return ret;
}
}
word = 0;
memcpy(&word, packet->header, sizeof(packet->header)); return adp_dsi_gen_pkt_hdr_write(adp, le32_to_cpu(word));
}
staticint adp_dsi_read(struct adp_mipi_drv_private *adp, conststruct mipi_dsi_msg *msg)
{ int i, j, ret, len = msg->rx_len;
u8 *buf = msg->rx_buf;
u32 val;
/* Wait end of the read operation */
ret = readl_poll_timeout(adp->mipi + DSI_CMD_PKT_STATUS,
val, !(val & GEN_RD_CMD_BUSY),
1000, CMD_PKT_STATUS_TIMEOUT_US); if (ret) {
dev_err(adp->dsi.dev, "Timeout during read operation\n"); return ret;
}
for (i = 0; i < len; i += 4) { /* Read fifo must not be empty before all bytes are read */
ret = readl_poll_timeout(adp->mipi + DSI_CMD_PKT_STATUS,
val, !(val & GEN_PLD_R_EMPTY),
1000, CMD_PKT_STATUS_TIMEOUT_US); if (ret) {
dev_err(adp->dsi.dev, "Read payload FIFO is empty\n"); return ret;
}
val = readl(adp->mipi + DSI_GEN_PLD_DATA); for (j = 0; j < 4 && j + i < len; j++)
buf[i + j] = val >> (8 * j);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.