static void mdss_panel_tft_outdoormode_update(struct mdss_dsi_ctrl_pdata *ctrl)
{
	struct samsung_display_driver_data *vdd = check_valid_ctrl(ctrl);
	if (IS_ERR_OR_NULL(vdd)) {
		pr_err("%s: Invalid data ctrl : 0x%zx vdd : 0x%zx", __func__, (size_t)ctrl, (size_t)vdd);
		return;
	}
	pr_info("%s: tft panel autobrightness update\n", __func__);

	switch(vdd->auto_brightness)
	{
	case 0: mdss_samsung_cabc_update();
			if(vdd->prev_auto_brightness == 6)
				vdd->panel_func.samsung_bl_ic_outdoor(0);
			break;
	case 1:
	case 2:
	case 3:
	case 4: mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_ON);
			if(vdd->prev_auto_brightness == 6)
				vdd->panel_func.samsung_bl_ic_outdoor(0);
			break;
	case 5: mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF);
			if(vdd->prev_auto_brightness == 6)
				vdd->panel_func.samsung_bl_ic_outdoor(0);
			break;
	case 6: mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF);
			vdd->panel_func.samsung_bl_ic_outdoor(1);
			break;
	}
	vdd->prev_auto_brightness =	vdd->auto_brightness;
}
static int mdss_panel_on_post(struct mdss_dsi_ctrl_pdata *ctrl)
{
	struct samsung_display_driver_data *vdd = check_valid_ctrl(ctrl);

	if (IS_ERR_OR_NULL(vdd)) {
		pr_err("%s: Invalid data ctrl : 0x%zx vdd : 0x%zx", __func__, (size_t)ctrl, (size_t)vdd);
		return false;
	}

	pr_info("%s %d\n", __func__, ctrl->ndx);

	if(ctrl->bklt_ctrl == BL_DCS_CMD)
		ktd3102_set_led_current(5,ctrl);	/* set max current to "6"/19.8mA, only when CABC is enabled */

	if(vdd->support_cabc)
		mdss_samsung_cabc_update();

	if(ctrl->bklt_ctrl == BL_DCS_CMD && is_first_boot){
		mdss_samsung_brightness_dcs(ctrl, LCD_DEFAUL_BL_LEVEL);
		is_first_boot = 0;
	}


	return true;
}
static void backlight_tft_late_on(struct mdss_dsi_ctrl_pdata *ctrl)
{
	struct samsung_display_driver_data *vdd = check_valid_ctrl(ctrl);

	if (IS_ERR_OR_NULL(vdd)) {
		pr_err("%s: Invalid data ctrl : 0x%zx vdd : 0x%zx", __func__, (size_t)ctrl, (size_t)vdd);
		return;
	}

	if (!mdss_panel_attach_get(ctrl)) {
		pr_err("%s: mdss_panel_attach_get(%d) : %d\n",__func__, ctrl->ndx, mdss_panel_attach_get(ctrl));
		return;
	}

	if (gpio_is_valid(vdd->dtsi_data[ctrl->ndx].backlight_tft_gpio[0])) {
		gpio_set_value(vdd->dtsi_data[ctrl->ndx].backlight_tft_gpio[0], 1);
		msleep(80);
	}

	if(ctrl->bklt_ctrl == BL_SS_PWM && is_first_boot){
		if (vdd->panel_func.samsung_brightness_tft_pwm)
			vdd->panel_func.samsung_brightness_tft_pwm(ctrl,LCD_DEFAUL_BL_LEVEL);
		is_first_boot = 0;
	}

	pr_info("%s : Backlight is on\n", __func__);

	if(vdd->support_cabc)
		mdss_samsung_cabc_update();

}
static void mdss_panel_tft_outdoormode_update(struct mdss_dsi_ctrl_pdata *ctrl)
{
	struct samsung_display_driver_data *vdd = check_valid_ctrl(ctrl);
	struct mdss_panel_info *pinfo = NULL;
	if (IS_ERR_OR_NULL(vdd)) {
		pr_err("%s: Invalid data ctrl : 0x%zx vdd : 0x%zx", __func__, (size_t)ctrl, (size_t)vdd);
		return;
	}

	pinfo = &(ctrl->panel_data.panel_info);
	if (pinfo->blank_state == MDSS_PANEL_BLANK_BLANK) {
		pr_info("%s: skip mdss_panel_tft_outdoormode_update %d\n", __func__, __LINE__);
		return;
	}

	pr_info("%s: tft panel autobrightness update\n", __func__);

	if(vdd->prev_auto_brightness == vdd->auto_brightness)
		return;

	switch(vdd->auto_brightness)
	{
	case 0: mdss_samsung_cabc_update();
			if(vdd->prev_auto_brightness == 6)
				vdd->panel_func.samsung_bl_ic_outdoor(0);
			break;
	case 1:
	case 2:
	case 3:
	case 4:
			if(vdd->prev_auto_brightness && vdd->prev_auto_brightness < 5) {
				vdd->prev_auto_brightness = vdd->auto_brightness;
				return;
			}
			if(vdd->prev_auto_brightness == 6)
				vdd->panel_func.samsung_bl_ic_outdoor(0);
			vdd->prev_auto_brightness = vdd->auto_brightness;
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF_DUTY);
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_ON);
			if(vdd->dtsi_data[ctrl->ndx].cabc_delay && !vdd->display_ststus_dsi[ctrl->ndx].disp_on_pre)
				usleep(vdd->dtsi_data[ctrl->ndx].cabc_delay);
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_ON_DUTY);
			break;
	case 5:
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF_DUTY);
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF);
			if(vdd->prev_auto_brightness == 6)
				vdd->panel_func.samsung_bl_ic_outdoor(0);
			break;
	case 6:
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF_DUTY);
			mdss_samsung_send_cmd(vdd->ctrl_dsi[DISPLAY_1], PANEL_CABC_OFF);
			vdd->panel_func.samsung_bl_ic_outdoor(1);
			break;
	}
	vdd->prev_auto_brightness = vdd->auto_brightness;
}
static int mdss_panel_on_post(struct mdss_dsi_ctrl_pdata *ctrl)
{
	struct samsung_display_driver_data *vdd = check_valid_ctrl(ctrl);

	if (IS_ERR_OR_NULL(vdd)) {
		pr_err("%s: Invalid data ctrl : 0x%zx vdd : 0x%zx", __func__, (size_t)ctrl, (size_t)vdd);
		return false;
	}

	pr_info("%s %d\n", __func__, ctrl->ndx);

	mdss_samsung_cabc_update();

	return true;
}
static int mdss_panel_on_post(struct mdss_dsi_ctrl_pdata *ctrl)
{
	struct samsung_display_driver_data *vdd = check_valid_ctrl(ctrl);

	if (IS_ERR_OR_NULL(vdd)) {
		pr_err("%s: Invalid data ctrl : 0x%zx vdd : 0x%zx", __func__, (size_t)ctrl, (size_t)vdd);
		return false;
	}

	pr_info("%s %d\n", __func__, ctrl->ndx);

	mdss_samsung_cabc_update();

	if(is_first_boot){
		if (ctrl->panel_data.set_backlight)
			ctrl->panel_data.set_backlight(&ctrl->panel_data, LCD_DEFAUL_BL_LEVEL);
		is_first_boot = 0;
	}

	return true;
}