static ssize_t mipi_samsung_fps_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct msm_fb_data_type *mfd; int goal_fps; int level = atoi(buf); mfd = platform_get_drvdata(msd.msm_pdev); if (mfd->panel_power_on == FALSE) { pr_err("%s fps set error, panel power off 1", __func__); return size; } if (level == 0) goal_fps = 60; else if (level == 1) goal_fps = 42; else if (level == 2) goal_fps = 51; else { pr_info("%s fps set error : invalid level %d", __func__, level); return size; } if (current_fps != goal_fps) current_fps = goal_fps; else return size; mutex_lock(&dsi_tx_mutex); if (mfd->panel_power_on == FALSE) { mutex_unlock(&dsi_tx_mutex); pr_info("%s fps set error, panel power off 2", __func__); return size; } else { if (get_ldi_chip() == LDI_LSI) { mipi_runtime_clk_change(current_fps); mutex_unlock(&dsi_tx_mutex); } else mutex_unlock(&dsi_tx_mutex); } pr_info("%s goal_fps : %d", __func__, goal_fps); return size; }
static int mipi_samsung_disp_on(struct platform_device *pdev) { struct msm_fb_data_type *mfd; struct mipi_panel_info *mipi; static int first_boot_on; u32 tmp; mfd = platform_get_drvdata(pdev); if (unlikely(!mfd)) return -ENODEV; if (unlikely(mfd->key != MFD_KEY)) return -EINVAL; mipi = &mfd->panel_info.mipi; if (!first_boot_on) { execute_panel_init(mfd); first_boot_on = 1; } if (get_ldi_chip() == LDI_MAGNA) { mipi_set_tx_power_mode(LP_TX_MODE); mipi_samsung_disp_send_cmd(mfd, PANEL_READY_TO_ON, false); mipi_set_tx_power_mode(HS_TX_MODE); /* force dsi_clk alway on * Magan nees clk lane LP mode before sending 0xF0 & 0xFC & 0xD2 cmds */ tmp = MIPI_INP(MIPI_DSI_BASE + 0xA8); tmp |= (1<<28); MIPI_OUTP(MIPI_DSI_BASE + 0xA8, tmp); wmb(); } if (get_auto_brightness() >= 6) msd.mpd->first_bl_hbm_psre = 1; sec_debug_mdp_reset_value(); pr_info("[%s]\n", __func__); return 0; }
static int mipi_samsung_disp_on_in_video_engine(struct platform_device *pdev) { struct msm_fb_data_type *mfd; mfd = platform_get_drvdata(pdev); if (unlikely(!mfd)) return -ENODEV; if (unlikely(mfd->key != MFD_KEY)) return -EINVAL; mipi_samsung_disp_send_cmd(mfd, PANEL_ON, false); mfd->resume_state = MIPI_RESUME_STATE; touch_display_status = MIPI_RESUME_STATE; if ((msd.mpd->manufacture_id & 0xFF) == 0) mipi_samsung_disp_send_cmd(mfd, PANEL_NEED_FLIP, false); #if defined(RUMTIME_MIPI_CLK_CHANGE) current_fps = mfd->panel_info.mipi.frame_rate; #endif /* To setting gpio_configuration under wake-up condition */ if (get_ldi_chip() == LDI_LSI) { gpio_get_param.pull = PM_GPIO_PULL_NO; pm8xxx_gpio_config(pm_gpio8, &gpio_get_param); /* ERR_FG */ gpio_get_param.pull = PM_GPIO_PULL_UP_1P5_30; pm8xxx_gpio_config(pm_gpio5, &gpio_get_param); /* LDI DET */ } else { gpio_get_param.pull = PM_GPIO_PULL_NO; pm8xxx_gpio_config(pm_gpio8, &gpio_get_param); pm8xxx_gpio_config(pm_gpio5, &gpio_get_param); } pr_info("[%s] ID : 0x%x LDI : %s", __func__, msd.mpd->manufacture_id, ldi_manupacture == LDI_MAGNA ? "LDI_MAGNA" : "LDI_LSI"); return 0; }
static void execute_panel_init(struct msm_fb_data_type *mfd) { int i; struct SMART_DIM *psmart = &(msd.mpd->smart_se6e8fa); char *mtp_buffer = (char *)&(msd.mpd->smart_se6e8fa.MTP_ORIGN); char *mtp_buffer1 = (char *)&(msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1); /* LSI */ char *mtp_buffer2 = (char *)&(msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_2); char *mtp_buffer3 = (char *)&(msd.mpd->smart_se6e8fa.hbm_reg.b6_reg_lsi); char temp[4]; char C8_reg[3]; /* MAGNA */ char *mtp_buffer4 = (char *)&(msd.mpd->smart_se6e8fa.hbm_reg.b1_reg); char *mtp_buffer5 = (char *)&(msd.mpd->smart_se6e8fa.hbm_reg.b6_reg_magna); mipi_samsung_disp_send_cmd(mfd, PANEL_MTP_ENABLE, false); /* read LDi ID */ msd.mpd->manufacture_id = mipi_samsung_manufacture_id(mfd); msd.mpd->cmd_set_change(PANEL_ON, msd.mpd->manufacture_id); /* smart dimming & AID*/ psmart->plux_table = msd.mpd->lux_table; psmart->lux_table_max = msd.mpd->lux_table_max_cnt; psmart->ldi_revision = msd.mpd->manufacture_id; read_mtp(MTP_START_ADDR, 0, GAMMA_SET_MAX, mtp_buffer, mfd); if (get_ldi_chip() == LDI_LSI) { pr_info("#### LSI panel!!\n"); if (msd.mpd->ldi_rev == 'H') { read_mtp(0xCB, 0, ARRAY_SIZE(C8_reg), C8_reg, mfd); // hover_flicker.. msd.mpd->hover_flicker_change(C8_reg[2]); } read_mtp(MTP_START_ADDR, 34-1, 7, mtp_buffer1, mfd); // read C8h 34~40th if (msd.mpd->ldi_rev == 'I') read_mtp(MTP_START_ADDR, 73-1, 15, mtp_buffer2, mfd); // read C8h 73~87th else read_mtp(0xb6, 17-1, 1, mtp_buffer3, mfd); // recover original's ELVSS offset b6's 17th } else if (get_ldi_chip() == LDI_MAGNA) { pr_info("#### MAGNA panel!!\n"); read_mtp(0xB1, 10-1, 6, mtp_buffer4, mfd); // read B1h 10~18th read_mtp(0xB6, 4-1, 23, mtp_buffer5, mfd); // read B6h 4~26th } i = 0; #ifdef CONFIG_HBM_PSRE_DEBUG pr_info("%s c8[34~40](%x)(%x)(%x)(%x)(%x)(%x)(%x)", __func__, msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[0], msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[1], msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[2], msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[3], msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[4], msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[5], msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[6]); pr_info("\n"); printk("c8_reg_1 : "); for(i=0; i<7; i++) printk("%x ",msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_1[i]); pr_info("\n"); if (msd.mpd->ldi_rev == 'I') { printk("c8_reg_2 : "); for(i=0; i<15; i++) printk("%x ",msd.mpd->smart_se6e8fa.hbm_reg.c8_reg_2[i]); pr_info("\n"); } else printk("b6_reg : %x \n",msd.mpd->smart_se6e8fa.hbm_reg.b6_reg[0]); #endif #if defined(CONFIG_MDNIE_LITE_TUNING) read_mtp(LDI_COORDINATE_REG, 0, ARRAY_SIZE(temp), temp, mfd); msd.mpd->coordinate[0] = temp[0] << 8 | temp[1]; /* X */ msd.mpd->coordinate[1] = temp[2] << 8 | temp[3]; /* Y */ coordinate_tunning(msd.mpd->coordinate[0], msd.mpd->coordinate[1]); #endif /* TO set default temperature value 25 degree*/ msd.mpd->temperature_value = 25; mipi_samsung_disp_send_cmd(mfd, PANEL_MTP_DISABLE, false); smart_dimming_init(&(msd.mpd->smart_se6e8fa)); }