void mipi_dsi_max_return_packet_size(struct dsi_cmd_desc *cm) { u32 hdr = 0; /* fill up header */ hdr |= DSI_HDR_DTYPE(cm->dtype); hdr |= DSI_HDR_VC(cm->vc); hdr |= DSI_HDR_WC(cm->dlen); set_MIPIDSI_GEN_HDR(hdr); }
static int mdss_dsi_blank_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp = DSI_HDR_WC(cm->dlen); *hp |= DSI_HDR_LONG_PKT; *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_DTYPE(DTYPE_BLANK_PKT); if (cm->last) *hp |= DSI_HDR_LAST; mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
static int mdss_dsi_null_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { struct dsi_ctrl_hdr *dchdr; u32 *hp; dchdr = &cm->dchdr; mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp = DSI_HDR_WC(dchdr->dlen); *hp |= DSI_HDR_LONG_PKT; *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_DTYPE(DTYPE_NULL_PKT); if (dchdr->last) *hp |= DSI_HDR_LAST; mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return DSI_HOST_HDR_SIZE; /* 4 bytes */ }
/* * mipi dsi dcs long write */ static int mdss_dsi_dcs_lwrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { struct dsi_ctrl_hdr *dchdr; char *bp; u32 *hp; int i, len = 0; dchdr = &cm->dchdr; bp = mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); /* * fill up payload * dcs command byte (first byte) followed by payload */ if (cm->payload) { len = dchdr->dlen; len += 3; len &= ~0x03; /* multipled by 4 */ for (i = 0; i < dchdr->dlen; i++) *bp++ = cm->payload[i]; /* append 0xff to the end */ for (; i < len; i++) *bp++ = 0xff; dp->len += len; } /* fill up header */ hp = dp->hdr; *hp = 0; *hp = DSI_HDR_WC(dchdr->dlen); *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_LONG_PKT; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_LWRITE); if (dchdr->last) *hp |= DSI_HDR_LAST; mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); len += DSI_HOST_HDR_SIZE; return len; }
/* * mipi dsi generic long write */ static int dsi_generic_lwrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { char *bp; u32 *hp; int i, len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; bp = dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); /* fill up payload */ if (cm->payload) { len = dchdr->dlen; len += 3; len &= ~0x03; /* multipled by 4 */ for (i = 0; i < dchdr->dlen; i++) *bp++ = cm->payload[i]; /* append 0xff to the end */ for (; i < len; i++) *bp++ = 0xff; dp->len += len; } /* fill up header */ hp = dp->hdr; *hp = 0; *hp = DSI_HDR_WC(dchdr->dlen); *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_LONG_PKT; *hp |= DSI_HDR_DTYPE(DTYPE_GEN_LWRITE); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }
/* * mipi dsi long write * Write to GEN_PLD_DATA 32 bit register the value: * Data3[31:24], Data2[23:16], Data1[15:8], MCS_command[7:0] * If need write again to GEN_PLD_DATA 32 bit register the value: * Data7[31:24], Data6[23:16], Data5[15:8], Data4[7:0] * * Write to GEN_HDR 24 bit register the value: WC[23:8] ,VC[7:6],29h */ int mipi_dsi_lwrite(struct dsi_cmd_desc *cm) { u32 hdr = 0; int i = 0; if (cm->dlen && cm->payload == 0) { k3fb_loge("NO payload error!\n"); return 0; } /* fill up payload */ for (i = 0; i < cm->dlen; i += 4) { set_MIPIDSI_GEN_PLD_DATA(*((u32 *)(cm->payload + i))); } /* fill up header */ hdr |= DSI_HDR_DTYPE(cm->dtype); hdr |= DSI_HDR_VC(cm->vc); hdr |= DSI_HDR_WC(cm->dlen); set_MIPIDSI_GEN_HDR(hdr); return cm->dlen; }