aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/da8xx-fb.c
diff options
context:
space:
mode:
authorManjunathappa, Prakash <prakash.pm@ti.com>2012-09-21 11:50:57 -0400
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2012-10-09 22:04:26 -0400
commit9dd44d5d2305862e61bf610b343658db38d9bd76 (patch)
treeacf02bd6a526b83597db86ea0d1f5de2f0a403ae /drivers/video/da8xx-fb.c
parentb8c4321f3d194469007f5f5f2b34ec278c264a04 (diff)
da8xx-fb: add pm_runtime support
Add pm_runtime support to the da8xx-fb frame buffer driver. Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Diffstat (limited to 'drivers/video/da8xx-fb.c')
-rw-r--r--drivers/video/da8xx-fb.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c
index af2aa387ec17..4280d23e3300 100644
--- a/drivers/video/da8xx-fb.c
+++ b/drivers/video/da8xx-fb.c
@@ -26,6 +26,7 @@
26#include <linux/device.h> 26#include <linux/device.h>
27#include <linux/platform_device.h> 27#include <linux/platform_device.h>
28#include <linux/uaccess.h> 28#include <linux/uaccess.h>
29#include <linux/pm_runtime.h>
29#include <linux/interrupt.h> 30#include <linux/interrupt.h>
30#include <linux/wait.h> 31#include <linux/wait.h>
31#include <linux/clk.h> 32#include <linux/clk.h>
@@ -1037,8 +1038,8 @@ static int __devexit fb_remove(struct platform_device *dev)
1037 dma_free_coherent(NULL, par->vram_size, par->vram_virt, 1038 dma_free_coherent(NULL, par->vram_size, par->vram_virt,
1038 par->vram_phys); 1039 par->vram_phys);
1039 free_irq(par->irq, par); 1040 free_irq(par->irq, par);
1040 clk_disable(par->lcdc_clk); 1041 pm_runtime_put_sync(&dev->dev);
1041 clk_put(par->lcdc_clk); 1042 pm_runtime_disable(&dev->dev);
1042 framebuffer_release(info); 1043 framebuffer_release(info);
1043 iounmap((void __iomem *)da8xx_fb_reg_base); 1044 iounmap((void __iomem *)da8xx_fb_reg_base);
1044 release_mem_region(lcdc_regs->start, resource_size(lcdc_regs)); 1045 release_mem_region(lcdc_regs->start, resource_size(lcdc_regs));
@@ -1272,9 +1273,9 @@ static int __devinit fb_probe(struct platform_device *device)
1272 ret = -ENODEV; 1273 ret = -ENODEV;
1273 goto err_ioremap; 1274 goto err_ioremap;
1274 } 1275 }
1275 ret = clk_enable(fb_clk); 1276
1276 if (ret) 1277 pm_runtime_enable(&device->dev);
1277 goto err_clk_put; 1278 pm_runtime_get_sync(&device->dev);
1278 1279
1279 /* Determine LCD IP Version */ 1280 /* Determine LCD IP Version */
1280 switch (lcdc_read(LCD_PID_REG)) { 1281 switch (lcdc_read(LCD_PID_REG)) {
@@ -1302,7 +1303,7 @@ static int __devinit fb_probe(struct platform_device *device)
1302 if (i == ARRAY_SIZE(known_lcd_panels)) { 1303 if (i == ARRAY_SIZE(known_lcd_panels)) {
1303 dev_err(&device->dev, "GLCD: No valid panel found\n"); 1304 dev_err(&device->dev, "GLCD: No valid panel found\n");
1304 ret = -ENODEV; 1305 ret = -ENODEV;
1305 goto err_clk_disable; 1306 goto err_pm_runtime_disable;
1306 } else 1307 } else
1307 dev_info(&device->dev, "GLCD: Found %s panel\n", 1308 dev_info(&device->dev, "GLCD: Found %s panel\n",
1308 fb_pdata->type); 1309 fb_pdata->type);
@@ -1314,7 +1315,7 @@ static int __devinit fb_probe(struct platform_device *device)
1314 if (!da8xx_fb_info) { 1315 if (!da8xx_fb_info) {
1315 dev_dbg(&device->dev, "Memory allocation failed for fb_info\n"); 1316 dev_dbg(&device->dev, "Memory allocation failed for fb_info\n");
1316 ret = -ENOMEM; 1317 ret = -ENOMEM;
1317 goto err_clk_disable; 1318 goto err_pm_runtime_disable;
1318 } 1319 }
1319 1320
1320 par = da8xx_fb_info->par; 1321 par = da8xx_fb_info->par;
@@ -1476,11 +1477,9 @@ err_release_fb_mem:
1476err_release_fb: 1477err_release_fb:
1477 framebuffer_release(da8xx_fb_info); 1478 framebuffer_release(da8xx_fb_info);
1478 1479
1479err_clk_disable: 1480err_pm_runtime_disable:
1480 clk_disable(fb_clk); 1481 pm_runtime_put_sync(&device->dev);
1481 1482 pm_runtime_disable(&device->dev);
1482err_clk_put:
1483 clk_put(fb_clk);
1484 1483
1485err_ioremap: 1484err_ioremap:
1486 iounmap((void __iomem *)da8xx_fb_reg_base); 1485 iounmap((void __iomem *)da8xx_fb_reg_base);
@@ -1503,7 +1502,7 @@ static int fb_suspend(struct platform_device *dev, pm_message_t state)
1503 1502
1504 fb_set_suspend(info, 1); 1503 fb_set_suspend(info, 1);
1505 lcd_disable_raster(true); 1504 lcd_disable_raster(true);
1506 clk_disable(par->lcdc_clk); 1505 pm_runtime_put_sync(&dev->dev);
1507 console_unlock(); 1506 console_unlock();
1508 1507
1509 return 0; 1508 return 0;
@@ -1514,7 +1513,7 @@ static int fb_resume(struct platform_device *dev)
1514 struct da8xx_fb_par *par = info->par; 1513 struct da8xx_fb_par *par = info->par;
1515 1514
1516 console_lock(); 1515 console_lock();
1517 clk_enable(par->lcdc_clk); 1516 pm_runtime_get_sync(&dev->dev);
1518 if (par->blank == FB_BLANK_UNBLANK) { 1517 if (par->blank == FB_BLANK_UNBLANK) {
1519 lcd_enable_raster(); 1518 lcd_enable_raster();
1520 1519