Loading drivers/video/msm/mdss/dsi_host_v2.c +10 −10 Original line number Diff line number Diff line Loading @@ -545,8 +545,8 @@ int msm_dsi_cmds_tx(struct mdss_panel_data *pdata, cm = cmds; for (i = 0; i < cnt; i++) { dsi_buf_init(tp); rc = dsi_cmd_dma_add(tp, cm); mdss_dsi_buf_init(tp); rc = mdss_dsi_cmd_dma_add(tp, cm); if (!rc) { pr_err("%s: dsi_cmd_dma_add fail\n", __func__); rc = -EINVAL; Loading Loading @@ -638,8 +638,8 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, /* packet size need to be set at every read */ pkt_size = len; max_pktsize[0] = pkt_size; dsi_buf_init(tp); rc = dsi_cmd_dma_add(tp, pkt_size_cmd); mdss_dsi_buf_init(tp); rc = mdss_dsi_cmd_dma_add(tp, pkt_size_cmd); if (!rc) { pr_err("%s: dsi_cmd_dma_add failed\n", __func__); rp->len = 0; Loading @@ -654,8 +654,8 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, pr_debug("%s: Max packet size sent\n", __func__); } dsi_buf_init(tp); rc = dsi_cmd_dma_add(tp, cmds); mdss_dsi_buf_init(tp); rc = mdss_dsi_cmd_dma_add(tp, cmds); if (!rc) { pr_err("%s: dsi_cmd_dma_add failed\n", __func__); rp->len = 0; Loading @@ -674,7 +674,7 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, * return data from client is ready and stored * at RDBK_DATA register already */ dsi_buf_init(rp); mdss_dsi_buf_init(rp); if (pdata->panel_info.mipi.no_max_pkt_size) { /* * expect rlen = n * 4 Loading Loading @@ -704,15 +704,15 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, break; case DTYPE_GEN_READ1_RESP: case DTYPE_DCS_READ1_RESP: dsi_short_read1_resp(rp); mdss_dsi_short_read1_resp(rp); break; case DTYPE_GEN_READ2_RESP: case DTYPE_DCS_READ2_RESP: dsi_short_read2_resp(rp); mdss_dsi_short_read2_resp(rp); break; case DTYPE_GEN_LREAD_RESP: case DTYPE_DCS_LREAD_RESP: dsi_long_read_resp(rp); mdss_dsi_long_read_resp(rp); rp->len -= 2; /* extra 2 bytes added */ rp->len -= diff; /* align bytes */ break; Loading drivers/video/msm/mdss/dsi_v2.c +0 −539 Original line number Diff line number Diff line Loading @@ -649,41 +649,6 @@ int dsi_cmds_rx_v2(struct mdss_panel_data *pdata, return rc; } static char *dsi_buf_reserve(struct dsi_buf *dp, int len) { dp->data += len; return dp->data; } static char *dsi_buf_push(struct dsi_buf *dp, int len) { dp->data -= len; dp->len += len; return dp->data; } static char *dsi_buf_reserve_hdr(struct dsi_buf *dp, int hlen) { dp->hdr = (u32 *)dp->data; return dsi_buf_reserve(dp, hlen); } char *dsi_buf_init(struct dsi_buf *dp) { int off; dp->data = dp->start; off = (int)dp->data; /* 8 byte align */ off &= 0x07; if (off) off = 8 - off; dp->data += off; dp->len = 0; return dp->data; } int dsi_buf_alloc(struct dsi_buf *dp, int size) { dp->start = kmalloc(size, GFP_KERNEL); Loading @@ -705,507 +670,3 @@ int dsi_buf_alloc(struct dsi_buf *dp, int size) return 0; } /* * 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 generic short write with 0, 1 2 parameters */ static int dsi_generic_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (dchdr->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } 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); } dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; } /* * mipi dsi gerneric read with 0, 1 2 parameters */ static int dsi_generic_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (dchdr->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_BTA; if (dchdr->last) *hp |= DSI_HDR_LAST; len = (dchdr->dlen > 2) ? 2 : dchdr->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); } dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; } /* * mipi dsi dcs long write */ static int dsi_dcs_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 * 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; } /* * mipi dsi dcs short write with 0 parameters */ static int dsi_dcs_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (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; len = (dchdr->dlen > 1) ? 1 : dchdr->dlen; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_WRITE); *hp |= DSI_HDR_DATA1(cm->payload[0]); /* dcs command byte */ *hp |= DSI_HDR_DATA2(0); 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 dcs read with 0 parameters */ static int dsi_dcs_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (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); *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); dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_cm_on(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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_ON); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_cm_off(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_peripheral_on(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_peripheral_off(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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_OFF); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_set_max_pktsize(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } 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]); dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_null_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_blank_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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_BLANK_PKT); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } /* * prepare cmd buffer to be txed */ int dsi_cmd_dma_add(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { int len = 0; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; switch (dchdr->dtype) { case DTYPE_GEN_WRITE: case DTYPE_GEN_WRITE1: case DTYPE_GEN_WRITE2: len = dsi_generic_swrite(dp, cm); break; case DTYPE_GEN_LWRITE: len = dsi_generic_lwrite(dp, cm); break; case DTYPE_GEN_READ: case DTYPE_GEN_READ1: case DTYPE_GEN_READ2: len = dsi_generic_read(dp, cm); break; case DTYPE_DCS_LWRITE: len = dsi_dcs_lwrite(dp, cm); break; case DTYPE_DCS_WRITE: len = dsi_dcs_swrite(dp, cm); break; case DTYPE_DCS_WRITE1: len = dsi_dcs_swrite1(dp, cm); break; case DTYPE_DCS_READ: len = dsi_dcs_read(dp, cm); break; case DTYPE_MAX_PKTSIZE: len = dsi_set_max_pktsize(dp, cm); break; case DTYPE_NULL_PKT: len = dsi_null_pkt(dp, cm); break; case DTYPE_BLANK_PKT: len = dsi_blank_pkt(dp, cm); break; case DTYPE_CM_ON: len = dsi_cm_on(dp, cm); break; case DTYPE_CM_OFF: len = dsi_cm_off(dp, cm); break; case DTYPE_PERIPHERAL_ON: len = dsi_peripheral_on(dp, cm); break; case DTYPE_PERIPHERAL_OFF: len = dsi_peripheral_off(dp, cm); break; default: pr_debug("%s: dtype=%x NOT supported\n", __func__, dchdr->dtype); break; } return len; } /* * mdss_dsi_short_read1_resp: 1 parameter */ int dsi_short_read1_resp(struct dsi_buf *rp) { /* strip out dcs type */ rp->data++; rp->len = 1; return rp->len; } /* * mdss_dsi_short_read2_resp: 2 parameter */ int dsi_short_read2_resp(struct dsi_buf *rp) { /* strip out dcs type */ rp->data++; rp->len = 2; return rp->len; } int dsi_long_read_resp(struct dsi_buf *rp) { short len; len = rp->data[2]; len <<= 8; len |= rp->data[1]; /* strip out dcs header */ rp->data += 4; rp->len -= 4; /* strip out 2 bytes of checksum */ rp->len -= 2; return len; } drivers/video/msm/mdss/dsi_v2.h +0 −10 Original line number Diff line number Diff line Loading @@ -51,18 +51,8 @@ int dsi_cmds_tx_v2(struct mdss_panel_data *pdata, struct dsi_buf *tp, struct dsi_cmd_desc *cmds, int cnt); char *dsi_buf_init(struct dsi_buf *dp); int dsi_buf_alloc(struct dsi_buf *dp, int size); int dsi_cmd_dma_add(struct dsi_buf *dp, struct dsi_cmd_desc *cm); int dsi_short_read1_resp(struct dsi_buf *rp); int dsi_short_read2_resp(struct dsi_buf *rp); int dsi_long_read_resp(struct dsi_buf *rp); void dsi_set_tx_power_mode(int mode); void dsi_ctrl_config_deinit(struct platform_device *pdev, Loading Loading
drivers/video/msm/mdss/dsi_host_v2.c +10 −10 Original line number Diff line number Diff line Loading @@ -545,8 +545,8 @@ int msm_dsi_cmds_tx(struct mdss_panel_data *pdata, cm = cmds; for (i = 0; i < cnt; i++) { dsi_buf_init(tp); rc = dsi_cmd_dma_add(tp, cm); mdss_dsi_buf_init(tp); rc = mdss_dsi_cmd_dma_add(tp, cm); if (!rc) { pr_err("%s: dsi_cmd_dma_add fail\n", __func__); rc = -EINVAL; Loading Loading @@ -638,8 +638,8 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, /* packet size need to be set at every read */ pkt_size = len; max_pktsize[0] = pkt_size; dsi_buf_init(tp); rc = dsi_cmd_dma_add(tp, pkt_size_cmd); mdss_dsi_buf_init(tp); rc = mdss_dsi_cmd_dma_add(tp, pkt_size_cmd); if (!rc) { pr_err("%s: dsi_cmd_dma_add failed\n", __func__); rp->len = 0; Loading @@ -654,8 +654,8 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, pr_debug("%s: Max packet size sent\n", __func__); } dsi_buf_init(tp); rc = dsi_cmd_dma_add(tp, cmds); mdss_dsi_buf_init(tp); rc = mdss_dsi_cmd_dma_add(tp, cmds); if (!rc) { pr_err("%s: dsi_cmd_dma_add failed\n", __func__); rp->len = 0; Loading @@ -674,7 +674,7 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, * return data from client is ready and stored * at RDBK_DATA register already */ dsi_buf_init(rp); mdss_dsi_buf_init(rp); if (pdata->panel_info.mipi.no_max_pkt_size) { /* * expect rlen = n * 4 Loading Loading @@ -704,15 +704,15 @@ int msm_dsi_cmds_rx(struct mdss_panel_data *pdata, break; case DTYPE_GEN_READ1_RESP: case DTYPE_DCS_READ1_RESP: dsi_short_read1_resp(rp); mdss_dsi_short_read1_resp(rp); break; case DTYPE_GEN_READ2_RESP: case DTYPE_DCS_READ2_RESP: dsi_short_read2_resp(rp); mdss_dsi_short_read2_resp(rp); break; case DTYPE_GEN_LREAD_RESP: case DTYPE_DCS_LREAD_RESP: dsi_long_read_resp(rp); mdss_dsi_long_read_resp(rp); rp->len -= 2; /* extra 2 bytes added */ rp->len -= diff; /* align bytes */ break; Loading
drivers/video/msm/mdss/dsi_v2.c +0 −539 Original line number Diff line number Diff line Loading @@ -649,41 +649,6 @@ int dsi_cmds_rx_v2(struct mdss_panel_data *pdata, return rc; } static char *dsi_buf_reserve(struct dsi_buf *dp, int len) { dp->data += len; return dp->data; } static char *dsi_buf_push(struct dsi_buf *dp, int len) { dp->data -= len; dp->len += len; return dp->data; } static char *dsi_buf_reserve_hdr(struct dsi_buf *dp, int hlen) { dp->hdr = (u32 *)dp->data; return dsi_buf_reserve(dp, hlen); } char *dsi_buf_init(struct dsi_buf *dp) { int off; dp->data = dp->start; off = (int)dp->data; /* 8 byte align */ off &= 0x07; if (off) off = 8 - off; dp->data += off; dp->len = 0; return dp->data; } int dsi_buf_alloc(struct dsi_buf *dp, int size) { dp->start = kmalloc(size, GFP_KERNEL); Loading @@ -705,507 +670,3 @@ int dsi_buf_alloc(struct dsi_buf *dp, int size) return 0; } /* * 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 generic short write with 0, 1 2 parameters */ static int dsi_generic_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (dchdr->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } 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); } dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; } /* * mipi dsi gerneric read with 0, 1 2 parameters */ static int dsi_generic_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (dchdr->dlen && cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } dsi_buf_reserve_hdr(dp, DSI_HOST_HDR_SIZE); hp = dp->hdr; *hp = 0; *hp |= DSI_HDR_VC(dchdr->vc); *hp |= DSI_HDR_BTA; if (dchdr->last) *hp |= DSI_HDR_LAST; len = (dchdr->dlen > 2) ? 2 : dchdr->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); } dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; } /* * mipi dsi dcs long write */ static int dsi_dcs_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 * 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; } /* * mipi dsi dcs short write with 0 parameters */ static int dsi_dcs_swrite(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; int len; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (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; len = (dchdr->dlen > 1) ? 1 : dchdr->dlen; *hp |= DSI_HDR_DTYPE(DTYPE_DCS_WRITE); *hp |= DSI_HDR_DATA1(cm->payload[0]); /* dcs command byte */ *hp |= DSI_HDR_DATA2(0); 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 dcs read with 0 parameters */ static int dsi_dcs_read(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (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); *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); dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_cm_on(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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_ON); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_cm_off(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_peripheral_on(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_peripheral_off(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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_OFF); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_set_max_pktsize(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; if (cm->payload == 0) { pr_err("%s: NO payload error\n", __func__); return 0; } 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]); dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_null_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } static int dsi_blank_pkt(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { u32 *hp; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; 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_BLANK_PKT); if (dchdr->last) *hp |= DSI_HDR_LAST; dsi_buf_push(dp, DSI_HOST_HDR_SIZE); return dp->len; /* 4 bytes */ } /* * prepare cmd buffer to be txed */ int dsi_cmd_dma_add(struct dsi_buf *dp, struct dsi_cmd_desc *cm) { int len = 0; struct dsi_ctrl_hdr *dchdr = &cm->dchdr; switch (dchdr->dtype) { case DTYPE_GEN_WRITE: case DTYPE_GEN_WRITE1: case DTYPE_GEN_WRITE2: len = dsi_generic_swrite(dp, cm); break; case DTYPE_GEN_LWRITE: len = dsi_generic_lwrite(dp, cm); break; case DTYPE_GEN_READ: case DTYPE_GEN_READ1: case DTYPE_GEN_READ2: len = dsi_generic_read(dp, cm); break; case DTYPE_DCS_LWRITE: len = dsi_dcs_lwrite(dp, cm); break; case DTYPE_DCS_WRITE: len = dsi_dcs_swrite(dp, cm); break; case DTYPE_DCS_WRITE1: len = dsi_dcs_swrite1(dp, cm); break; case DTYPE_DCS_READ: len = dsi_dcs_read(dp, cm); break; case DTYPE_MAX_PKTSIZE: len = dsi_set_max_pktsize(dp, cm); break; case DTYPE_NULL_PKT: len = dsi_null_pkt(dp, cm); break; case DTYPE_BLANK_PKT: len = dsi_blank_pkt(dp, cm); break; case DTYPE_CM_ON: len = dsi_cm_on(dp, cm); break; case DTYPE_CM_OFF: len = dsi_cm_off(dp, cm); break; case DTYPE_PERIPHERAL_ON: len = dsi_peripheral_on(dp, cm); break; case DTYPE_PERIPHERAL_OFF: len = dsi_peripheral_off(dp, cm); break; default: pr_debug("%s: dtype=%x NOT supported\n", __func__, dchdr->dtype); break; } return len; } /* * mdss_dsi_short_read1_resp: 1 parameter */ int dsi_short_read1_resp(struct dsi_buf *rp) { /* strip out dcs type */ rp->data++; rp->len = 1; return rp->len; } /* * mdss_dsi_short_read2_resp: 2 parameter */ int dsi_short_read2_resp(struct dsi_buf *rp) { /* strip out dcs type */ rp->data++; rp->len = 2; return rp->len; } int dsi_long_read_resp(struct dsi_buf *rp) { short len; len = rp->data[2]; len <<= 8; len |= rp->data[1]; /* strip out dcs header */ rp->data += 4; rp->len -= 4; /* strip out 2 bytes of checksum */ rp->len -= 2; return len; }
drivers/video/msm/mdss/dsi_v2.h +0 −10 Original line number Diff line number Diff line Loading @@ -51,18 +51,8 @@ int dsi_cmds_tx_v2(struct mdss_panel_data *pdata, struct dsi_buf *tp, struct dsi_cmd_desc *cmds, int cnt); char *dsi_buf_init(struct dsi_buf *dp); int dsi_buf_alloc(struct dsi_buf *dp, int size); int dsi_cmd_dma_add(struct dsi_buf *dp, struct dsi_cmd_desc *cm); int dsi_short_read1_resp(struct dsi_buf *rp); int dsi_short_read2_resp(struct dsi_buf *rp); int dsi_long_read_resp(struct dsi_buf *rp); void dsi_set_tx_power_mode(int mode); void dsi_ctrl_config_deinit(struct platform_device *pdev, Loading