/* * 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 */ }
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 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 mdss_dsi_peripheral_off(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_VC(cm->vc); *hp |= DSI_HDR_DTYPE(DTYPE_PERIPHERAL_OFF); 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_cm_on(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_VC(cm->vc); *hp |= DSI_HDR_DTYPE(DTYPE_CM_ON); 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_peripheral_on(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_VC(dchdr->vc); *hp |= DSI_HDR_DTYPE(DTYPE_PERIPHERAL_ON); if (dchdr->last) *hp |= DSI_HDR_LAST; mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return DSI_HOST_HDR_SIZE; /* 4 bytes */ }
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_cm_off(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_VC(dchdr->vc); *hp |= DSI_HDR_DTYPE(DTYPE_CM_OFF); if (dchdr->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 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 */ }
/* * mipi dsi generic long write */ static int mdss_dsi_generic_lwrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { char *bp; u32 *hp; int i, len; bp = mdss_dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); /* fill up 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_GEN_LWRITE); if (cm->last) *hp |= DSI_HDR_LAST; mdss_dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; }