高通平台MIPI DCS read 方法

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);


你可能感兴趣的:(linux内核)