diff options
Diffstat (limited to 'v4l/scripts/make_kconfig.pl')
-rwxr-xr-x | v4l/scripts/make_kconfig.pl | 115 |
1 files changed, 109 insertions, 6 deletions
diff --git a/v4l/scripts/make_kconfig.pl b/v4l/scripts/make_kconfig.pl index b553a8a06..b0dc16133 100755 --- a/v4l/scripts/make_kconfig.pl +++ b/v4l/scripts/make_kconfig.pl @@ -276,6 +276,7 @@ sub open_kconfig($$) { my $disabled = 0; my $in_help = 0; my $default_seen = 0; + my $if; print "Opening $file\n" if $debug; open $in, '<', $file or die "File not found: $file"; @@ -314,6 +315,7 @@ sub open_kconfig($$) { $disabled = 0; $default_seen = 0; $key = undef; + $if = ""; } next if (/^\s*#/ || /^\s*$/); # skip comments and blank lines @@ -327,6 +329,7 @@ sub open_kconfig($$) { my $nothandled = 0; if (m|^\s*(?:menu)?config (\w+)\s*$|) { $key = $1; + $if = ""; print "Found config '$key' at $file:$.\n" if $debug; add_config($key); @@ -382,8 +385,24 @@ sub open_kconfig($$) { # config type if(/^\s*bool(ean)?\s/) { add_bool($key); + if (m|if (.*)\s*$|) { + printf("Boolean $key with if '$1'\n") if $debug; + if ($if eq "") { + $if = "($1)"; + } else { + $if .= " && ($1)"; + } + } } elsif (/^\s*tristate\s/) { add_tristate($key); + if (m|if (.*)\s*$|) { + printf("Boolean $key with if '$1'\n") if $debug; + if ($if eq "") { + $if = "($1)"; + } else { + $if .= " && ($1)"; + } + } } elsif (/^\s*int\s/) { add_int($key); } elsif (/^\s*hex\s/) { @@ -400,6 +419,14 @@ sub open_kconfig($$) { # default lines } elsif (m|^\s*default\s+(.+?)(?:\s+if .*)?\s*$|) { my $o = $1; + if ($2 ne "") { + if ($if eq "") { + $if = "($2)"; + } else { + $if .= " && ($2)"; + } + } + # Get default for int options if ($o =~ m|^"(\d+)"$| && exists $intopt{$key}) { set_int_value($key, $1); @@ -412,13 +439,21 @@ sub open_kconfig($$) { # Override default for disabled tri/bool options # We don't care about the default for tri/bool options otherwise - } elsif ($o =~ /^(y|n|m|"yes"|"no")$/i && exists $tristate{$key}) { - if ($disabled) { - $default_seen = 1; - $_ = "\tdefault n\n"; + } elsif (!$o =~ /^(y|n|m|"yes"|"no")$/i && exists $tristate{$key}) { + print "Default is an expression at $file:$. $_\n" if $debug; + if ($if eq "") { + depends($key, "$o"); } - } else { - print "Unknown default at $file:$. $_\n" if $debug; + } + if ($if ne "") { + # FIXME: What happens if no default clause exists? + # the $if won't be handled + depends($key, "$if || $o"); + } + + if ($disabled) { + $default_seen = 1; + $_ = "\tdefault n\n"; } } else { print "Skipping $file:$. $_" if $debug; @@ -536,6 +571,74 @@ config VIDEO_KERNEL_VERSION Unless you know what you are doing, you should answer N. +config PREVENT_FIRMWARE_BUILD + default n + +config FIRMWARE_IN_KERNEL + default y + + bool "Include in-kernel firmware blobs in kernel binary" + depends on FW_LOADER + default y + help + The kernel source tree includes a number of firmware 'blobs' + which are used by various drivers. The recommended way to + use these is to run "make firmware_install" and to copy the + resulting binary files created in usr/lib/firmware directory + of the kernel tree to the /lib/firmware on your system so + that they can be loaded by userspace helpers on request. + + Enabling this option will build each required firmware blob + into the kernel directly, where request_firmware() will find + them without having to call out to userspace. This may be + useful if your root file system requires a device which uses + such firmware, and do not wish to use an initrd. + + This single option controls the inclusion of firmware for + every driver which usees request_firmare() and ships its + firmware in the kernel source tree, to avoid a proliferation + of 'Include firmware for xxx device' options. + + Say 'N' and let firmware be loaded from userspace. + +config EXTRA_FIRMWARE + string "External firmware blobs to build into the kernel binary" + depends on FW_LOADER + help + This option allows firmware to be built into the kernel, for the + cases where the user either cannot or doesn't want to provide it from + userspace at runtime (for example, when the firmware in question is + required for accessing the boot device, and the user doesn't want to + use an initrd). + This option is a string, and takes the (space-separated) names of the + firmware files -- the same names which appear in MODULE_FIRMWARE() + and request_firmware() in the source. These files should exist under + the directory specified by the EXTRA_FIRMWARE_DIR option, which is + by default the firmware/ subdirectory of the kernel source tree. + + So, for example, you might set CONFIG_EXTRA_FIRMWARE="usb8388.bin", + copy the usb8388.bin file into the firmware/ directory, and build the + kernel. Then any request_firmware("usb8388.bin") will be + satisfied internally without needing to call out to userspace. + + WARNING: If you include additional firmware files into your binary + kernel image which are not available under the terms of the GPL, + then it may be a violation of the GPL to distribute the resulting + image -- since it combines both GPL and non-GPL work. You should + consult a lawyer of your own before distributing such an image. + +config EXTRA_FIRMWARE_DIR + string "Firmware blobs root directory" + depends on EXTRA_FIRMWARE != "" + default "firmware" + help + This option controls the directory in which the kernel build system + looks for the firmware files listed in the EXTRA_FIRMWARE option. + The default is the firmware/ directory in the kernel source tree, + but by changing this option you can point it elsewhere, such as + the /lib/firmware/ directory or another separate directory + containing firmware files. + EOF open_kconfig('../linux', '../linux/drivers/media/Kconfig'); |