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 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 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_gen(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_gen_short_lp(sender, cmd->commands[0], 0, 1, MDFLD_DSI_SEND_PACKAGE); break; case 2: err = mdfld_dsi_send_gen_short_lp(sender, cmd->commands[0], cmd->commands[1], 2, MDFLD_DSI_SEND_PACKAGE); break; default: err = mdfld_dsi_send_gen_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 int mdfld_dsi_pr2_ic_init(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); if (!sender) { DRM_ERROR("Cannot get sender\n"); return -EINVAL; } PSB_DEBUG_ENTRY("\n"); sender->status = MDFLD_DSI_PKG_SENDER_FREE; mdfld_dsi_send_gen_long_lp(sender, pr2_mcs_protect_off, 2, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_pixel_format, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_dsi_control, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_panel_driving, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_v_timing, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_control, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_0, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_h_timing, 16, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_can_skip, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_gamma_set_a, 16, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_gamma_set_b, 16, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_gamma_set_c, 16, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_charge_pump_setting, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_1, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_source_amplifiers, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_power_supply_circuit, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_vreg_setting, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_2, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_timing_control_0, 12, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_timing_control_1, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_timing_control_2, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_white_balance, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_vcs_setting, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_vcom_dc_setting, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_test_mode_3, 8, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, pr2_mcs_protect_on, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, pr2_set_address_mode, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, pr2_set_pixel_format, 4, 0); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; return 0; }
static int jdi_cmd_drv_ic_init(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err = 0; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Cannot get sender\n"); return -EINVAL; } err = mdfld_dsi_send_mcs_short_hs(sender, exit_sleep_mode, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__); goto ic_init_err; } msleep(120); err = mdfld_dsi_send_mcs_short_hs(sender, write_display_brightness, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Brightness\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, write_ctrl_display, 0x24, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Write Control Display\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, write_ctrl_cabc, STILL_IMAGE, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Write Control CABC\n", __func__, __LINE__); goto ic_init_err; } if (!IS_ANN(dev)) { err = mdfld_dsi_send_mcs_short_hs(sender, write_cabc_min_bright, 51, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Write CABC minimum brightness\n", __func__, __LINE__); goto ic_init_err; } } err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 4, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Manufacture command protect on\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_gen_long_lp(sender, jdi_timing_control, 21, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set panel timing\n", __func__, __LINE__); goto ic_init_err; } msleep(20); err = mdfld_dsi_send_mcs_short_hs(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; } err = mdfld_dsi_send_mcs_long_hs(sender, jdi_mcs_clumn_addr, 5, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Clumn Address\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_long_hs(sender, jdi_mcs_page_addr, 5, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Page Address\n", __func__, __LINE__); goto ic_init_err; } return 0; ic_init_err: err = -EIO; return err; }
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 mdfld_h8c7_dpi_ic_init(struct mdfld_dsi_config *dsi_config, int pipe) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); unsigned long wait_timeout; if (!sender) { DRM_ERROR("Cannot get sender\n"); return -EINVAL; } PSB_DEBUG_ENTRY("\n"); sender->status = MDFLD_DSI_PKG_SENDER_FREE; /*wait for 5ms*/ wait_timeout = jiffies + (HZ / 200); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* sleep out and wait for 150ms. */ mdfld_dsi_send_mcs_long_lp(sender, h8c7_exit_sleep_mode, 4, 0); wait_timeout = jiffies + (3 * HZ / 20); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* set password and wait for 10ms. */ mdfld_dsi_send_gen_long_lp(sender, h8c7_mcs_protect_off, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* set TE on and wait for 10ms. */ mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_tear_on, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* set backlight to full brightness and wait for 10ms. */ mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_full_brightness, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* set backlight on and wait for 10ms. */ mdfld_dsi_send_mcs_long_lp(sender, h8c7_turn_on_backlight, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* disalble CABC and wait for 10ms. */ mdfld_dsi_send_mcs_long_lp(sender, h8c7_disable_cabc, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_ic_bias_current, 8, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_power, 16, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_disp_reg, 16, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_command_cyc, 24, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_mipi_ctrl, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_video_mode, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_blanking_opt_2, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_panel, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_eq_func_ltps, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_ltps_ctrl_output, 24, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_set_video_cyc, 24, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_gamma_r, 36, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_gamma_g, 36, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_gen_long_lp(sender, h8c7_gamma_b, 36, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_enter_set_cabc, 10, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; /* disable password and wait for 10ms. */ mdfld_dsi_send_gen_long_lp(sender, h8c7_mcs_protect_on, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_address_mode, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; mdfld_dsi_send_mcs_long_lp(sender, h8c7_set_pixel_format, 4, 0); wait_timeout = jiffies + (HZ / 100); while (time_before_eq(jiffies, wait_timeout)) cpu_relax(); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) return -EIO; return 0; }