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

}