# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../linux26/12-conf-hacks.patch
# Copyright (C) 2008 The OpenSDE Project
# Copyright (C) 2004 - 2008 The T2 SDE Project
# Copyright (C) 1998 - 2003 ROCK Linux Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- SDE-COPYRIGHT-NOTE-END ---

Set all unset options to module. Needed by the T2 SDE Linux kernel
auto configuration.

Initally written by Clifford Wolf <clifford@clifford.at> and adapted
for various new 2.5/2.6 kernels by Rene Rebe <rene@exactcode.de>.
 
diff -ur linux-2.6.27/scripts/kconfig/conf.c linux-2.6.27.work/scripts/kconfig/conf.c
--- linux-2.6.27/scripts/kconfig/conf.c	2008-10-10 00:13:53.000000000 +0200
+++ linux-2.6.27.work/scripts/kconfig/conf.c	2008-10-19 14:39:10.000000000 +0200
@@ -22,6 +22,7 @@
 	ask_all,
 	ask_new,
 	ask_silent,
+	set_no2mod,
 	set_default,
 	set_yes,
 	set_mod,
@@ -438,7 +439,7 @@
 	bindtextdomain(PACKAGE, LOCALEDIR);
 	textdomain(PACKAGE);
 
-	while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
+	while ((opt = getopt(ac, av, "osdD:nmMyrh")) != -1) {
 		switch (opt) {
 		case 'o':
 			input_mode = ask_silent;
@@ -460,6 +461,9 @@
 		case 'm':
 			input_mode = set_mod;
 			break;
+		case 'M':
+			input_mode = set_no2mod;
+			break;
 		case 'y':
 			input_mode = set_yes;
 			break;
@@ -533,6 +537,9 @@
 		else if (!stat("all.config", &tmpstat))
 			conf_read_simple("all.config", S_DEF_USER);
 		break;
+	case set_no2mod:
+		conf_read_simple(".config", S_DEF_USER);
+		break;
 	default:
 		break;
 	}
@@ -559,6 +566,9 @@
 	case set_mod:
 		conf_set_all_new_symbols(def_mod);
 		break;
+	case set_no2mod:
+		conf_set_all_new_symbols(def_no2mod);
+		break;
 	case set_random:
 		conf_set_all_new_symbols(def_random);
 		break;
diff -ur linux-2.6.27/scripts/kconfig/lkc.h linux-2.6.27.work/scripts/kconfig/lkc.h
--- linux-2.6.27/scripts/kconfig/lkc.h	2008-10-10 00:13:53.000000000 +0200
+++ linux-2.6.27.work/scripts/kconfig/lkc.h	2008-10-19 14:14:59.000000000 +0200
@@ -46,6 +46,7 @@
 	def_default,
 	def_yes,
 	def_mod,
+	def_no2mod,
 	def_no,
 	def_random
 };
diff -ur linux-2.6.27/scripts/kconfig/Makefile linux-2.6.27.work/scripts/kconfig/Makefile
--- linux-2.6.27/scripts/kconfig/Makefile	2008-10-10 00:13:53.000000000 +0200
+++ linux-2.6.27.work/scripts/kconfig/Makefile	2008-10-19 14:14:59.000000000 +0200
@@ -2,7 +2,7 @@
 # Kernel configuration targets
 # These targets are used from top-level makefile
 
-PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
+PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig no2modconfig update-po-config
 
 Kconfig := arch/$(SRCARCH)/Kconfig
 
@@ -61,6 +61,9 @@
 allmodconfig: $(obj)/conf
 	$< -m $(Kconfig)
 
+no2modconfig: scripts/kconfig/conf
+	$< -M $(Kconfig)
+
 defconfig: $(obj)/conf
 ifeq ($(KBUILD_DEFCONFIG),)
 	$< -d $(Kconfig)
@@ -83,6 +86,7 @@
 	@echo  '  randconfig	  - New config with random answer to all options'
 	@echo  '  defconfig	  - New config with default answer to all options'
 	@echo  '  allmodconfig	  - New config selecting modules when possible'
+	@echo  '  no2modconfig    - New config selecting modules for disabled options'
 	@echo  '  allyesconfig	  - New config where all options are accepted with yes'
 	@echo  '  allnoconfig	  - New config where all options are answered with no'
 
--- linux-2.6.27.vanilla/scripts/kconfig/confdata.c	2008-10-10 00:13:53.000000000 +0200
+++ linux-2.6.27/scripts/kconfig/confdata.c	2008-10-20 12:45:07.000000000 +0200
@@ -824,6 +824,17 @@
 	for_all_symbols(i, sym) {
 		if (sym_has_value(sym))
 			continue;
+		if ((mode == def_no2mod) && (sym_get_type(sym) == S_TRISTATE)) {
+			if (sym_get_tristate_value(sym) == no)
+				fprintf(stderr, "Setting %s to 'm'.\n", sym->name);
+			if (sym_get_tristate_value(sym) == mod)
+				fprintf(stderr, "Keep %s as 'm'.\n", sym->name);
+			if (sym_get_tristate_value(sym) != yes)
+				sym->def[S_DEF_USER].tri = mod;
+			if (!sym_is_choice(sym))
+				sym->flags |= SYMBOL_DEF_USER;
+			continue;
+		}
 		switch (sym_get_type(sym)) {
 		case S_BOOLEAN:
 		case S_TRISTATE: