summaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorHeiko Stübner <heiko@sntech.de>2012-04-28 12:19:10 +0200
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2012-04-29 19:35:31 +0000
commit1f45f9dbb392f9ca0919e9cd2370ab66ae752ec8 (patch)
treed914007ce3dd2c4ba94cad2af801b6ebd18552a5 /include/linux
parent13f36e9ea0f1419039763e7ba947fccd7f4b5a41 (diff)
downloadlinux-stable-1f45f9dbb392f9ca0919e9cd2370ab66ae752ec8.tar.gz
linux-stable-1f45f9dbb392f9ca0919e9cd2370ab66ae752ec8.tar.bz2
linux-stable-1f45f9dbb392f9ca0919e9cd2370ab66ae752ec8.zip
fb_defio: add first_io callback
With this optional callback the driver is notified when the first page is entered into the pagelist and a new deferred_io call is scheduled. A possible use-case for this is runtime-pm. In the first_io call pm_runtime_get() could be called, which starts an asynchronous runtime_resume of the device. In the deferred_io callback a call to pm_runtime_barrier() makes the sure, the device is resumed by then and a pm_runtime_put() may put the device back to sleep. Also, some SoCs may use the runtime-pm system to determine if they are able to enter deeper idle states. Therefore it is necessary to keep the use-count from the first written page until the conclusion of the screen update, to prevent the system from going to sleep before completing the pending update. Two users of defio were using kmalloc to allocate the structure. These allocations are changed to kzalloc, to prevent uninitialised .first_io members in those drivers. Signed-off-by: Heiko Stübner <heiko@sntech.de> Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/fb.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/fb.h b/include/linux/fb.h
index d31cb682e173..c10e71efb8f5 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -607,6 +607,7 @@ struct fb_deferred_io {
struct mutex lock; /* mutex that protects the page list */
struct list_head pagelist; /* list of touched pages */
/* callback */
+ void (*first_io)(struct fb_info *info);
void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
};
#endif