/* * mipi dsi short write with 0, 1 2 parameters * Write to GEN_HDR 24 bit register the value: * 1. 00h, MCS_command[15:8] ,VC[7:6],13h * 2. Data1[23:16], MCS_command[15:8] ,VC[7:6],23h */ int mipi_dsi_swrite(struct dsi_cmd_desc *cm) { u32 hdr = 0; int len = 0; if (cm->dlen && cm->payload == 0) { k3fb_loge("NO payload error!\n"); return 0; } len = (cm->dlen > 2) ? 2 : cm->dlen; hdr |= DSI_HDR_DTYPE(cm->dtype); hdr |= DSI_HDR_VC(cm->vc); if (len == 1) { hdr |= DSI_HDR_DATA1(cm->payload[0]); hdr |= DSI_HDR_DATA2(0); } else if (len == 2) { hdr |= DSI_HDR_DATA1(cm->payload[0]); hdr |= DSI_HDR_DATA2(cm->payload[1]); } else { hdr |= DSI_HDR_DATA1(0); hdr |= DSI_HDR_DATA2(0); } set_MIPIDSI_GEN_HDR(hdr); return len; /* 4 bytes */ }
static int mdss_dsi_set_max_pktsize(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { struct dsi_ctrl_hdr *dchdr; u32 *hp; dchdr = &cm->dchdr; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_DTYPE(DTYPE_MAX_PKTSIZE); if (dchdr->last) *hp |= DSI_HDR_LAST; *hp |= DSI_HDR_DATA1(cm->payload[0]); *hp |= DSI_HDR_DATA2(cm->payload[1]); mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return DSI_HOST_HDR_SIZE; /* 4 bytes */ }
static int mdss_dsi_dcs_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { struct dsi_ctrl_hdr *dchdr; u32 *hp; dchdr = &cm->dchdr; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return -EINVAL; } mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_BTA; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_READ); if (dchdr->last) *hp |= DSI_HDR_LAST; *hp |= DSI_HDR_DATA1(cm->payload[0]); /* dcs command byte */ *hp |= DSI_HDR_DATA2(0); mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return DSI_HOST_HDR_SIZE; /* 4 bytes */ }
/* * mipi dsi dcs short write with 1 parameters */ static int mdss_dsi_dcs_swrite1(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { struct dsi_ctrl_hdr *dchdr; u32 *hp; dchdr = &cm->dchdr; if (dchdr->dlen < 2 || cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return -EINVAL; } mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); if (dchdr->ack) /* ask ACK trigger msg from peripeheral */ *hp |= DSI_HDR_BTA; if (dchdr->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 */ mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return DSI_HOST_HDR_SIZE; /* 4 bytes */ }
/* * mipi dsi dcs short write with 0 parameters */ static int mdss_dsi_dcs_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return -EINVAL; } mdss_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); mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }
static int mipi_dsi_dcs_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { uint32 *hp; 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); *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_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; *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 1 parameters */ static int dsi_dcs_swrite1(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (dchdr->dlen < 2 || cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return -EINVAL; } dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); if (dchdr->ack) *hp |= DSI_HDR_BTA; if (dchdr->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 */ dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }
/* * mipi dsi generic short write with 0, 1 2 parameters */ static int mdss_dsi_generic_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { struct dsi_ctrl_hdr *dchdr; u32 *hp; int len; dchdr = &cm->dchdr; if (dchdr->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); if (dchdr->last) *hp |= DSI_HDR_LAST; len = (dchdr->dlen > 2) ? 2 : dchdr->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); } mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ }
/* * mipi dsi gerneric read with 0, 1 2 parameters */ static int mdss_dsi_generic_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; if (cm->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(cm->vc); *hp |= DSI_HDR_BTA; if (cm->last) *hp |= DSI_HDR_LAST; len = (cm->dlen > 2) ? 2 : cm->dlen; if (len == 1) { *hp |= DSI_HDR_DTYPE(DTYPE_GEN_READ1); *hp |= DSI_HDR_DATA1(cm->payload[0]); *hp |= DSI_HDR_DATA2(0); } else if (len == 2) { *hp |= DSI_HDR_DTYPE(DTYPE_GEN_READ2); *hp |= DSI_HDR_DATA1(cm->payload[0]); *hp |= DSI_HDR_DATA2(cm->payload[1]); } else { *hp |= DSI_HDR_DTYPE(DTYPE_GEN_READ); *hp |= DSI_HDR_DATA1(0); *hp |= DSI_HDR_DATA2(0); } mdss_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_DISP_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 */ }