RE: [PATCH V2] video: s3c-fb: modify runtime pm functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Florian,

Florian Tobias Schandinat wrote:
> -----Original Message-----
> Subject: Re: [PATCH V2] video: s3c-fb: modify runtime pm functions
> 
> On 12/19/2011 02:19 AM, Jingoo Han wrote:
> > Hi Florian,
> >
> > Florian Tobias Schandinat wrote:
> >> -----Original Message-----
> >> Subject: Re: [PATCH V2] video: s3c-fb: modify runtime pm functions
> >>
> >> Hi Jingoo,
> >>
> >> On 12/05/2011 02:42 AM, Jingoo Han wrote:
> >>> 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: Jingoo Han <jg1.han@xxxxxxxxxxx>
> >>
> >> the patch itself looks okay to me, but I'm wondering what changes will be
> >> visible to the user, if any?
> >> Does the behavior change for example, when no one has called open?
> > Previously, in order to display framebuffer to LCD panel, user should call
> > open after booting, because runtime_pm_put is called after prove function.
> >
> > However, now, after booting, framebuffer can be displayed to LCD panel
> > without calling open.
> 
> As I thought. What is displayed in such a case? (no open called = no one put any
> image in the framebuffer)
Sorry, user should call open, too. There is no visible change for user.
Just runtime pm put & get are removed between probe and open.
> As the new behavior is probably okay for single framebuffer I'll apply this
> patch, I'm just asking as I'm planning to do quite the opposite in viafb to get
> rid of this situation in dual framebuffer mode where it is quite likely that one
> display is not used for some time and at the moment only displays rubbish.
OK, I'll check dual framebuffer mode.
Thank you.

Best regards,
Jingoo Han 
> 
> Best regards,
> 
> Florian Tobias Schandinat
> 
> >
> > Best regards,
> > Jingoo Han
> >>
> >>
> >> Best regards,
> >>
> >> Florian Tobias Schandinat
> >>
> >>> ---
> >>> v2: fix unaligned lines
> >>>
> >>>  drivers/video/s3c-fb.c |   51 ++++++++++++++++++-----------------------------
> >>>  1 files changed, 20 insertions(+), 31 deletions(-)
> >>>
> >>> diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
> >>> index e84677e..91e629a 100644
> >>> --- a/drivers/video/s3c-fb.c
> >>> +++ b/drivers/video/s3c-fb.c
> >>> @@ -1028,30 +1028,8 @@ static int s3c_fb_ioctl(struct fb_info *info, unsigned int cmd,
> >>>  	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 = {
> >>>  	.owner		= THIS_MODULE,
> >>> -	.fb_open	= s3c_fb_open,
> >>> -	.fb_release	= s3c_fb_release,
> >>>  	.fb_check_var	= s3c_fb_check_var,
> >>>  	.fb_set_par	= s3c_fb_set_par,
> >>>  	.fb_blank	= s3c_fb_blank,
> >>> @@ -1458,7 +1436,6 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
> >>>  	}
> >>>
> >>>  	platform_set_drvdata(pdev, sfb);
> >>> -	pm_runtime_put_sync(sfb->dev);
> >>>
> >>>  	return 0;
> >>>
> >>> @@ -1498,8 +1475,6 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
> >>>  	struct s3c_fb *sfb = platform_get_drvdata(pdev);
> >>>  	int win;
> >>>
> >>> -	pm_runtime_get_sync(sfb->dev);
> >>> -
> >>>  	for (win = 0; win < S3C_FB_MAX_WIN; win++)
> >>>  		if (sfb->windows[win])
> >>>  			s3c_fb_release_win(sfb, sfb->windows[win]);
> >>> @@ -1525,7 +1500,7 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
> >>>  	return 0;
> >>>  }
> >>>
> >>> -#ifdef CONFIG_PM
> >>> +#ifdef CONFIG_PM_SLEEP
> >>>  static int s3c_fb_suspend(struct device *dev)
> >>>  {
> >>>  	struct platform_device *pdev = to_platform_device(dev);
> >>> @@ -1546,6 +1521,8 @@ static int s3c_fb_suspend(struct device *dev)
> >>>  		clk_disable(sfb->lcd_clk);
> >>>
> >>>  	clk_disable(sfb->bus_clk);
> >>> +	pm_runtime_put_sync(sfb->dev);
> >>> +
> >>>  	return 0;
> >>>  }
> >>>
> >>> @@ -1557,6 +1534,7 @@ static int s3c_fb_resume(struct device *dev)
> >>>  	struct s3c_fb_win *win;
> >>>  	int win_no;
> >>>
> >>> +	pm_runtime_get_sync(sfb->dev);
> >>>  	clk_enable(sfb->bus_clk);
> >>>
> >>>  	if (!sfb->variant.has_clksel)
> >>> @@ -1590,11 +1568,19 @@ static int s3c_fb_resume(struct device *dev)
> >>>
> >>>  	return 0;
> >>>  }
> >>> -#else
> >>> -#define s3c_fb_suspend NULL
> >>> -#define s3c_fb_resume  NULL
> >>>  #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_BPP1248 (VALID_BPP124 | VALID_BPP(8))
> >>> @@ -1917,7 +1903,10 @@ static struct platform_device_id 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 = {
> >>>  	.probe		= s3c_fb_probe,
> >>> @@ -1926,7 +1915,7 @@ static struct platform_driver s3c_fb_driver = {
> >>>  	.driver		= {
> >>>  		.name	= "s3c-fb",
> >>>  		.owner	= THIS_MODULE,
> >>> -		.pm	= &s3cfb_pm_ops,
> >>> +		.pm	= &s3c_fb_pm_ops,
> >>>  	},
> >>>  };
> >>>
> >
> >

--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Tourism]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux