static int sharp10x19_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; struct drm_device *dev = dsi_config->dev; 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_hs(sender, write_display_brightness, duty_val, 1, MDFLD_DSI_SEND_PACKAGE); if (is_dual_panel(dev)) { sender->work_for_slave_panel = true; mdfld_dsi_send_mcs_short_hs(sender, write_display_brightness, duty_val, 1, MDFLD_DSI_SEND_PACKAGE); sender->work_for_slave_panel = false; } return 0; }
static int samsungWQHD_cmd_power_off(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err; printk("[DISP] %s\n", __func__); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } usleep_range(1000, 1500); /* Send power off command*/ err = mdfld_dsi_send_mcs_short_hs(sender, 0x28, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("Failed to Set Display Off\n"); return err; } usleep_range(35000, 35500); err = mdfld_dsi_send_mcs_short_hs(sender, 0x10, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("Failed to Enter Sleep Mode\n"); return err; } usleep_range(150000, 150500); /* Turn off VBAT*/ gpio_set_value_cansleep(stb1_en_gpio, 0); gpio_set_value_cansleep(stb2_en_gpio, 0); return 0; }
static int otm1284a_vid_power_off(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err; printk("[DISP] %s\n", __func__); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } cancel_delayed_work_sync(&orise1284a_panel_reset_delay_work); usleep_range(1000, 1500); /* Send power off command*/ err = mdfld_dsi_send_mcs_short_hs(sender, MIPI_DCS_SET_DISPLAY_OFF, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("Failed to Set Display Off\n"); return err; } err = mdfld_dsi_send_mcs_short_hs(sender, MIPI_DCS_ENTER_SLEEP_MODE, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("Failed to Enter Sleep Mode\n"); return err; } usleep_range(50000, 55000); return 0; }
static int mdfld_dsi_sharp10x19_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; if (!sender) { DRM_ERROR("Cannot get sender\n"); return -EINVAL; } PSB_DEBUG_ENTRY("\n"); err = mdfld_dsi_send_mcs_short_hs(sender, access_protect, 0x4, 1 , 0); if (err) { DRM_ERROR("%s: %d: Set access_protect off\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, 0xd6, 0x01, 1 , 0); if (err) { DRM_ERROR("%s: %d: Remove NVM reload\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, write_ctrl_display, 0xc, 1 , 0); if (err) { DRM_ERROR("%s: %d: Set backlight\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, write_ctrl_cabc, dsi_config->cabc_mode, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: write_ctrl_cabc\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, set_pixel_format, 0x77, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: set_pixel_format\n", __func__, __LINE__); goto ic_init_err; } return 0; ic_init_err: err = -EIO; return err; }
static int mdfld_dsi_jdi_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; } /*send SHUT_DOWN packet */ err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_SHUT_DOWN); if (err) { DRM_ERROR("Failed to send turn off packet\n"); goto power_off_err; } /* According HW DSI spec, need to wait for 100ms. */ msleep(100); /* Set Display off */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto power_off_err; } /* Wait for 1 frame after set_display_on. */ msleep(20); /* Sleep In */ err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__); goto power_off_err; } /* Wait for 3 frames after enter_sleep_mode. */ msleep(51); /* Can not poweroff VPROG2, because many other module related to * this power supply, such as PSH sensor. */ /*__vpro2_power_ctrl(false);*/ if (bias_en_gpio) gpio_set_value_cansleep(bias_en_gpio, 0); return 0; power_off_err: err = -EIO; return err; }
static int sharp25x16_cmd_power_on( 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("Failed to get DSI packet sender\n"); return -EINVAL; } err = mdfld_dsi_send_mcs_short_hs(sender, set_address_mode, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Address Mode\n", __func__, __LINE__); goto power_err; } // usleep_range(20000, 20100); err = mdfld_dsi_send_mcs_short_hs(sender, set_pixel_format, 0x77, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Pixel format\n", __func__, __LINE__); goto power_err; } /* Sleep Out */ 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 power_err; } msleep(20); /* Set Display on 0x29 */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto power_err; } msleep(150); power_err: return err; }
static int sharp10x19_cmd_power_on(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 ret; u8 cmd; int i; int loop = 1; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } if (is_dual_panel(dev)) loop = 2; for(i = 0; i < loop; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; /* address mode */ cmd = set_address_mode; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* pixel format*/ cmd = set_pixel_format; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x77, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* display on */ cmd = set_display_on; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; } sender->work_for_slave_panel = false; return 0; err_out: sender->work_for_slave_panel = false; DRM_ERROR("failed to send command %#x\n", cmd); return ret; }
static int mdfld_dsi_sharp25x16_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; } /*send SHUT_DOWN packet */ err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_SHUT_DOWN); if (err) { DRM_ERROR("Failed to send turn off packet\n"); goto power_off_err; } /* According HW DSI spec, need to wait for 100ms. */ msleep(100); /* Set Display off */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto power_off_err; } /* Wait for 1 frame after set_display_on. */ msleep(20); /* Sleep In */ err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__); goto power_off_err; } /* Wait for 3 frames after enter_sleep_mode. */ msleep(51); /* enable it after AOB re-work * gpio_set_value_cansleep(mipi_reset_gpio, 0); */ return 0; power_off_err: err = -EIO; return err; }
int mdfld_mot_cmn_send_cmd_list(struct mdfld_dsi_config *dsi_config, struct mdfld_dsi_pkg_sender *sender, struct dsi_cmd_entry *list, int num_entry) { struct dsi_cmd_entry *entry; u8 *mcs_short_data; int i; int err = 0; for (i = 0; i < num_entry; i++) { entry = &list[i]; PSB_DEBUG_INIT("Sending command # %d, type = %d\n", i, entry->type); if (entry->type == CMD_MCS_LONG) { err = mdfld_dsi_send_mcs_long_hs(sender, entry->data, entry->len, MDFLD_DSI_SEND_PACKAGE); } else if ((entry->type == CMD_MCS_SHORT1) && (entry->len == 2)) { mcs_short_data = entry->data; err = mdfld_dsi_send_mcs_short_hs(sender, entry->data[0], entry->data[1], 1, MDFLD_DSI_SEND_PACKAGE); } else if (entry->type == CMD_MCS_SHORT0) { mcs_short_data = entry->data; err = mdfld_dsi_send_mcs_short_hs(sender, entry->data[0], 0, 0, MDFLD_DSI_SEND_PACKAGE); } else if (entry->type == CMD_SLEEP_MS) { msleep(entry->len); } else { DRM_ERROR("Invalid command entry type %d\n", entry->type); err = -EINVAL; } if (err) { DRM_ERROR("Failed sending command entry # %d\n", i); break; } } return err; }
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 jdi25x16_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; int i; 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; for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; /* * Set maximum brightness here. AOB needs to be modified * to get real brightness setting */ mdfld_dsi_send_mcs_short_hs(sender, write_display_brightness, 0x90, 1, MDFLD_DSI_SEND_PACKAGE); } sender->work_for_slave_panel = false; return 0; }
static int mdfld_dsi_sharp25x16_power_on(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; } /* Sleep Out */ 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 power_on_err; } /* Wait for 6 frames after exit_sleep_mode. */ msleep(100); /* Set Display on */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto power_on_err; } /* Wait for 1 frame after set_display_on. */ msleep(20); /* Send TURN_ON packet */ err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_TURN_ON); if (err) { DRM_ERROR("Failed to send turn on packet\n"); goto power_on_err; } return 0; power_on_err: err = -EIO; return err; }
static int sharp5_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; } /* address mode */ cmd = set_address_mode; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* pixel format*/ cmd = set_pixel_format; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x77, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* display on */ cmd = set_display_on; ret = mdfld_dsi_send_mcs_short_hs(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_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"); msleep(100); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } err = mdfld_dsi_send_mcs_short_hs(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; } // usleep_range(20000, 20100); err = mdfld_dsi_send_mcs_short_hs(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; } // usleep_range(1000, 1500); return 0; power_off_err: err = -EIO; return err; }
int smd_qhd_amoled_cmd_acl_update(struct mdfld_dsi_config *dsi_config) { int err; struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int data = ((mdfld_mot_cmn_acl_mode_get() == 1) ? 1 : 0); err = mdfld_dsi_send_mcs_short_hs(sender, 0xc0, data, 1, MDFLD_DSI_SEND_PACKAGE); if (err) DRM_ERROR("Failed to set panel to ACL mode %d\n", data); else PSB_DEBUG_ENTRY("Panel ACL mode set to %d\n", data); return err; }
static int sharp5_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_hs(sender, write_display_brightness, duty_val, 1, MDFLD_DSI_SEND_PACKAGE); return 0; }
int mdfld_dsi_sharp10x19_set_brightness(struct mdfld_dsi_config *dsi_config, int level) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); PSB_DEBUG_ENTRY("level = %d\n", level); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } mdfld_dsi_send_mcs_short_hs(sender, write_display_brightness, level, 1, MDFLD_DSI_SEND_PACKAGE); /* give some time for new backlight value to take effect */ msleep(20); return 0; }
static int samsungWQHD_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; if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } duty_val = (0xFF * level) / 255; mdfld_dsi_send_mcs_short_hs(sender, 0x51, duty_val, 1, MDFLD_DSI_SEND_PACKAGE); printk("[DISP] brightness level = %d\n", level); return 0; }
static int jdi25x16_cmd_power_on( struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err; int i; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; /* Sleep Out */ 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 power_on_err; } msleep(120); } sender->work_for_slave_panel = false; return 0; power_on_err: sender->work_for_slave_panel = false; err = -EIO; return err; }
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 mdfld_dsi_sharp10x19_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("Turn off video mode TMD panel...\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } /*send SHUT_DOWN packet*/ err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_SHUT_DOWN); if (err) { DRM_ERROR("Failed to send turn off packet\n"); goto power_off_err; } msleep(100); /* Set Display off */ err = mdfld_dsi_send_mcs_short_hs(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; } /* Wait for 1 frame after set_display_on. */ msleep(20); /* Sleep In */ err = mdfld_dsi_send_mcs_short_hs(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(60); err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 4, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Access Protect\n", __func__, __LINE__); goto power_off_err; } err = mdfld_dsi_send_gen_short_hs(sender, low_power_mode, 1, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Low Power Mode\n", __func__, __LINE__); goto power_off_err; } if (bias_en_gpio) gpio_set_value_cansleep(bias_en_gpio, 0); if (mipi_reset_gpio) gpio_set_value_cansleep(mipi_reset_gpio, 0); usleep_range(1000, 1500); return 0; power_off_err: return -EIO; }
static int jdi25x16_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; int i = 0; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Cannot get sender\n"); return -EINVAL; } for(i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; err = mdfld_dsi_send_mcs_short_hs(sender, soft_reset, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Panel software reset\n", __func__, __LINE__); goto ic_init_err; } mdelay(25); err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_pixel_format[0], jdi25x16_pixel_format[1], 1, 0); if (err) { DRM_ERROR("%s: %d: Set pixel format\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_long_hs(sender, jdi25x16_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, jdi25x16_page_addr, 5, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Page Address\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_set_tear_on[0], jdi25x16_set_tear_on[1], 1, 0); if (err) { DRM_ERROR("%s: %d: Set tear on\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_long_hs(sender, jdi25x16_tear_scanline, 3, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set tear scanline\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_set_brightness[0], jdi25x16_set_brightness[1], 1, 0); if (err) { DRM_ERROR("%s: %d: Set brightness\n", __func__, __LINE__); goto ic_init_err; } err = mdfld_dsi_send_mcs_short_hs(sender, jdi25x16_turn_on_backlight[0], jdi25x16_turn_on_backlight[1], 1, 0); if (err) { DRM_ERROR("%s: %d: Turn on backlight\n", __func__, __LINE__); goto ic_init_err; } } sender->work_for_slave_panel = false; return 0; ic_init_err: sender->work_for_slave_panel = false; err = -EIO; return err; }
static int orise1284a_vid_drv_ic_reset_workaround(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int i; sender->status = MDFLD_DSI_PKG_SENDER_FREE; mdfld_dsi_send_mcs_short_hs(sender, 0x11, 0, 0, MDFLD_DSI_SEND_PACKAGE); mdelay(5); mdfld_dsi_send_mcs_short_hs(sender, 0x29, 0, 0, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x12, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x84, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x90, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0xB6, 0xB6, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x92, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0xB3, 0x06, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0x00, 0x80, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); mdfld_dsi_send_mcs_short_hs(sender, 0xFF, 0x00, 1, MDFLD_DSI_SEND_PACKAGE); if (sender->status == MDFLD_DSI_CONTROL_ABNORMAL) { printk("[DISP] %s MDFLD_DSI_CONTROL_ABNORMAL !!\n", __func__); return -EIO; } return 0; }
static int jdi25x16_cmd_power_off( struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err; int i; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; mdelay(20); err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 0, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto power_off_err; } err = mdfld_dsi_send_gen_long_hs(sender, jdi25x16_set_normal_mode, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__); goto power_off_err; } err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 3, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto power_off_err; } } for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; /* Set Display off */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_off, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto power_off_err; } msleep(20); /* Sleep In */ err = mdfld_dsi_send_mcs_short_hs(sender, enter_sleep_mode, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Exit Sleep Mode\n", __func__, __LINE__); goto power_off_err; } msleep(80); } gpio_set_value_cansleep(bias_en_gpio, 0); msleep(10); for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 0, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto power_off_err; } err = mdfld_dsi_send_gen_short_hs(sender, low_power_mode, 1, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto power_off_err; } } sender->work_for_slave_panel = false; return 0; power_off_err: sender->work_for_slave_panel = false; err = -EIO; return err; }
int jdi25x16_cmd_set_mode(struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_pkg_sender *sender = mdfld_dsi_get_pkg_sender(dsi_config); int err; int i = 0; PSB_DEBUG_ENTRY("\n"); if (!sender) { DRM_ERROR("Failed to get DSI packet sender\n"); return -EINVAL; } for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; mdelay(20); err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 0, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto set_mode_err; } err = mdfld_dsi_send_gen_long_hs(sender, jdi25x16_set_vid_mode, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__); goto set_mode_err; } err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 3, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto set_mode_err; } /* Set Display on 0x29 */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto set_mode_err; } } for (i = 0; i < 2; i++) { if (i == 0) sender->work_for_slave_panel = false; else sender->work_for_slave_panel = true; mdelay(20); err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 0, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto set_mode_err; } err = mdfld_dsi_send_gen_long_hs(sender, jdi25x16_set_cmd_mode, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__); goto set_mode_err; } err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 3, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n", __func__, __LINE__); goto set_mode_err; } } sender->work_for_slave_panel = false; return 0; set_mode_err: sender->work_for_slave_panel = false; err = -EIO; return err; }
static int sharp5_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; /* exit sleep */ cmd = exit_sleep_mode; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; msleep(120); /* unlock MCW */ cmd = access_protect; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* reload NVM */ cmd = sharp5_remove_nvm_reload; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x1, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* send display brightness */ cmd = write_display_brightness; ret = mdfld_dsi_send_mcs_short_hs(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_hs(sender, cmd, 0x0c, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* CABC */ cmd = 0x55; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* tear on*/ cmd = set_tear_on; ret = mdfld_dsi_send_mcs_short_hs(sender, cmd, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* column address */ cmd = 0x2a; ret = mdfld_dsi_send_mcs_long_hs(sender, sharp5_mcs_column_addr, 5, MDFLD_DSI_SEND_PACKAGE); if (ret) goto err_out; /* page address */ cmd = 0x2b; ret = mdfld_dsi_send_mcs_long_hs(sender, sharp5_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; }
static int mdfld_dsi_jdi_power_on(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; } /* Sleep Out */ 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 power_on_err; } /* Wait for 6 frames after exit_sleep_mode. */ msleep(100); err = mdfld_dsi_send_gen_short_hs(sender,access_protect, 0x4, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n",__func__, __LINE__); goto power_on_err; } err = mdfld_dsi_send_gen_long_hs(sender, jdi_set_mode,2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Mode\n", __func__, __LINE__); goto power_on_err; } err = mdfld_dsi_send_gen_short_hs(sender,access_protect, 0x3, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set MCAP\n",__func__, __LINE__); goto power_on_err; } /* Set Display on */ err = mdfld_dsi_send_mcs_short_hs(sender, set_display_on, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Display On\n", __func__, __LINE__); goto power_on_err; } /* Wait for 1 frame after set_display_on. */ msleep(20); /* Send TURN_ON packet */ err = mdfld_dsi_send_dpi_spk_pkg_hs(sender, MDFLD_DSI_DPI_SPK_TURN_ON); if (err) { DRM_ERROR("Failed to send turn on packet\n"); goto power_on_err; } /* Write control display */ 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 power_on_err; } return 0; power_on_err: err = -EIO; return err; }
static int sharp5_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_hs(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; } usleep_range(20000, 20100); err = mdfld_dsi_send_mcs_short_hs(sender, set_tear_off, 0, 0, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Tear Off\n", __func__, __LINE__); goto power_off_err; } err = mdfld_dsi_send_mcs_short_hs(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(60); err = mdfld_dsi_send_gen_short_hs(sender, access_protect, 4, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Access Protect\n", __func__, __LINE__); goto power_off_err; } err = mdfld_dsi_send_gen_short_hs(sender, low_power_mode, 1, 2, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Low Power Mode\n", __func__, __LINE__); goto power_off_err; } 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; }
int mdfld_dsi_jdi_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; } /* Set Address Mode */ err = mdfld_dsi_send_mcs_long_hs(sender, jdi_set_address_mode, 4, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Address Mode\n", __func__, __LINE__); goto ic_init_err; } /* Set Pixel format */ err = mdfld_dsi_send_mcs_short_hs(sender, set_pixel_format, 0x70, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Pixel format\n", __func__, __LINE__); goto ic_init_err; } /* change "ff0f" according to the brightness desired. */ err = mdfld_dsi_send_mcs_long_hs(sender, jdi_write_display_brightness, 4, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Brightness\n", __func__, __LINE__); goto ic_init_err; } /* Write control CABC */ err = mdfld_dsi_send_mcs_short_hs(sender, write_ctrl_cabc, dsi_config->cabc_mode, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Write Control CABC\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 void jdi_cmd_controller_init( struct mdfld_dsi_config *dsi_config) { struct mdfld_dsi_hw_context *hw_ctx = &dsi_config->dsi_hw_context; #ifdef ENABLE_CSC_GAMMA /*FIXME*/ struct drm_device *dev = dsi_config->dev; struct csc_setting csc = { .pipe = 0, .type = CSC_REG_SETTING, .enable_state = true, .data_len = CSC_REG_COUNT, .data.csc_reg_data = { 0xFFB0424, 0xFDF, 0x4320FF1, 0xFDC, 0xFF50FF5, 0x415} }; struct gamma_setting gamma = { .pipe = 0, .type = GAMMA_REG_SETTING, .enable_state = true, .data_len = GAMMA_10_BIT_TABLE_COUNT, .gamma_tableX100 = { 0x000000, 0x030303, 0x050505, 0x070707, 0x090909, 0x0C0C0C, 0x0E0E0E, 0x101010, 0x121212, 0x141414, 0x171717, 0x191919, 0x1B1B1B, 0x1D1D1D, 0x1F1F1F, 0x212121, 0x232323, 0x252525, 0x282828, 0x2A2A2A, 0x2C2C2C, 0x2E2E2E, 0x303030, 0x323232, 0x343434, 0x363636, 0x383838, 0x3A3A3A, 0x3C3C3C, 0x3E3E3E, 0x404040, 0x424242, 0x444444, 0x464646, 0x484848, 0x4A4A4A, 0x4C4C4C, 0x4E4E4E, 0x505050, 0x525252, 0x545454, 0x565656, 0x585858, 0x5A5A5A, 0x5C5C5C, 0x5E5E5E, 0x606060, 0x626262, 0x646464, 0x666666, 0x686868, 0x6A6A6A, 0x6C6C6C, 0x6E6E6E, 0x707070, 0x727272, 0x747474, 0x767676, 0x787878, 0x7A7A7A, 0x7C7C7C, 0x7E7E7E, 0x808080, 0x828282, 0x848484, 0x868686, 0x888888, 0x8A8A8A, 0x8C8C8C, 0x8E8E8E, 0x909090, 0x929292, 0x949494, 0x969696, 0x989898, 0x999999, 0x9B9B9B, 0x9D9D9D, 0x9F9F9F, 0xA1A1A1, 0xA3A3A3, 0xA5A5A5, 0xA7A7A7, 0xA9A9A9, 0xABABAB, 0xADADAD, 0xAFAFAF, 0xB1B1B1, 0xB3B3B3, 0xB5B5B5, 0xB6B6B6, 0xB8B8B8, 0xBABABA, 0xBCBCBC, 0xBEBEBE, 0xC0C0C0, 0xC2C2C2, 0xC4C4C4, 0xC6C6C6, 0xC8C8C8, 0xCACACA, 0xCCCCCC, 0xCECECE, 0xCFCFCF, 0xD1D1D1, 0xD3D3D3, 0xD5D5D5, 0xD7D7D7, 0xD9D9D9, 0xDBDBDB, 0xDDDDDD, 0xDFDFDF, 0xE1E1E1, 0xE3E3E3, 0xE4E4E4, 0xE6E6E6, 0xE8E8E8, 0xEAEAEA, 0xECECEC, 0xEEEEEE, 0xF0F0F0, 0xF2F2F2, 0xF4F4F4, 0xF6F6F6, 0xF7F7F7, 0xF9F9F9, 0xFBFBFB, 0xFDFDFD} }; #endif PSB_DEBUG_ENTRY("\n"); /*reconfig lane configuration*/ dsi_config->lane_count = 3; dsi_config->lane_config = MDFLD_DSI_DATA_LANE_4_0; /* FIXME: enable CSC and GAMMA */ /*dsi_config->enable_gamma_csc = ENABLE_GAMMA | ENABLE_CSC;*/ /* This is for 400 mhz. Set it to 0 for 800mhz */ hw_ctx->cck_div = 1; hw_ctx->pll_bypass_mode = 0; if (IS_ANN(dev)) { hw_ctx->mipi_control = 0x18; hw_ctx->intr_en = 0xFFFFFFFF; hw_ctx->hs_tx_timeout = 0xFFFFFF; hw_ctx->lp_rx_timeout = 0xFFFFFF; hw_ctx->device_reset_timer = 0xff; hw_ctx->turn_around_timeout = 0xffff; hw_ctx->high_low_switch_count = 0x20; hw_ctx->clk_lane_switch_time_cnt = 0x21000e; hw_ctx->lp_byteclk = 0x4; hw_ctx->dphy_param = 0x1b104315; hw_ctx->eot_disable = 0x1; hw_ctx->init_count = 0x7d0; hw_ctx->dbi_bw_ctrl = 1390; hw_ctx->hs_ls_dbi_enable = 0x0; hw_ctx->dsi_func_prg = ((DBI_DATA_WIDTH_OPT2 << 13) | dsi_config->lane_count); hw_ctx->mipi = SEL_FLOPPED_HSTX | PASS_FROM_SPHY_TO_AFE | BANDGAP_CHICKEN_BIT | TE_TRIGGER_GPIO_PIN; } else { hw_ctx->mipi_control = 0x0; hw_ctx->intr_en = 0xFFFFFFFF; hw_ctx->hs_tx_timeout = 0xFFFFFF; hw_ctx->lp_rx_timeout = 0xFFFFFF; hw_ctx->device_reset_timer = 0xffff; hw_ctx->turn_around_timeout = 0x1a; hw_ctx->high_low_switch_count = 0x21; hw_ctx->clk_lane_switch_time_cnt = 0x21000f; hw_ctx->lp_byteclk = 0x5; hw_ctx->dphy_param = 0x25155b1e; hw_ctx->eot_disable = 0x3; hw_ctx->init_count = 0xf0; hw_ctx->dbi_bw_ctrl = 1390; hw_ctx->hs_ls_dbi_enable = 0x0; hw_ctx->dsi_func_prg = ((DBI_DATA_WIDTH_OPT2 << 13) | dsi_config->lane_count); hw_ctx->mipi = PASS_FROM_SPHY_TO_AFE | BANDGAP_CHICKEN_BIT | TE_TRIGGER_GPIO_PIN; } hw_ctx->video_mode_format = 0xf; #ifdef ENABLE_CSC_GAMMA /*FIXME*/ if (dsi_config->enable_gamma_csc & ENABLE_CSC) { /* setting the tuned csc setting */ drm_psb_enable_color_conversion = 1; mdfld_intel_crtc_set_color_conversion(dev, &csc); } if (dsi_config->enable_gamma_csc & ENABLE_GAMMA) { /* setting the tuned gamma setting */ drm_psb_enable_gamma = 1; mdfld_intel_crtc_set_gamma(dev, &gamma); } #endif } static int jdi_cmd_panel_connection_detect( struct mdfld_dsi_config *dsi_config) { int status; int pipe = dsi_config->pipe; PSB_DEBUG_ENTRY("\n"); if (pipe == 0) { status = MDFLD_DSI_PANEL_CONNECTED; } else { DRM_INFO("%s: do NOT support dual panel\n", __func__); status = MDFLD_DSI_PANEL_DISCONNECTED; } return status; } static int jdi_cmd_power_on( 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("Failed to get DSI packet sender\n"); return -EINVAL; } err = mdfld_dsi_send_mcs_short_hs(sender, set_address_mode, 0x0, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Address Mode\n", __func__, __LINE__); goto power_err; } usleep_range(20000, 20100); err = mdfld_dsi_send_mcs_short_hs(sender, set_pixel_format, 0x77, 1, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("%s: %d: Set Pixel format\n", __func__, __LINE__); goto power_err; } /*turn on display*/ err = mdfld_dsi_send_dcs(sender, set_display_on, NULL, 0, CMD_DATA_SRC_SYSTEM_MEM, MDFLD_DSI_SEND_PACKAGE); if (err) { DRM_ERROR("faild to set_display_on mode\n"); goto power_err; } usleep_range(20000, 20100); power_err: return err; } static void __vpro2_power_ctrl(bool on) { u8 addr, value; addr = 0xad; if (intel_scu_ipc_ioread8(addr, &value)) DRM_ERROR("%s: %d: failed to read vPro2\n", __func__, __LINE__); /* Control vPROG2 power rail with 2.85v. */ if (on) value |= 0x1; else value &= ~0x1; if (intel_scu_ipc_iowrite8(addr, value)) DRM_ERROR("%s: %d: failed to write vPro2\n", __func__, __LINE__); }