linux/drivers/video/logo/logo.c
Vincent Mailhol ac6d088b3b video/logo: move logo selection logic to Kconfig
Now that the path to the logo file can be directly entered in Kbuild,
there is no more need to handle all the logo file selection in the
Makefile and the C files.

The only exception is the logo_spe_clut224 which is only used by the
Cell processor (found for example in the Playstation 3) [1]. This
extra logo uses its own different image which shows up on a separate
line just below the normal logo. Because the extra logo uses a
different image, it can not be factorized under the custom logo logic.

Move all the logo file selection logic to Kbuild (except from the
logo_spe_clut224.ppm), this done, clean-up the C code to only leave
one entry for each logo type (monochrome, 16-colors and 224-colors).

[1] Cell SPE logos
Link: https://lore.kernel.org/all/20070710122702.765654000@pademelon.sonytel.be/

Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
Signed-off-by: Helge Deller <deller@gmx.de>
2026-02-14 11:09:46 +01:00

68 lines
1.5 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/*
* Linux logo to be displayed on boot
*
* Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
* Copyright (C) 1996,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 2001 Greg Banks <gnb@alphalink.com.au>
* Copyright (C) 2001 Jan-Benedict Glaw <jbglaw@lug-owl.de>
* Copyright (C) 2003 Geert Uytterhoeven <geert@linux-m68k.org>
*/
#include <linux/linux_logo.h>
#include <linux/stddef.h>
#include <linux/module.h>
#ifdef CONFIG_M68K
#include <asm/setup.h>
#endif
static bool nologo;
module_param(nologo, bool, 0);
MODULE_PARM_DESC(nologo, "Disables startup logo");
/*
* Logos are located in the initdata, and will be freed in kernel_init.
* Use late_init to mark the logos as freed to prevent any further use.
*/
static bool logos_freed;
static int __init fb_logo_late_init(void)
{
logos_freed = true;
return 0;
}
late_initcall_sync(fb_logo_late_init);
/* logo's are marked __initdata. Use __ref to tell
* modpost that it is intended that this function uses data
* marked __initdata.
*/
const struct linux_logo * __ref fb_find_logo(int depth)
{
const struct linux_logo *logo = NULL;
if (nologo || logos_freed)
return NULL;
#ifdef CONFIG_LOGO_LINUX_MONO
if (depth >= 1)
logo = &logo_linux_mono;
#endif
#ifdef CONFIG_LOGO_LINUX_VGA16
if (depth >= 4)
logo = &logo_linux_vga16;
#endif
#ifdef CONFIG_LOGO_LINUX_CLUT224
if (depth >= 8)
logo = &logo_linux_clut224;
#endif
return logo;
}
EXPORT_SYMBOL_GPL(fb_find_logo);