Commit 9dd44d5d authored by Manjunathappa, Prakash's avatar Manjunathappa, Prakash Committed by Florian Tobias Schandinat

da8xx-fb: add pm_runtime support

Add pm_runtime support to the da8xx-fb frame buffer driver.
Signed-off-by: default avatarManjunathappa, Prakash <prakash.pm@ti.com>
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
parent b8c4321f
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/device.h> #include <linux/device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/pm_runtime.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/clk.h> #include <linux/clk.h>
...@@ -1037,8 +1038,8 @@ static int __devexit fb_remove(struct platform_device *dev) ...@@ -1037,8 +1038,8 @@ static int __devexit fb_remove(struct platform_device *dev)
dma_free_coherent(NULL, par->vram_size, par->vram_virt, dma_free_coherent(NULL, par->vram_size, par->vram_virt,
par->vram_phys); par->vram_phys);
free_irq(par->irq, par); free_irq(par->irq, par);
clk_disable(par->lcdc_clk); pm_runtime_put_sync(&dev->dev);
clk_put(par->lcdc_clk); pm_runtime_disable(&dev->dev);
framebuffer_release(info); framebuffer_release(info);
iounmap((void __iomem *)da8xx_fb_reg_base); iounmap((void __iomem *)da8xx_fb_reg_base);
release_mem_region(lcdc_regs->start, resource_size(lcdc_regs)); release_mem_region(lcdc_regs->start, resource_size(lcdc_regs));
...@@ -1272,9 +1273,9 @@ static int __devinit fb_probe(struct platform_device *device) ...@@ -1272,9 +1273,9 @@ static int __devinit fb_probe(struct platform_device *device)
ret = -ENODEV; ret = -ENODEV;
goto err_ioremap; goto err_ioremap;
} }
ret = clk_enable(fb_clk);
if (ret) pm_runtime_enable(&device->dev);
goto err_clk_put; pm_runtime_get_sync(&device->dev);
/* Determine LCD IP Version */ /* Determine LCD IP Version */
switch (lcdc_read(LCD_PID_REG)) { switch (lcdc_read(LCD_PID_REG)) {
...@@ -1302,7 +1303,7 @@ static int __devinit fb_probe(struct platform_device *device) ...@@ -1302,7 +1303,7 @@ static int __devinit fb_probe(struct platform_device *device)
if (i == ARRAY_SIZE(known_lcd_panels)) { if (i == ARRAY_SIZE(known_lcd_panels)) {
dev_err(&device->dev, "GLCD: No valid panel found\n"); dev_err(&device->dev, "GLCD: No valid panel found\n");
ret = -ENODEV; ret = -ENODEV;
goto err_clk_disable; goto err_pm_runtime_disable;
} else } else
dev_info(&device->dev, "GLCD: Found %s panel\n", dev_info(&device->dev, "GLCD: Found %s panel\n",
fb_pdata->type); fb_pdata->type);
...@@ -1314,7 +1315,7 @@ static int __devinit fb_probe(struct platform_device *device) ...@@ -1314,7 +1315,7 @@ static int __devinit fb_probe(struct platform_device *device)
if (!da8xx_fb_info) { if (!da8xx_fb_info) {
dev_dbg(&device->dev, "Memory allocation failed for fb_info\n"); dev_dbg(&device->dev, "Memory allocation failed for fb_info\n");
ret = -ENOMEM; ret = -ENOMEM;
goto err_clk_disable; goto err_pm_runtime_disable;
} }
par = da8xx_fb_info->par; par = da8xx_fb_info->par;
...@@ -1476,11 +1477,9 @@ static int __devinit fb_probe(struct platform_device *device) ...@@ -1476,11 +1477,9 @@ static int __devinit fb_probe(struct platform_device *device)
err_release_fb: err_release_fb:
framebuffer_release(da8xx_fb_info); framebuffer_release(da8xx_fb_info);
err_clk_disable: err_pm_runtime_disable:
clk_disable(fb_clk); pm_runtime_put_sync(&device->dev);
pm_runtime_disable(&device->dev);
err_clk_put:
clk_put(fb_clk);
err_ioremap: err_ioremap:
iounmap((void __iomem *)da8xx_fb_reg_base); iounmap((void __iomem *)da8xx_fb_reg_base);
...@@ -1503,7 +1502,7 @@ static int fb_suspend(struct platform_device *dev, pm_message_t state) ...@@ -1503,7 +1502,7 @@ static int fb_suspend(struct platform_device *dev, pm_message_t state)
fb_set_suspend(info, 1); fb_set_suspend(info, 1);
lcd_disable_raster(true); lcd_disable_raster(true);
clk_disable(par->lcdc_clk); pm_runtime_put_sync(&dev->dev);
console_unlock(); console_unlock();
return 0; return 0;
...@@ -1514,7 +1513,7 @@ static int fb_resume(struct platform_device *dev) ...@@ -1514,7 +1513,7 @@ static int fb_resume(struct platform_device *dev)
struct da8xx_fb_par *par = info->par; struct da8xx_fb_par *par = info->par;
console_lock(); console_lock();
clk_enable(par->lcdc_clk); pm_runtime_get_sync(&dev->dev);
if (par->blank == FB_BLANK_UNBLANK) { if (par->blank == FB_BLANK_UNBLANK) {
lcd_enable_raster(); lcd_enable_raster();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment