static int  s5p_dp_shutdown(struct platform_device *pdev)
{
	struct s5p_dp_device *dp = platform_get_drvdata(pdev);
	struct s5p_dp_platdata *pdata = dp->dev->platform_data;

	lcd_device_unregister(dp->lcd);

	if (pdata->backlight_off)
		pdata->backlight_off();

	if (pdata->lcd_off)
		pdata->lcd_off();

	s5p_dp_disable(dp);

	free_irq(dp->irq, dp);
	iounmap(dp->reg_base);
	clk_put(dp->clock);

	release_mem_region(dp->res->start, resource_size(dp->res));

	pm_runtime_disable(dp->dev);

	kfree(dp);

	return 0;
}
static void  s5p_dp_shutdown(struct platform_device *pdev)
{
	struct s5p_dp_device *dp = platform_get_drvdata(pdev);
	struct s5p_dp_platdata *pdata = dp->dev->platform_data;

#ifdef CONFIG_S5P_DP_PSR
	mutex_lock(&dp->lock);
	dp->user_disabled = true;
	fb_unregister_client(&dp->notifier);
	mutex_unlock(&dp->lock);
#endif
	lcd_device_unregister(dp->lcd);

	if (pdata->backlight_off)
		pdata->backlight_off();

	if (pdata->lcd_off)
		pdata->lcd_off();

	s5p_dp_disable(dp);

	free_irq(dp->irq, dp);
	iounmap(dp->reg_base);
	clk_put(dp->clock);

	release_mem_region(dp->res->start, resource_size(dp->res));

	pm_runtime_disable(dp->dev);

	kfree(dp);
}
static int __devexit s5p_dp_remove(struct platform_device *pdev)
{
	struct s5p_dp_device *dp = platform_get_drvdata(pdev);

#ifdef CONFIG_S5P_DP_PSR
	mutex_lock(&dp->lock);
	fb_unregister_client(&dp->notifier);
	mutex_unlock(&dp->lock);
#endif

	free_irq(dp->irq, dp);

	lcd_device_unregister(dp->lcd);

	s5p_dp_disable(dp);

	iounmap(dp->reg_base);
	clk_put(dp->clock);

	release_mem_region(dp->res->start, resource_size(dp->res));

	pm_runtime_disable(dp->dev);

	kfree(dp);

	return 0;
}
static int s5p_dp_set_power(struct lcd_device *lcd, int power)
{
	struct s5p_dp_device *dp = lcd_get_data(lcd);
	int retval;

#ifdef CONFIG_S5P_DP_PSR
	if (dp->user_disabled)
		return 0;
#endif

#ifdef CONFIG_S5P_DP_ESD_RECOVERY
	dp->set_power_state = power;
#endif

	if (power == FB_BLANK_UNBLANK) {
		retval = s5p_dp_enable(dp);
		if (retval < 0)
			return retval;
	} else {
#ifdef CONFIG_S5P_DP_ESD_RECOVERY
		if (dp->enabled)
			s5p_dp_disable_esd_interrupt(dp);
		flush_delayed_work_sync(&dp->esd_recovery);
#endif
		s5p_dp_disable(dp);
	}

	return 0;
}
static void s5p_dp_shutdown(struct platform_device *pdev)
{
	struct s5p_dp_device *dp = platform_get_drvdata(pdev);
	struct s5p_dp_platdata *pdata = dp->dev->platform_data;

	lcd_device_unregister(dp->lcd);

	if (pdata->backlight_off)
		pdata->backlight_off();

	if (pdata->lcd_off)
		pdata->lcd_off();

	s5p_dp_disable(dp);

#if !defined(CONFIG_SOC_EXYNOS5260)
	free_irq(dp->irq, dp);
#endif
	iounmap(dp->reg_base);
	clk_put(dp->clock);

	release_mem_region(dp->res->start, resource_size(dp->res));

	pm_runtime_disable(dp->dev);

	kfree(dp);
}
static int s5p_dp_set_power(struct lcd_device *lcd, int power)
{
	struct s5p_dp_device *dp = lcd_get_data(lcd);
	int retval;

	if (power == FB_BLANK_UNBLANK) {
		retval = s5p_dp_enable(dp);
		if (retval < 0)
			return retval;
	} else {
		s5p_dp_disable(dp);
	}

	return 0;
}
void esd_recover_handler(struct work_struct *work)
{
	struct s5p_dp_device *dp =
		container_of(work, struct s5p_dp_device, esd_recovery.work);
	struct s5p_dp_platdata *pdata = dp->dev->platform_data;

	if (!dp->enabled)
		return;

	dp->esd_count++;
	dev_info(dp->dev, "esd_recovery start. (%d) \n", dp->esd_count);

#ifdef CONFIG_S5P_DP_PSR
	s3c_fb_psr_exit_from_touch();
	usleep_range(40000, 40000);
#endif

	if (dp->set_power_state != FB_BLANK_UNBLANK)
		goto esd_done;
#ifdef CONFIG_S5P_DP_PSR
	dev_info(dp->dev, "esd_recovery state (%d, %d) \n",
		 dp->psr_enter_state, dp->psr_exit_state);
#endif
	s5p_dp_disable(dp);

	if (pdata->phy_exit)
		pdata->phy_exit();

	if (pdata->lcd_off)
		pdata->lcd_off();

	if (pdata->lcd_on)
		pdata->lcd_on();

	if (dp->set_power_state != FB_BLANK_UNBLANK)
		goto esd_done;

	s5p_dp_enable(dp);

esd_done:
	dev_info(dp->dev, "esd_recovery done. \n");
}
static int __devexit s5p_dp_remove(struct platform_device *pdev)
{
	struct s5p_dp_device *dp = platform_get_drvdata(pdev);

	free_irq(dp->irq, dp);

	lcd_device_unregister(dp->lcd);

	s5p_dp_disable(dp);

	iounmap(dp->reg_base);
	clk_put(dp->clock);

	release_mem_region(dp->res->start, resource_size(dp->res));

	pm_runtime_disable(dp->dev);

	kfree(dp);

	return 0;
}