diff options
author | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-17 17:53:57 +0200 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-18 16:31:59 +0200 |
commit | c28265764ec6ad9995eb0c761a376ffc9f141fcd (patch) | |
tree | 3ad899757480d47deb2be6011509a4243e8e0dc2 /drivers/media/video/samsung/fimg2d3x-exynos4/fimg2d_dev.c | |
parent | 0ddbcb39c0dc0318f68d858f25a96a074142af2f (diff) | |
download | kernel_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.c | 35 |
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) { |