static int mipi_dsi_dcs_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return -EINVAL; } mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_BTA; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_READ); if (cm->last) *hp |= DSI_HDR_LAST; *hp |= DSI_HDR_DATA1(cm->payload[0]); /* dcs command byte */ *hp |= DSI_HDR_DATA2(0); mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
/* * mipi dsi dcs short write with 1 parameters */ static int mipi_dsi_dcs_swrite1(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; if (cm->dlen < 2 || cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return -EINVAL; } mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); if (cm->ack) /* ask ACK trigger msg from peripeheral */ *hp |= DSI_HDR_BTA; if (cm->last) *hp |= DSI_HDR_LAST; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_WRITE1); *hp |= DSI_HDR_DATA1(cm->payload[0]); /* dcs comamnd byte */ *hp |= DSI_HDR_DATA2(cm->payload[1]); /* parameter */ mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }
/* * mipi dsi dcs short write with 0 parameters */ static int mipi_dsi_dcs_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; int len; if (cm->payload == 0) { PR_DISP_ERR("%s: NO payload error\n", __func__); return -EINVAL; } mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); if (cm->ack) /* ask ACK trigger msg from peripeheral */ *hp |= DSI_HDR_BTA; if (cm->last) *hp |= DSI_HDR_LAST; len = (cm->dlen > 1) ? 1 : cm->dlen; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_WRITE); *hp |= DSI_HDR_DATA1(cm->payload[0]); /* dcs command byte */ *hp |= DSI_HDR_DATA2(0); mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }
static int mipi_dsi_hsync_start(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_DTYPE(DTYPE_HSYNC_START); if (cm->last) *hp |= DSI_HDR_LAST; mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
static int mipi_dsi_peripheral_off(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_DTYPE(DTYPE_PERIPHERAL_OFF); if (cm->last) *hp |= DSI_HDR_LAST; mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
static int mipi_dsi_blank_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; mipi_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; mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
/* * mipi dsi dcs long write */ static int mipi_dsi_dcs_lwrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { char *bp; uint32 *hp; int i, len; bp = mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); /* * fill up payload * dcs command byte (first byte) followed by payload */ if (cm->payload) { len = cm->dlen; len += 3; len &= ~0x03; /* multipled by 4 */ for (i = 0; i < cm->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(cm->dlen); *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_LONG_PKT; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_LWRITE); if (cm->last) *hp |= DSI_HDR_LAST; mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }
/* * mipi dsi gerneric short write with 0, 1 2 parameters */ static int mipi_dsi_generic_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; int len; if (cm->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); if (cm->last) *hp |= DSI_HDR_LAST; len = (cm->dlen > 2) ? 2 : cm->dlen; if (len == 1) { *hp |= DSI_HDR_DTYPE(DTYPE_GEN_WRITE1); *hp |= DSI_HDR_DATA1(cm->payload[0]); *hp |= DSI_HDR_DATA2(0); } else if (len == 2) { *hp |= DSI_HDR_DTYPE(DTYPE_GEN_WRITE2); *hp |= DSI_HDR_DATA1(cm->payload[0]); *hp |= DSI_HDR_DATA2(cm->payload[1]); } else { *hp |= DSI_HDR_DTYPE(DTYPE_GEN_WRITE); *hp |= DSI_HDR_DATA1(0); *hp |= DSI_HDR_DATA2(0); } mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
static int mipi_dsi_set_max_pktsize(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } mipi_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_DTYPE(DTYPE_MAX_PKTSIZE); if (cm->last) *hp |= DSI_HDR_LAST; *hp |= DSI_HDR_DATA1(cm->payload[0]); *hp |= DSI_HDR_DATA2(cm->payload[1]); mipi_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }