Commit 35784b43 authored by Jingoo Han's avatar Jingoo Han Committed by Florian Tobias Schandinat

video: s3c-fb: modify runtime pm functions

Runtime suspend and runtime resume are modified in order to
reduce the complexity and improve the usability of runtime pm.
After probe function, s3c-fb driver is not suspended until
suspend or remove is called.

The scheme is changed as follows:
 runtime_get is only called in probe and resume.
 runtime_put is only called in remove and suspend.
 open/close cannot call the runtime_get/put.

Also, runtime_susepnd/resume are just called by runtime pm,
not doing suspend/resume routine any longer. This is because
open/close cannot call the runtime_get/put; the suspend/resume
routine in runtime_suspend/resume were previously used when
open and close were called.

The name of s3c-fb dev_pm_ops is changed from s3cfb_pm_ops to
s3c_fb_pm_ops in order to use more consistent naming.
Signed-off-by: default avatarJingoo Han <jg1.han@samsung.com>
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
parent ddd3d905
...@@ -1029,30 +1029,8 @@ static int s3c_fb_ioctl(struct fb_info *info, unsigned int cmd, ...@@ -1029,30 +1029,8 @@ static int s3c_fb_ioctl(struct fb_info *info, unsigned int cmd,
return ret; return ret;
} }
static int s3c_fb_open(struct fb_info *info, int user)
{
struct s3c_fb_win *win = info->par;
struct s3c_fb *sfb = win->parent;
pm_runtime_get_sync(sfb->dev);
return 0;
}
static int s3c_fb_release(struct fb_info *info, int user)
{
struct s3c_fb_win *win = info->par;
struct s3c_fb *sfb = win->parent;
pm_runtime_put_sync(sfb->dev);
return 0;
}
static struct fb_ops s3c_fb_ops = { static struct fb_ops s3c_fb_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.fb_open = s3c_fb_open,
.fb_release = s3c_fb_release,
.fb_check_var = s3c_fb_check_var, .fb_check_var = s3c_fb_check_var,
.fb_set_par = s3c_fb_set_par, .fb_set_par = s3c_fb_set_par,
.fb_blank = s3c_fb_blank, .fb_blank = s3c_fb_blank,
...@@ -1459,7 +1437,6 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev) ...@@ -1459,7 +1437,6 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
} }
platform_set_drvdata(pdev, sfb); platform_set_drvdata(pdev, sfb);
pm_runtime_put_sync(sfb->dev);
return 0; return 0;
...@@ -1499,8 +1476,6 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev) ...@@ -1499,8 +1476,6 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
struct s3c_fb *sfb = platform_get_drvdata(pdev); struct s3c_fb *sfb = platform_get_drvdata(pdev);
int win; int win;
pm_runtime_get_sync(sfb->dev);
for (win = 0; win < S3C_FB_MAX_WIN; win++) for (win = 0; win < S3C_FB_MAX_WIN; win++)
if (sfb->windows[win]) if (sfb->windows[win])
s3c_fb_release_win(sfb, sfb->windows[win]); s3c_fb_release_win(sfb, sfb->windows[win]);
...@@ -1526,7 +1501,7 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev) ...@@ -1526,7 +1501,7 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
return 0; return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM_SLEEP
static int s3c_fb_suspend(struct device *dev) static int s3c_fb_suspend(struct device *dev)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
...@@ -1547,6 +1522,8 @@ static int s3c_fb_suspend(struct device *dev) ...@@ -1547,6 +1522,8 @@ static int s3c_fb_suspend(struct device *dev)
clk_disable(sfb->lcd_clk); clk_disable(sfb->lcd_clk);
clk_disable(sfb->bus_clk); clk_disable(sfb->bus_clk);
pm_runtime_put_sync(sfb->dev);
return 0; return 0;
} }
...@@ -1558,6 +1535,7 @@ static int s3c_fb_resume(struct device *dev) ...@@ -1558,6 +1535,7 @@ static int s3c_fb_resume(struct device *dev)
struct s3c_fb_win *win; struct s3c_fb_win *win;
int win_no; int win_no;
pm_runtime_get_sync(sfb->dev);
clk_enable(sfb->bus_clk); clk_enable(sfb->bus_clk);
if (!sfb->variant.has_clksel) if (!sfb->variant.has_clksel)
...@@ -1591,11 +1569,19 @@ static int s3c_fb_resume(struct device *dev) ...@@ -1591,11 +1569,19 @@ static int s3c_fb_resume(struct device *dev)
return 0; return 0;
} }
#else
#define s3c_fb_suspend NULL
#define s3c_fb_resume NULL
#endif #endif
#ifdef CONFIG_PM_RUNTIME
static int s3c_fb_runtime_suspend(struct device *dev)
{
return 0;
}
static int s3c_fb_runtime_resume(struct device *dev)
{
return 0;
}
#endif
#define VALID_BPP124 (VALID_BPP(1) | VALID_BPP(2) | VALID_BPP(4)) #define VALID_BPP124 (VALID_BPP(1) | VALID_BPP(2) | VALID_BPP(4))
#define VALID_BPP1248 (VALID_BPP124 | VALID_BPP(8)) #define VALID_BPP1248 (VALID_BPP124 | VALID_BPP(8))
...@@ -1918,7 +1904,10 @@ static struct platform_device_id s3c_fb_driver_ids[] = { ...@@ -1918,7 +1904,10 @@ static struct platform_device_id s3c_fb_driver_ids[] = {
}; };
MODULE_DEVICE_TABLE(platform, s3c_fb_driver_ids); MODULE_DEVICE_TABLE(platform, s3c_fb_driver_ids);
static UNIVERSAL_DEV_PM_OPS(s3cfb_pm_ops, s3c_fb_suspend, s3c_fb_resume, NULL); static const struct dev_pm_ops s3c_fb_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(s3c_fb_suspend, s3c_fb_resume)
SET_RUNTIME_PM_OPS(s3c_fb_runtime_suspend, s3c_fb_runtime_resume, NULL)
};
static struct platform_driver s3c_fb_driver = { static struct platform_driver s3c_fb_driver = {
.probe = s3c_fb_probe, .probe = s3c_fb_probe,
...@@ -1927,7 +1916,7 @@ static struct platform_driver s3c_fb_driver = { ...@@ -1927,7 +1916,7 @@ static struct platform_driver s3c_fb_driver = {
.driver = { .driver = {
.name = "s3c-fb", .name = "s3c-fb",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.pm = &s3cfb_pm_ops, .pm = &s3c_fb_pm_ops,
}, },
}; };
......
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