1、代码片段一
static struct dsi_cmd_desc hx8369_display_off_cmds[] = {
{DTYPE_DCS_WRITE, 1, 0, 0, 10, sizeof(display_off), display_off},
{DTYPE_DCS_WRITE, 1, 0, 0, 10, sizeof(enter_sleep), enter_sleep}
};
static char panel_manufacture_id[] = {0xf4,0x00,0x06,0xa0}; /* DTYPE_DCS_READ */
static struct dsi_cmd_desc ea05_panel_manufacture_id_cmd[] = {
{DTYPE_DCS_READ, 1, 0, 0, 5, sizeof(panel_manufacture_id), panel_manufacture_id}};
static uint32 mipi_ea05_panel_manufacture_id_read(struct msm_fb_data_type *mfd)
{
struct dsi_buf *rp , *tp;
struct dsi_cmd_desc *cmd;
uint32 *lp;
//mipi_dsi_cmd_bta_sw_trigger(); /* clean up ack_err_status */
tp = &hx8369_tx_buf;
rp = &hx8369_rx_buf;
cmd = ea05_panel_manufacture_id_cmd;
//mipi_dsi_cmds_tx(mfd, &hx8369_tx_buf, hx8369_panel_ic_reg_cmd,1);
mipi_dsi_cmds_rx(mfd, tp, rp, cmd, 4);
lp = (uint32 *)rp->data;
pr_info("%s: manufacture_id=%x\n", __func__, *lp);
return *lp;
}
2.代码片段2
/**
* Read a bridge register
*
* @param mfd
*
* @return register data value
*/
static u32 mipi_d2l_read_reg(struct msm_fb_data_type *mfd, u16 reg)
{
u32 data;
int len = 4;
struct dsi_cmd_desc cmd_read_reg = {
DTYPE_GEN_READ2, 1, 0, 1, 0, /* cmd 0x24 */
sizeof(reg), (char *) ®};
mipi_dsi_buf_init(&d2l_tx_buf);
mipi_dsi_buf_init(&d2l_rx_buf);
/* mutex had been acquired at mipi_dsi_on */
len = mipi_dsi_cmds_rx(mfd, &d2l_tx_buf, &d2l_rx_buf,
&cmd_read_reg, len);
data = *(u32 *)d2l_rx_buf.data;
if (len != 4)
pr_err("%s: invalid rlen=%d, expecting 4.\n", __func__, len);
pr_debug("%s: reg=0x%x.data=0x%08x.\n", __func__, reg, data);
return data;
}
static void mipi_d2l_read_status(struct msm_fb_data_type *mfd)
{
mipi_d2l_read_reg(mfd, DSI_LANESTATUS0); /* 0x214 */
mipi_d2l_read_reg(mfd, DSI_LANESTATUS1); /* 0x218 */
mipi_d2l_read_reg(mfd, DSI_INTSTATUS); /* 0x220 */
mipi_d2l_read_reg(mfd, SYSSTAT); /* 0x500 */
}
chip_id = mipi_d2l_read_reg(mfd, IDREG);