aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c
diff options
context:
space:
mode:
authorcodeworkx <codeworkx@cyanogenmod.com>2012-09-17 17:53:57 +0200
committercodeworkx <codeworkx@cyanogenmod.com>2012-09-18 16:31:59 +0200
commitc28265764ec6ad9995eb0c761a376ffc9f141fcd (patch)
tree3ad899757480d47deb2be6011509a4243e8e0dc2 /drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c
parent0ddbcb39c0dc0318f68d858f25a96a074142af2f (diff)
downloadkernel_samsung_smdk4412-c28265764ec6ad9995eb0c761a376ffc9f141fcd.zip
kernel_samsung_smdk4412-c28265764ec6ad9995eb0c761a376ffc9f141fcd.tar.gz
kernel_samsung_smdk4412-c28265764ec6ad9995eb0c761a376ffc9f141fcd.tar.bz2
applied patches from i9305 jb sources, updated mali to r3p0
Change-Id: Iec4bc4e2fb59e2cf5b4d25568a644d4e3719565e
Diffstat (limited to 'drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c')
-rw-r--r--drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c b/drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c
index 5ccde4a..e0d7d4e 100644
--- a/drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c
+++ b/drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c
@@ -477,16 +477,27 @@ static int g2d_remove(struct platform_device *dev)
#if defined(CONFIG_HAS_EARLYSUSPEND)
void g2d_early_suspend(struct early_suspend *h)
{
+ int i = 0;
+
atomic_set(&g2d_dev->ready_to_run, 0);
/* wait until G2D running is finished */
while(1) {
if (!atomic_read(&g2d_dev->in_use))
break;
-
+
msleep_interruptible(2);
+
+ i++;
+ /* Timeout 1sec */
+ if (i > 500) {
+ g2d_clk_enable(g2d_dev);
+ g2d_reset(g2d_dev);
+ g2d_clk_disable(g2d_dev);
+ break;
+ }
}
-
+
g2d_sysmmu_off(g2d_dev);
#if defined(CONFIG_EXYNOS_DEV_PD)
@@ -513,25 +524,37 @@ void g2d_late_resume(struct early_suspend *h)
#if !defined(CONFIG_HAS_EARLYSUSPEND)
static int g2d_suspend(struct platform_device *dev, pm_message_t state)
{
+ int i = 0;
+
atomic_set(&g2d_dev->ready_to_run, 0);
/* wait until G2D running is finished */
while(1) {
if (!atomic_read(&g2d_dev->in_use))
break;
-
+
msleep_interruptible(2);
+
+ i++;
+ /* Timeout 1sec */
+ if (i > 500) {
+ g2d_clk_enable(g2d_dev);
+ g2d_reset(g2d_dev);
+ g2d_clk_disable(g2d_dev);
+ break;
+ }
}
-
+
g2d_sysmmu_off(g2d_dev);
-
+
#if defined(CONFIG_EXYNOS_DEV_PD)
/* disable the power domain */
pm_runtime_put(g2d_dev->dev);
-#endif
+#endif
return 0;
}
+
static int g2d_resume(struct platform_device *pdev)
{