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