diff options
| -rw-r--r-- | drivers/video/da8xx-fb.c | 27 |
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: | |||
| 1476 | err_release_fb: | 1477 | err_release_fb: |
| 1477 | framebuffer_release(da8xx_fb_info); | 1478 | framebuffer_release(da8xx_fb_info); |
| 1478 | 1479 | ||
| 1479 | err_clk_disable: | 1480 | err_pm_runtime_disable: |
| 1480 | clk_disable(fb_clk); | 1481 | pm_runtime_put_sync(&device->dev); |
| 1481 | 1482 | pm_runtime_disable(&device->dev); | |
| 1482 | err_clk_put: | ||
| 1483 | clk_put(fb_clk); | ||
| 1484 | 1483 | ||
| 1485 | err_ioremap: | 1484 | err_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 | ||
