diff options
Diffstat (limited to 'v4l')
-rw-r--r-- | v4l/Makefile | 9 | ||||
-rwxr-xr-x | v4l/scripts/make_kconfig.pl | 115 |
2 files changed, 117 insertions, 7 deletions
diff --git a/v4l/Makefile b/v4l/Makefile index 60bf0b317..57bb4e614 100644 --- a/v4l/Makefile +++ b/v4l/Makefile @@ -39,11 +39,14 @@ endif # TOPDIR ################################################# # default compilation rule -default:: config-compat.h Makefile.media links oss +default:: config-compat.h Makefile.media links oss # firmware @echo Kernel build directory is $(OUTDIR) $(MAKE) -C $(OUTDIR) SUBDIRS=$(PWD) $(MYCFLAGS) modules ./scripts/rmmod.pl check # $(MAKE) checkpatch + +firmware:: firmlinks + $(MAKE) -C $(OUTDIR) SUBDIRS=$(PWD)/firmware $(MYCFLAGS) modules ################################################# # Object specific rules @@ -249,6 +252,10 @@ links:: @find ../linux/drivers/media -name '*.[ch]' -type f -print0 | xargs -0n 255 ln -sf --target-directory=. @find ../linux/sound -name '*.[ch]' -type f -print0 | xargs -0n 255 ln -sf --target-directory=. +firmlinks:: + for i in `find ../linux/firmware/ -type d|sed s,"../linux/firmware",,`; do mkdir -p firmware/$$i; done >/dev/null + for i in `find ../linux/firmware/ -type f|sed s,"../linux/firmware",,`; do ln -sf $(PWD)/../linux/firmware/$$i firmware/$$i; done + # This link is so code with #include "oss/*.h" will find its header files oss: ln -sf . oss 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'); |