summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2007-08-22 12:03:10 +0000
committerGeert Uytterhoeven <geert@linux-m68k.org>2007-08-22 12:03:10 +0000
commita827eb6bee28aae9c54b0426786eba72a57d62de (patch)
tree817a42508d438e02ca202c3b02f9e21a589d7cc0
parentb85afa73438e6f695138e894e4f8ae0f8d942de8 (diff)
downloadfbtest-a827eb6bee28aae9c54b0426786eba72a57d62de.tar.gz
- Add fb_pan()
- Disable FB_VMODE_YWRAP if it's enabled
-rw-r--r--fb.c26
-rw-r--r--include/fb.h1
2 files changed, 26 insertions, 1 deletions
diff --git a/fb.c b/fb.c
index f176b2c..9d5d9be 100644
--- a/fb.c
+++ b/fb.c
@@ -174,6 +174,28 @@ int fb_set_cmap(void)
/*
+ * Pan the display
+ */
+
+int fb_pan(u32 xoffset, u32 yoffset)
+{
+ struct fb_var_screeninfo var;
+ int error;
+
+ Debug("fb_pan(%u, %u)\n", xoffset, yoffset);
+ fb_var.xoffset = xoffset;
+ fb_var.yoffset = yoffset;
+ var = fb_var;
+ error = ioctl(fb_fd, FBIOPAN_DISPLAY, &fb_var);
+ var_validate_change(&var, error);
+ if (error == -1) {
+ Fatal("ioctl FBIOPAN_DISPLAY: %s\n", strerror(errno));
+ }
+ return 1;
+}
+
+
+ /*
* Map the frame buffer
*/
@@ -413,10 +435,12 @@ void fb_init(void)
fb_open();
fb_get_var();
saved_var = fb_var;
- if (fb_var.xoffset || fb_var.yoffset || fb_var.accel_flags) {
+ if (fb_var.xoffset || fb_var.yoffset || fb_var.accel_flags ||
+ fb_var.vmode & FB_VMODE_YWRAP) {
fb_var.xoffset = 0;
fb_var.yoffset = 0;
fb_var.accel_flags = 0;
+ fb_var.vmode &= ~FB_VMODE_YWRAP;
fb_set_var();
}
fb_get_fix();
diff --git a/include/fb.h b/include/fb.h
index fcda308..1df4e48 100644
--- a/include/fb.h
+++ b/include/fb.h
@@ -25,6 +25,7 @@ extern int fb_get_var(void);
extern int fb_set_var(void);
extern int fb_get_cmap(void);
extern int fb_set_cmap(void);
+extern int fb_pan(u32 xoffset, u32 yoffset);
extern void fb_map(void);
extern void fb_unmap(void);