]> err.no Git - linux-2.6/blobdiff - drivers/video/fbmem.c
lxfb: clean up register definitions
[linux-2.6] / drivers / video / fbmem.c
index 01072f4b3e8fef2c26d10dea5d64c974e8a695ad..0c1461b26dd63b2f2b2ae1770832c04eb9f1c7ae 100644 (file)
@@ -1057,7 +1057,7 @@ fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
        case FBIOPUT_CON2FBMAP:
                if (copy_from_user(&con2fb, argp, sizeof(con2fb)))
                        return - EFAULT;
-               if (con2fb.console < 0 || con2fb.console > MAX_NR_CONSOLES)
+               if (con2fb.console < 1 || con2fb.console > MAX_NR_CONSOLES)
                    return -EINVAL;
                if (con2fb.framebuffer < 0 || con2fb.framebuffer >= FB_MAX)
                    return -EINVAL;
@@ -1352,6 +1352,32 @@ static const struct file_operations fb_fops = {
 
 struct class *fb_class;
 EXPORT_SYMBOL(fb_class);
+
+static int fb_check_foreignness(struct fb_info *fi)
+{
+       const bool foreign_endian = fi->flags & FBINFO_FOREIGN_ENDIAN;
+
+       fi->flags &= ~FBINFO_FOREIGN_ENDIAN;
+
+#ifdef __BIG_ENDIAN
+       fi->flags |= foreign_endian ? 0 : FBINFO_BE_MATH;
+#else
+       fi->flags |= foreign_endian ? FBINFO_BE_MATH : 0;
+#endif /* __BIG_ENDIAN */
+
+       if (fi->flags & FBINFO_BE_MATH && !fb_be_math(fi)) {
+               pr_err("%s: enable CONFIG_FB_BIG_ENDIAN to "
+                      "support this framebuffer\n", fi->fix.id);
+               return -ENOSYS;
+       } else if (!(fi->flags & FBINFO_BE_MATH) && fb_be_math(fi)) {
+               pr_err("%s: enable CONFIG_FB_LITTLE_ENDIAN to "
+                      "support this framebuffer\n", fi->fix.id);
+               return -ENOSYS;
+       }
+
+       return 0;
+}
+
 /**
  *     register_framebuffer - registers a frame buffer device
  *     @fb_info: frame buffer info structure
@@ -1371,6 +1397,10 @@ register_framebuffer(struct fb_info *fb_info)
 
        if (num_registered_fb == FB_MAX)
                return -ENXIO;
+
+       if (fb_check_foreignness(fb_info))
+               return -ENOSYS;
+
        num_registered_fb++;
        for (i = 0 ; i < FB_MAX; i++)
                if (!registered_fb[i])