parisc/stifb: Implement fb_is_primary_device()
authorHelge Deller <deller@gmx.de>
Thu, 2 Jun 2022 11:50:44 +0000 (13:50 +0200)
committerHelge Deller <deller@gmx.de>
Sat, 4 Jun 2022 13:47:03 +0000 (15:47 +0200)
Implement fb_is_primary_device() function, so that fbcon detects if this
framebuffer belongs to the default graphics card which was used to start
the system.

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # v5.10+
arch/parisc/include/asm/fb.h
drivers/video/console/sticore.c
drivers/video/fbdev/stifb.c

index c4cd636..d63a2ac 100644 (file)
@@ -12,9 +12,13 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
        pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
 }
 
+#if defined(CONFIG_STI_CONSOLE) || defined(CONFIG_FB_STI)
+int fb_is_primary_device(struct fb_info *info);
+#else
 static inline int fb_is_primary_device(struct fb_info *info)
 {
        return 0;
 }
+#endif
 
 #endif /* _ASM_FB_H_ */
index f869b72..6200506 100644 (file)
@@ -30,6 +30,7 @@
 #include <asm/pdc.h>
 #include <asm/cacheflush.h>
 #include <asm/grfioctl.h>
+#include <asm/fb.h>
 
 #include "../fbdev/sticore.h"
 
@@ -1127,6 +1128,22 @@ int sti_call(const struct sti_struct *sti, unsigned long func,
        return ret;
 }
 
+/* check if given fb_info is the primary device */
+int fb_is_primary_device(struct fb_info *info)
+{
+       struct sti_struct *sti;
+
+       sti = sti_get_rom(0);
+
+       /* if no built-in graphics card found, allow any fb driver as default */
+       if (!sti)
+               return true;
+
+       /* return true if it's the default built-in framebuffer driver */
+       return (sti->info == info);
+}
+EXPORT_SYMBOL(fb_is_primary_device);
+
 MODULE_AUTHOR("Philipp Rumpf, Helge Deller, Thomas Bogendoerfer");
 MODULE_DESCRIPTION("Core STI driver for HP's NGLE series graphics cards in HP PARISC machines");
 MODULE_LICENSE("GPL v2");
index bebb2ee..38a861e 100644 (file)
@@ -1358,11 +1358,11 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
                goto out_err3;
        }
 
+       /* save for primary gfx device detection & unregister_framebuffer() */
+       sti->info = info;
        if (register_framebuffer(&fb->info) < 0)
                goto out_err4;
 
-       sti->info = info; /* save for unregister_framebuffer() */
-
        fb_info(&fb->info, "%s %dx%d-%d frame buffer device, %s, id: %04x, mmio: 0x%04lx\n",
                fix->id,
                var->xres,