static int otm1901a_vid_drv_ic_init(struct mdfld_dsi_config *dsi_config){ struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int i; if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } printk("[DISP] %s\n", __func__); gpio_set_value_cansleep(panel_reset_gpio, 0); usleep_range(10000, 10100); gpio_set_value_cansleep(panel_reset_gpio, 1); usleep_range(10000, 10100); /* panel initial settings */ mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_1, sizeof(cm_FF_1), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_2, sizeof(cm_FF_2), MDFLD_DSI_SEND_PACKAGE); for(i = 0; i < otm1901a_power_on_table_size; i++) send_mipi_cmd_orise(sender, &otm1901a_power_on_table[i]); mdfld_dsi_send_mcs_short_lp(sender, 0x11, 0, 0, MDFLD_DSI_SEND_PACKAGE); mdelay(200); mdfld_dsi_send_mcs_short_lp(sender, 0x29, 0, 0, MDFLD_DSI_SEND_PACKAGE); return 0; }
static int mdfld_dsi_h8c7_cmd_set_brightness(struct mdfld_dsi_config *dsi_config, int level) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int duty_val = 0; static bool b_cabc_initialized = false; if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } if (drm_psb_enable_cabc && !b_cabc_initialized) { h8c7_disable_cabc[1] = 0x2; mdfld_dsi_send_mcs_long_hs(sender, h8c7_disable_cabc, sizeof(h8c7_disable_cabc), 0); mdelay(5); mdfld_dsi_send_gen_long_hs(sender, h8c7_mcs_protect_off, 4, 0); mdfld_dsi_send_mcs_long_hs(sender, h8c7_set_cabc_gain, 10, 0); mdfld_dsi_send_gen_long_hs(sender, h8c7_mcs_protect_on, 4, 0); b_cabc_initialized = true; } duty_val = (255 * level) / 100; h8c7_set_brightness[1] = duty_val; mdfld_dsi_send_mcs_short_lp(sender, h8c7_set_brightness[0], h8c7_set_brightness[1], 1, 0); return 0; }
static int samsungWQHD_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config){ struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int i; if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } printk("[DISP] %s\n", __func__); /* HW_RST control */ gpio_set_value_cansleep(panel_reset_gpio, 1); usleep_range(1000, 1500); gpio_set_value_cansleep(panel_reset_gpio, 0); usleep_range(1000, 1500); gpio_set_value_cansleep(panel_reset_gpio, 1); usleep_range(10000, 10500); /* HW_RST control */ /* panel initial settings */ mdfld_dsi_send_mcs_short_lp(sender, 0x11, 0, 0, MDFLD_DSI_SEND_PACKAGE); usleep_range(20000, 20100); for (i = 0; i < samsungWQHD_power_on_table_size; i++) send_mipi_cmd_mcs(sender, &samsungWQHD_power_on_table[i]); return 0; }
static int handle_dsi_init_commands(struct mdfld_dsi_pkg_sender *sender, struct dsi_init_command *command) { int r = 0; if (!sender) return -EINVAL; while (command->type != DONE_CMD && r == 0) { switch (command->type) { case GEN_LONG_LP_CMD: r = mdfld_dsi_send_gen_long_lp(sender, command->param, command->count, MDFLD_DSI_SEND_PACKAGE); break; case GEN_SHORT_LP_CMD: r = mdfld_dsi_send_gen_short_lp(sender, command->param[0], command->count > 1 ? command->param[1] : 0, command->count, MDFLD_DSI_SEND_PACKAGE); break; case MCS_LONG_LP_CMD: r = mdfld_dsi_send_mcs_long_lp(sender, command->param, command->count, MDFLD_DSI_SEND_PACKAGE); break; case MCS_SHORT_LP_CMD: r = mdfld_dsi_send_mcs_short_lp(sender, command->param[0], command->count > 1 ? command->param[1] : 0, command->count - 1, MDFLD_DSI_SEND_PACKAGE); break; case GEN_LONG_HS_CMD: r = mdfld_dsi_send_gen_long_hs(sender, command->param, command->count, MDFLD_DSI_SEND_PACKAGE); break; case GEN_SHORT_HS_CMD: r = mdfld_dsi_send_gen_short_hs(sender, command->param[0], command->count > 1 ? command->param[1] : 0, command->count, MDFLD_DSI_SEND_PACKAGE); break; case MCS_LONG_HS_CMD: r = mdfld_dsi_send_mcs_long_hs(sender, command->param, command->count, MDFLD_DSI_SEND_PACKAGE); break; case MCS_SHORT_HS_CMD: r = mdfld_dsi_send_mcs_short_hs(sender, command->param[0], command->count > 1 ? command->param[1] : 0, command->count - 1, MDFLD_DSI_SEND_PACKAGE); break; case DELAY_CMD: usleep_range(command->count, command->count * 3 / 2); break; case DONE_CMD: break; } command++; } return r; }
static int sdc16x25_8_cmd_power_on( struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int ret; u8 cmd; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } /* display on */ cmd = set_display_on; ret = mdfld_dsi_send_mcs_short_lp(sender, cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; return 0; err_out: DRM_ERROR("failed to send command %#x\n", cmd); return ret; }
static int sharp25x16_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); struct drm_device *dev = dsi_config->dev; int err = 0; int i; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Cannot get sender\n"); return -EINVAL; } for (i = 0; i < 5; i++) { err = mdfld_dsi_send_gen_long_lp(sender, sharp_mode_set_data[i], 3, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Mode data\n", __func__, __LINE__); goto ic_init_err; } REG_WRITE(MIPIA_LP_GEN_CTRL_REG, 5); } err = mdfld_dsi_send_mcs_long_lp(sender, sharp_clumn_addr_left, 5, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Clumn Address\n", __func__, __LINE__); goto ic_init_err; } REG_WRITE(MIPIA_LP_GEN_CTRL_REG, 5); err = mdfld_dsi_send_mcs_long_lp(sender, sharp_page_addr_left, 5, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Page Address\n", __func__, __LINE__); goto ic_init_err; } REG_WRITE(MIPIA_LP_GEN_CTRL_REG, 5); err = mdfld_dsi_send_mcs_short_lp(sender, set_tear_on, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Tear On\n", __func__, __LINE__); goto ic_init_err; } return 0; ic_init_err: err = -EIO; return err; }
static int send_mipi_cmd_orise(struct mdfld_dsi_pkg_sender * sender, struct mipi_dsi_cmd_orise *cmd) { int err = 0; int i; int r; u8 data3[20]={0}; sender->status = MDFLD_DSI_PKG_SENDER_FREE; if (cmd->gamma_enable) { mdfld_dsi_send_mcs_short_lp(sender, cmd->commands1[0], cmd->commands1[1], 1, MDFLD_DSI_SEND_PACKAGE); for (i=0; i<(cmd->len2 - 1); i++) mdfld_dsi_send_mcs_short_lp(sender, cmd->commands2[0], cmd->commands2[i+1], 1, MDFLD_DSI_SEND_PACKAGE); } else { for (i=0; i<(cmd->len2 - 1); i++) { mdfld_dsi_send_mcs_short_lp(sender, cmd->commands1[0], cmd->commands1[1]+i, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, cmd->commands2[0], cmd->commands2[1+i], 1, MDFLD_DSI_SEND_PACKAGE); } #if 0 printk("-----------------------\n"); r = mdfld_dsi_send_mcs_short_lp(sender, 0x0 , cmd->commands1[1], 1, 0); r = mdfld_dsi_read_gen_lp(sender,cmd->commands2[0],0,1,data3, cmd->len2-1); printk("read: %d, 0x%02x%02x",r,cmd->commands2[0], cmd->commands1[1]); for(i=0;i<cmd->len2-1;i++){ printk(" 0x%02x", data3[i]); } printk("\n"); #endif } if (err != 0 || sender->status) { printk("[DISP] %s : sent failed with status=%d\n", __func__, sender->status); return -EIO; } if (cmd->delay) mdelay(cmd->delay); return 0; }
static int sdc16x25_8_cmd_power_off( struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } err = mdfld_dsi_send_mcs_short_lp(sender, set_display_off, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display Off\n", __func__, __LINE__); goto power_off_err; } msleep(35); err = mdfld_dsi_send_mcs_short_lp(sender, enter_sleep_mode, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Enter Sleep Mode\n", __func__, __LINE__); goto power_off_err; } msleep(120); if (bias_en_gpio) gpio_set_value_cansleep(bias_en_gpio, 0); usleep_range(1000, 1500); return 0; power_off_err: err = -EIO; return err; }
static int send_mipi_cmd_mcs(struct mdfld_dsi_pkg_sender * sender, struct mipi_dsi_cmd *cmd) { int err = 0; sender->status = MDFLD_DSI_PKG_SENDER_FREE; switch(cmd->len) { case 1: err = mdfld_dsi_send_mcs_short_lp(sender, cmd->commands[0], 0, 0, MDFLD_DSI_SEND_PACKAGE); break; case 2: err = mdfld_dsi_send_mcs_short_lp(sender, cmd->commands[0], cmd->commands[1], 1, MDFLD_DSI_SEND_PACKAGE); break; default: err = mdfld_dsi_send_mcs_long_lp(sender, cmd->commands, cmd->len, MDFLD_DSI_SEND_PACKAGE); break; } if (err != 0 || sender->status) { printk("[DISP] %s : sent failed with status=%d\n", __func__, sender->status); return -EIO; } if (cmd->delay) mdelay(cmd->delay); return 0; }
static ssize_t send_mipi_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int x0=0, x1=0; struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(samsungWQHD_dsi_config); sscanf(buf, "%x,%x", &x0, &x1); send_mipi_ret = mdfld_dsi_send_mcs_short_lp(sender,x0,x1,1,0); DRM_INFO("[DISPLAY] send %x,%x : ret = %d\n",x0,x1,send_mipi_ret); return count; }
static int samsungWQHD_cmd_power_on(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); printk("[DISP] %s\n", __func__); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } mdfld_dsi_send_mcs_short_lp(sender, 0x29, 0, 0, MDFLD_DSI_SEND_PACKAGE); usleep_range(120000, 120100); return 0; }
static int sdc16x25_8_cmd_set_brightness( struct mdfld_dsi_config *dsi_config, int level) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); u8 duty_val = 0; PSB_DEBUG_ENTRY("level = %d\n", level); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } duty_val = (0xFF * level) / 255; mdfld_dsi_send_mcs_short_lp(sender, write_display_brightness, duty_val, 1, MDFLD_DSI_SEND_PACKAGE); return 0; }
static int mdfld_h8c7_drv_ic_init(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); if (!sender) return -EINVAL; PSB_DEBUG_ENTRY("\n"); sender->status = MDFLD_DSI_PKG_SENDER_FREE; /* set password*/ mdfld_dsi_send_mcs_short_lp(sender, h8c7_exit_sleep_mode[0], 0, 0, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdelay(150); /* set password*/ mdfld_dsi_send_mcs_long_lp(sender, h8c7_mcs_protect_off, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_ic_bias_current, 5, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_power, 14, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_disp_reg, 13, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_command_cyc, 24, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_mipi_ctrl, 18, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_stba, 3, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_short_lp(sender, h8c7_command_mode[0], h8c7_command_mode[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_blanking_opt_2, sizeof(h8c7_set_blanking_opt_2), 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_short_lp(sender, h8c7_set_panel[0], h8c7_set_panel[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_short_lp(sender, h8c7_set_eq_func_ltps[0], h8c7_set_eq_func_ltps[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_ltps_ctrl_output, 22, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_video_cyc, 24, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_gamma_r, 35, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_gamma_g, 35, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_gamma_b, 35, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_short_lp(sender, h8c7_set_pixel_format[0], h8c7_set_pixel_format[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_mcs_clumn_addr, 5, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_mcs_page_addr, 5, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_short_lp(sender, h8c7_set_address_mode[0], h8c7_set_address_mode[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_te_scanline, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_short_lp(sender, h8c7_set_tear_on[0], h8c7_set_tear_on[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_enter_set_cabc, 10, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* set backlight on*/ mdfld_dsi_send_mcs_short_lp(sender, h8c7_turn_on_backlight[0], h8c7_turn_on_backlight[1], 1 , 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* disalble CABC*/ mdfld_dsi_send_mcs_short_lp(sender, h8c7_disable_cabc[0], h8c7_disable_cabc[1], 1, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_mcs_protect_on, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdelay(5); return 0; }
static int otm1284a_vid_drv_ic_init(struct mdfld_dsi_config *dsi_config){ struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int i; if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } printk("[DISP] %s\n", __func__); gpio_set_value_cansleep(panel_reset_gpio, 0); usleep_range(10000, 10100); gpio_set_value_cansleep(panel_reset_gpio, 1); usleep_range(10000, 10100); /* panel initial settings */ if(lcd_id == ZE550ML_TM_MP) { mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_1, sizeof(cm_FF_1), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_2, sizeof(cm_FF_2), MDFLD_DSI_SEND_PACKAGE); for(i = 0; i < otm1284a_power_on_table_size; i++) send_mipi_cmd_orise(sender, &otm1284a_power_on_table[i]); } else if (lcd_id == ZE550ML_TM) { mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_1, sizeof(cm_FF_1), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_2, sizeof(cm_FF_2), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0xB5, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm3_115, sizeof(cm3_115), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_3, sizeof(cm_FF_3), MDFLD_DSI_SEND_PACKAGE); } else if (lcd_id == ZE550ML_CPT) { mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_1, sizeof(cm_FF_1), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_2, sizeof(cm_FF_2), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x91, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm3_116, sizeof(cm3_116), MDFLD_DSI_SEND_PACKAGE); for(i = 0; i < otm1284a_power_on_table_size; i++) send_mipi_cmd_orise(sender, &otm1284a_power_on_table[i]); } else if (lcd_id != ZE500ML_TM) { mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_1, sizeof(cm_FF_1), MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_2, sizeof(cm_FF_2), MDFLD_DSI_SEND_PACKAGE); #ifdef OTM1284A_TWO_LANES mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x92, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_4, sizeof(cm_FF_4), MDFLD_DSI_SEND_PACKAGE); #else mdfld_dsi_send_mcs_short_lp(sender, 0x00, 0x92, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_gen_long_lp(sender, cm_FF_5, sizeof(cm_FF_5), MDFLD_DSI_SEND_PACKAGE); #endif for(i = 0; i < otm1284a_power_on_table_size; i++) send_mipi_cmd_orise(sender, &otm1284a_power_on_table[i]); mdfld_dsi_send_gen_long_lp(sender, cm_FF_3, sizeof(cm_FF_3), MDFLD_DSI_SEND_PACKAGE); } mdfld_dsi_send_mcs_short_lp(sender, 0x11, 0, 0, MDFLD_DSI_SEND_PACKAGE); mdelay(200); mdfld_dsi_send_mcs_short_lp(sender, 0x29, 0, 0, MDFLD_DSI_SEND_PACKAGE); return 0; }
static int sdc16x25_8_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int ret; u8 cmd; PSB_DEBUG_ENTRY("\n"); /* interface control: dual DSI */ cmd = sdc16x25_8_test_key_enable[0]; ret = mdfld_dsi_send_mcs_long_lp(sender, sdc16x25_8_test_key_enable, sizeof(sdc16x25_8_test_key_enable), MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; cmd = sdc16x25_8_eight_lane_enable[0]; ret = mdfld_dsi_send_mcs_long_lp(sender, sdc16x25_8_eight_lane_enable, sizeof(sdc16x25_8_eight_lane_enable), MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; cmd = sdc16x25_8_test_key_disable[0]; ret = mdfld_dsi_send_mcs_long_lp(sender, sdc16x25_8_test_key_disable, sizeof(sdc16x25_8_test_key_disable), MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; msleep(200); /* exit sleep */ cmd = exit_sleep_mode; ret = mdfld_dsi_send_mcs_short_lp(sender, cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; msleep(200); /* send display brightness */ cmd = write_display_brightness; ret = mdfld_dsi_send_mcs_short_lp(sender, cmd, 0xff, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* display control */ cmd = write_ctrl_display; ret = mdfld_dsi_send_mcs_short_lp(sender, cmd, 0x20, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* tear on*/ cmd = set_tear_on; ret = mdfld_dsi_send_mcs_short_lp(sender, cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* column address */ cmd = sdc16x25_8_mcs_column_addr[0]; ret = mdfld_dsi_send_mcs_long_lp(sender, sdc16x25_8_mcs_column_addr, 5, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* page address */ cmd = sdc16x25_8_mcs_page_addr[0]; ret = mdfld_dsi_send_mcs_long_lp(sender, sdc16x25_8_mcs_page_addr, 5, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; return 0; err_out: DRM_ERROR("failed to send command %#x\n", cmd); return ret; }