void debug_lcd_read_lcd_reg(void)
{
	struct dsi_cmd_desc packet_size_cmd_set;
	volatile int cmd_reg;
	int		max_times;

	int i = 0;
	int reg_msb = g_mipi_lcd_debug_info.lcd_reg_msb;

	if (-1 == g_mipi_lcd_debug_info.lcd_reg_msb) {
		reg_msb = 0;
	}

	max_times = g_mipi_lcd_debug_info.para_num / 4 + 1;

	balongfb_logi("g_mipi_lcd_debug_info.para_num = %ld \n", g_mipi_lcd_debug_info.para_num);

	packet_size_cmd_set.dtype = DTYPE_MAX_PKTSIZE;
	packet_size_cmd_set.vc	  = 0;

	/* video LCD must set the DSI to Command Mode */
	if (g_panel_lcd_mode == 0) {
		set_dsi_mode(CMD_MODE);
		mdelay(100);
	}

	packet_size_cmd_set.dlen = g_mipi_lcd_debug_info.para_num;

	mipi_dsi_max_return_packet_size(&packet_size_cmd_set, NULL);

	mdelay(50);

	cmd_reg = (reg_msb << 8 | g_mipi_lcd_debug_info.lcd_reg_lsb) << 8 | g_mipi_lcd_debug_info.cmd_type;

	/* send cmd */
	set_MIPIDSI_GEN_HDR(NULL, cmd_reg);

	for (i = 0; i < max_times; i++) {
		mdelay(50);

		g_mipi_lcd_debug_info.para_array[i] = get_MIPIDSI_GEN_PLD_DATA();
		balongfb_logi("get_MIPIDSI_GEN_PLD_DATA cmd_reg = 0x%x, lcd_reg_val = %ld \n", cmd_reg, g_mipi_lcd_debug_info.para_array[i]);
	}

	if (g_panel_lcd_mode == 0) {
		set_dsi_mode(HSPD_MODE);
		mdelay(20);
	}

	return;
}
int mipi_dsi_wait_and_read(struct balong_fb_data_type *balongfd, u32 *val)
{
    int err = 0;
    int is_timeout = 1;
    unsigned long dw_jiffies = 0;
    MIPIDSI_CMD_PKT_STATUS_UNION    mipidsi_cmd_pkt_status;

    /*wait dsi read data*/
    dw_jiffies = jiffies + HZ;
    do
    {
        if (!balongfd->ade_ldi_on)
        {
            /*ldi off, discard this read operation*/
            balongfb_loge("ldi off, waiting data can read.\n");
            return -1;
        }
        mipidsi_cmd_pkt_status.ul32 = get_MIPIDSI_CMD_PKT_STATUS();
        if (0x1 != mipidsi_cmd_pkt_status.bits.gen_pld_r_empty)
        {
            /*data is ready, we can read data from PLD*/
            is_timeout = 0;
            break;
        }
    } while (time_after(dw_jiffies, jiffies));

    if (is_timeout == 1)
    {
        /*read timeout*/
        balongfb_loge("dsi read timeout.\n");
        err = -1;
        return err;
    }

    //down(&balong_fb_blank_sem);
    if (balongfd->ade_ldi_on)
    {
        /*read data*/
        *val = get_MIPIDSI_GEN_PLD_DATA();
    }
    else
    {
        /*panel off, discard this read operation*/
        balongfb_loge("panel off, when reading data.\n");
        err = -1;
    }
   // up(&balong_fb_blank_sem);
    return err;
}
예제 #3
0
void mipi_dsi_sread(u32 *out)
{
    unsigned long dw_jiffies = 0;
    MIPIDSI_CMD_PKT_STATUS_UNION    mipidsi_cmd_pkt_status;


    dw_jiffies = jiffies + HZ / 2;
    do {
        mipidsi_cmd_pkt_status.ul32 = get_MIPIDSI_CMD_PKT_STATUS();
        if (0x1 == mipidsi_cmd_pkt_status.bits.gen_rd_cmd_busy) {
            break;
        }
    } while (time_after(dw_jiffies, jiffies));

    dw_jiffies = jiffies + HZ / 2;
    do {
        mipidsi_cmd_pkt_status.ul32 = get_MIPIDSI_CMD_PKT_STATUS();
        if (0x1 != mipidsi_cmd_pkt_status.bits.gen_rd_cmd_busy) {
            break;
        }
    } while (time_after(dw_jiffies, jiffies));

    *out = get_MIPIDSI_GEN_PLD_DATA();
}