summaryrefslogtreecommitdiff
path: root/v4l/scripts/make_kconfig.pl
diff options
context:
space:
mode:
Diffstat (limited to 'v4l/scripts/make_kconfig.pl')
-rwxr-xr-xv4l/scripts/make_kconfig.pl115
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');