From c041f53b8d82a8521eec659b4618e6d268f44218 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Thu, 19 Oct 2006 04:35:29 +0000
Subject: [PATCH] finally kill KMOD_template - removes a big chunk of legacy
 build code

SVN-Revision: 5222
---
 Config.in                          |   1 -
 include/kernel-build.mk            |  32 +-----
 include/kernel.mk                  |  47 --------
 include/modules-2.4.mk             |  60 ----------
 include/modules-2.6.mk             |  67 -----------
 package/kernel/Makefile            |  22 ++++
 package/kernel/modules/network.mk  |  36 ++----
 package/kernel/modules/other.mk    | 100 ++++++++++++++++
 package/kernel/modules/usb.mk      |  23 +++-
 package/kernel/modules/wireless.mk | 109 ++++++++++++++++--
 target/linux/Config.in             | 177 -----------------------------
 11 files changed, 255 insertions(+), 419 deletions(-)
 delete mode 100644 target/linux/Config.in

diff --git a/Config.in b/Config.in
index f53d71de00..cfd0b5ffea 100644
--- a/Config.in
+++ b/Config.in
@@ -102,6 +102,5 @@ source "target/image/*/Config.in"
 
 endmenu
 
-source "target/linux/Config.in"
 source ".config.in"
 
diff --git a/include/kernel-build.mk b/include/kernel-build.mk
index 251e985e8b..0697b79a53 100644
--- a/include/kernel-build.mk
+++ b/include/kernel-build.mk
@@ -5,7 +5,6 @@
 # See /LICENSE for more information.
 #
 include $(INCLUDE_DIR)/host.mk
--include $(INCLUDE_DIR)/modules-$(KERNEL).mk
 
 LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
 LINUX_SITE=http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
@@ -13,11 +12,6 @@ LINUX_SITE=http://www.us.kernel.org/pub/linux/kernel/v$(KERNEL) \
            http://www.kernel.org/pub/linux/kernel/v$(KERNEL) \
            http://www.de.kernel.org/pub/linux/kernel/v$(KERNEL)
 
-KERNEL_IDIR:=$(KERNEL_BUILD_DIR)/kernel-ipkg
-KERNEL_IPKG:=$(KERNEL_BUILD_DIR)/kernel_$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)_$(ARCH).ipk
-TARGETS += $(KERNEL_IPKG)
-INSTALL_TARGETS += $(KERNEL_IPKG)
-
 ifneq (,$(findstring uml,$(BOARD)))
   LINUX_KARCH:=um
 else
@@ -39,11 +33,6 @@ ifneq (,$(findstring ppc,$(BOARD)))
 endif
 
 
-$(TARGETS): $(PACKAGE_DIR)
-
-$(PACKAGE_DIR):
-	mkdir -p $@
-
 $(DL_DIR)/$(LINUX_SOURCE):
 	-mkdir -p $(DL_DIR)
 	$(SCRIPT_DIR)/download.pl $(DL_DIR) $(LINUX_SOURCE) $(LINUX_KERNEL_MD5SUM) $(LINUX_SITE)
@@ -84,7 +73,7 @@ else
 	echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config
 endif
 
-$(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.linux-compile pkg-install ramdisk-config
+$(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.linux-compile ramdisk-config
 	$(MAKE) -j$(CONFIG_JLEVEL) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) $(KERNELNAME)
 
 $(LINUX_KERNEL): $(LINUX_DIR)/vmlinux
@@ -98,7 +87,6 @@ $(LINUX_DIR)/.modules_done:
 	touch $(LINUX_DIR)/.modules_done
 
 modules: $(LINUX_DIR)/.modules_done
-packages: $(TARGETS)
 
 $(LINUX_DIR)/.linux-compile:
 	@rm -f $(BUILD_DIR)/linux
@@ -106,15 +94,6 @@ $(LINUX_DIR)/.linux-compile:
 	@$(MAKE) modules
 	touch $@
 
-$(KERNEL_IPKG):
-	rm -rf $(KERNEL_IDIR)
-	mkdir -p $(KERNEL_IDIR)/etc
-	$(SCRIPT_DIR)/make-ipkg-dir.sh $(KERNEL_IDIR) ../control/kernel.control $(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE) $(ARCH)
-	if [ -f ./config/$(BOARD).modules ]; then \
-		cp ./config/$(BOARD).modules $(KERNEL_IDIR)/etc/modules; \
-	fi
-	$(IPKG_BUILD) $(KERNEL_IDIR) $(KERNEL_BUILD_DIR)
-
 $(TOPDIR)/.kernel.mk: $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL)/Makefile
 	echo "CONFIG_BOARD:=$(BOARD)" > $@
 	echo "CONFIG_KERNEL:=$(KERNEL)" >> $@
@@ -122,17 +101,11 @@ $(TOPDIR)/.kernel.mk: $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL)/Makefile
 	echo "CONFIG_LINUX_RELEASE:=$(LINUX_RELEASE)" >> $@
 	echo "CONFIG_LINUX_KARCH:=$(LINUX_KARCH)" >> $@
 
-pkg-install: FORCE
-	@for pkg in $(INSTALL_TARGETS); do \
-		$(IPKG) install $$pkg || echo; \
-	done
-
 download: $(DL_DIR)/$(LINUX_SOURCE)
 prepare: $(LINUX_DIR)/.configured
-	@mkdir -p $(LINUX_DIR) $(PACKAGE_DIR)
+	@mkdir -p $(LINUX_DIR)
 
 compile: prepare $(LINUX_DIR)/.linux-compile
-	@$(MAKE) packages
 
 install: compile $(LINUX_KERNEL)
 
@@ -153,5 +126,4 @@ rebuild: FORCE
 clean: FORCE
 	rm -f $(STAMP_DIR)/.linux-compile
 	rm -rf $(KERNEL_BUILD_DIR)
-	rm -f $(TARGETS)
 
diff --git a/include/kernel.mk b/include/kernel.mk
index 7a36cee1a5..af5d9455fa 100644
--- a/include/kernel.mk
+++ b/include/kernel.mk
@@ -45,7 +45,6 @@ else
   MODULES_SUBDIR:=lib/modules/$(LINUX_VERSION)
   MODULES_DIR := $(KERNEL_BUILD_DIR)/modules/$(MODULES_SUBDIR)
   TARGET_MODULES_DIR := $(LINUX_TARGET_DIR)/$(MODULES_SUBDIR)
-  KMOD_BUILD_DIR := $(KERNEL_BUILD_DIR)/linux-modules
 
   LINUX_KERNEL:=$(KERNEL_BUILD_DIR)/vmlinux
 endif
@@ -116,49 +115,3 @@ define AutoLoad
   add_module $(1) "$(2)";
 endef
 
-
-# FIXME: remove this crap
-define KMOD_template
-ifeq ($$(strip $(4)),)
-KDEPEND_$(1):=m
-else
-KDEPEND_$(1):=$($(4))
-endif
-
-IDEPEND_$(1):=kernel ($(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)) $(foreach pkg,$(5),", $(pkg)")
-
-PKG_$(1) := $(PACKAGE_DIR)/kmod-$(2)_$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)_$(ARCH).ipk
-I_$(1) := $(KMOD_BUILD_DIR)/ipkg/$(2)
-
-ifeq ($$(KDEPEND_$(1)),m)
-ifneq ($$(CONFIG_PACKAGE_KMOD_$(1)),)
-TARGETS += $$(PKG_$(1))
-endif
-ifeq ($$(CONFIG_PACKAGE_KMOD_$(1)),y)
-INSTALL_TARGETS += $$(PKG_$(1))
-endif
-endif
-
-$$(PKG_$(1)): $(LINUX_DIR)/.modules_done
-	rm -rf $$(I_$(1))
-	$(SCRIPT_DIR)/make-ipkg-dir.sh $$(I_$(1)) ../control/kmod-$(2).control $(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE) $(ARCH)
-	echo "Depends: $$(IDEPEND_$(1))" >> $$(I_$(1))/CONTROL/control
-ifneq ($(strip $(3)),)
-	mkdir -p $$(I_$(1))/lib/modules/$(LINUX_VERSION)
-	$(CP) $(3) $$(I_$(1))/lib/modules/$(LINUX_VERSION)
-endif
-ifneq ($(6),)
-	mkdir -p $$(I_$(1))/etc/modules.d
-	for module in $(7); do \
-		echo $$$$module >> $$(I_$(1))/etc/modules.d/$(6)-$(2); \
-	done
-	echo "#!/bin/sh" >> $$(I_$(1))/CONTROL/postinst
-	echo "[ -z \"\$$$$IPKG_INSTROOT\" ] || exit" >> $$(I_$(1))/CONTROL/postinst
-	echo ". /etc/functions.sh" >> $$(I_$(1))/CONTROL/postinst
-	echo "load_modules /etc/modules.d/$(6)-$(2)" >> $$(I_$(1))/CONTROL/postinst
-	chmod 0755 $$(I_$(1))/CONTROL/postinst
-endif
-	$(8)
-	$(IPKG_BUILD) $$(I_$(1)) $(PACKAGE_DIR)
-endef
-
diff --git a/include/modules-2.4.mk b/include/modules-2.4.mk
index 8a23634813..bd44b5f38a 100644
--- a/include/modules-2.4.mk
+++ b/include/modules-2.4.mk
@@ -4,70 +4,10 @@
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
-include $(INCLUDE_DIR)/netfilter.mk
-
-
-# Multimedia
-
-$(eval $(call KMOD_template,PWC,pwc,\
-	$(MODULES_DIR)/kernel/drivers/usb/pwc.o \
-,CONFIG_USB_PWC,kmod-videodev,63,pwc))
-
-$(eval $(call KMOD_template,VIDEODEV,videodev,\
-	$(MODULES_DIR)/kernel/drivers/media/video/videodev.o \
-,CONFIG_VIDEO_DEV,,62,videodev))
-
-
-# Network devices
-
-$(eval $(call KMOD_template,NET_AIRO,net-airo,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/airo.o \
-,CONFIG_AIRO,,10,airo))
-
-$(eval $(call KMOD_template,NET_HERMES,net-hermes,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/hermes.o \
-	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco.o \
-,CONFIG_HERMES,,10,hermes orinoco))
-
-$(eval $(call KMOD_template,NET_HERMES_PCI,net-hermes-pci,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco_pci.o \
-,CONFIG_PCI_HERMES,kmod-net-hermes,11,orinoco_pci))
-
-$(eval $(call KMOD_template,NET_HERMES_PCI,net-hermes-plx,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco_plx.o \
-,CONFIG_PLX_HERMES,kmod-net-hermes,11,orinoco_plx))
-
-$(eval $(call KMOD_template,NET_PRISM54,net-prism54,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/prism54/prism54.o \
-,CONFIG_PRISM54,,10,prism54))
-
-
-# PCMCIA/CardBus
-
-$(eval $(call KMOD_template,PCMCIA_CORE,pcmcia-core,\
-	$(MODULES_DIR)/kernel/drivers/pcmcia/pcmcia_core.o \
-	$(MODULES_DIR)/kernel/drivers/pcmcia/yenta_socket.o \
-	$(MODULES_DIR)/kernel/drivers/pcmcia/ds.o \
-,CONFIG_PCMCIA,,50,pcmcia_core yenta_socket ds))
-
-$(eval $(call KMOD_template,PCMCIA_SERIAL,pcmcia-serial,\
-	$(MODULES_DIR)/kernel/drivers/char/pcmcia/serial_cs.o \
-,CONFIG_PCMCIA_SERIAL_CS,kmod-pcmcia-core,51,serial_cs))
 
 
 # Misc. devices
 
-$(eval $(call KMOD_template,AX25,ax25,\
-	$(MODULES_DIR)/kernel/net/ax25/ax25.o \
-	$(MODULES_DIR)/kernel/drivers/net/hamradio/mkiss.o \
-,CONFIG_AX25,,90,ax25 mkiss))
-
-$(eval $(call KMOD_template,BLUETOOTH,bluetooth,\
-	$(MODULES_DIR)/kernel/net/bluetooth/*.o \
-	$(MODULES_DIR)/kernel/net/bluetooth/rfcomm/*.o \
-	$(MODULES_DIR)/kernel/drivers/bluetooth/*.o \
-,CONFIG_BLUEZ))
-
 $(eval $(call KMOD_template,SOFTDOG,softdog,\
 	$(MODULES_DIR)/kernel/drivers/char/softdog.o \
 ,CONFIG_SOFT_WATCHDOG,,95,softdog))
diff --git a/include/modules-2.6.mk b/include/modules-2.6.mk
index 60ade6f232..087d425fc8 100644
--- a/include/modules-2.6.mk
+++ b/include/modules-2.6.mk
@@ -4,74 +4,7 @@
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
 #
-NF_2_6:=1
-include $(INCLUDE_DIR)/netfilter.mk
-
-# Multimedia
-
-$(eval $(call KMOD_template,PWC,pwc,\
-	$(MODULES_DIR)/kernel/drivers/usb/media/pwc/pwc.ko \
-,CONFIG_USB_PWC,kmod-videodev,63,pwc))
-
-$(eval $(call KMOD_template,VIDEODEV,videodev,\
-	$(MODULES_DIR)/kernel/drivers/media/video/v4l1-compat.ko \
-	$(MODULES_DIR)/kernel/drivers/media/video/v4l2-common.ko \
-	$(MODULES_DIR)/kernel/drivers/media/video/videodev.ko \
-,CONFIG_VIDEO_DEV,,62,videodev))
-
-
-# Network devices
-
-$(eval $(call KMOD_template,NET_AIRO,net-airo,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/airo.ko \
-,CONFIG_AIRO,,10,airo))
-
-$(eval $(call KMOD_template,NET_HERMES,net-hermes,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/hermes.ko \
-	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco.ko \
-,CONFIG_HERMES,,10,hermes orinoco))
-
-$(eval $(call KMOD_template,NET_HERMES_PCI,net-hermes-pci,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco_pci.ko \
-,CONFIG_PCI_HERMES,kmod-net-hermes,11,orinoco_pci))
-
-$(eval $(call KMOD_template,NET_HERMES_PCI,net-hermes-plx,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco_plx.ko \
-,CONFIG_PLX_HERMES,kmod-net-hermes,11,orinoco_plx))
-
-$(eval $(call KMOD_template,NET_PRISM54,net-prism54,\
-	$(MODULES_DIR)/kernel/drivers/net/wireless/prism54/prism54.ko \
-,CONFIG_PRISM54,,10,prism54))
-
-
-# PCMCIA/CardBus
-
-$(eval $(call KMOD_template,PCMCIA_CORE,pcmcia-core,\
-	$(MODULES_DIR)/kernel/drivers/pcmcia/pcmcia.ko \
-	$(MODULES_DIR)/kernel/drivers/pcmcia/pcmcia_core.ko \
-	$(MODULES_DIR)/kernel/drivers/pcmcia/yenta_socket.ko \
-	$(MODULES_DIR)/kernel/drivers/pcmcia/rsrc_nonstatic.ko \
-,CONFIG_PCMCIA,,50,pcmcia_core pcmcia yenta_socket rsrc_nonstatic))
-
-$(eval $(call KMOD_template,PCMCIA_SERIAL,pcmcia-serial,\
-	$(MODULES_DIR)/kernel/drivers/serial/serial_cs.ko \
-,CONFIG_SERIAL_8250_CS))
-
 
 # Misc. devices
 
-$(eval $(call KMOD_template,AX25,ax25,\
-	$(MODULES_DIR)/kernel/net/ax25/ax25.ko \
-	$(MODULES_DIR)/kernel/drivers/net/hamradio/mkiss.ko \
-,CONFIG_AX25,,90,ax25 mkiss))
-
-$(eval $(call KMOD_template,BLUETOOTH,bluetooth,\
-	$(MODULES_DIR)/kernel/net/bluetooth/bluetooth.ko \
-	$(MODULES_DIR)/kernel/net/bluetooth/l2cap.ko \
-	$(MODULES_DIR)/kernel/net/bluetooth/sco.ko \
-	$(MODULES_DIR)/kernel/net/bluetooth/rfcomm/rfcomm.ko \
-	$(MODULES_DIR)/kernel/drivers/bluetooth/hci_uart.ko \
-	$(MODULES_DIR)/kernel/drivers/bluetooth/hci_usb.ko \
-,CONFIG_BT))
-
 
diff --git a/package/kernel/Makefile b/package/kernel/Makefile
index 37cb13e167..a030ad7236 100644
--- a/package/kernel/Makefile
+++ b/package/kernel/Makefile
@@ -32,5 +32,27 @@ endef
 define Build/Compile
 endef
 
+CONFIG_PACKAGE_kernel=y
+define Package/kernel
+  SECTION:=sys
+  CATEGORY:=Kernel
+  DEFAULT:=y
+  TITLE:=Virtual kernel package
+  DESCRIPTION:=Virtual kernel package
+  VERSION:=$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)
+endef
+
+define Package/kernel/install
+  # nothing to do
+endef
+
+# this is more robust than ifdef around eval/call
+ifneq ($(DUMP),1)
+  define BuildKernel
+    $(call BuildPackage,kernel)
+  endef
+endif
+$(eval $(call BuildKernel))
+
 include $(TOPDIR)/target/linux/*/modules.mk
 include ./modules/*.mk
diff --git a/package/kernel/modules/network.mk b/package/kernel/modules/network.mk
index 16a8d69b39..4c82c4cc04 100644
--- a/package/kernel/modules/network.mk
+++ b/package/kernel/modules/network.mk
@@ -219,33 +219,19 @@ endef
 $(eval $(call KernelPackage,sched))
 
 
-define KernelPackage/ieee80211softmac
-  TITLE:=802.11 Networking stack
-  DESCRIPTION:=\\\
-	\\\
-	Includes: \\\
-	- ieee80211_crypt \\\
-	- ieee80211 \\\
-	- ieee80211_crypt_wep \\\
-	- ieee80211_crypt_tkip \\\
-	- ieee80211_crytp_ccmp \\\
-	- ieee80211softmac
-  DEPENDS:=@LINUX_2_6
-  KCONFIG:=$(CONFIG_IEEE80211_SOFTMAC)
-  FILES:= \
-  	$(MODULES_DIR)/kernel/net/ieee80211/*.$(LINUX_KMOD_SUFFIX) \
-	$(MODULES_DIR)/kernel/net/ieee80211/softmac/*.$(LINUX_KMOD_SUFFIX)
-  AUTOLOAD:=$(call AutoLoad,10, \
-	ieee80211_crypt \
-	ieee80211 \
-	ieee80211_crypt_wep \
-	ieee80211_crypt_tkip \
-	ieee80211_crypt_ccmp \
-	ieee80211softmac \
-  )
+
+define KernelPackage/ax25
+  TITLE:=AX25 support
+  DESCRIPTION:=Kernel modules for AX25 support
   SUBMENU:=$(NSMENU)
+  KCONFIG:=$(CONFIG_AX25)
+  FILES:= \
+	$(MODULES_DIR)/kernel/net/ax25/ax25.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/net/hamradio/mkiss.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,80,ax25 mkiss)
 endef
-$(eval $(call KernelPackage,ieee80211softmac))
+$(eval $(call KernelPackage,ax25))
+
 
 
 
diff --git a/package/kernel/modules/other.mk b/package/kernel/modules/other.mk
index 97cfddb9e6..cf66deea48 100644
--- a/package/kernel/modules/other.mk
+++ b/package/kernel/modules/other.mk
@@ -120,3 +120,103 @@ endef
 $(eval $(call KernelPackage,nbd))
 
 
+define KernelPackage/pcmcia-core
+  TITLE:=PCMCIA/CardBus support
+  DESCRIPTION:=Kernel support for PCMCIA/CardBus controllers
+  SUBMENU:=$(EMENU)
+  KCONFIG:=$(CONFIG_PCMCIA)
+endef
+
+define KernelPackage/pcmcia-core/2.4
+  FILES:= \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/pcmcia_core.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/yenta_socket.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/ds.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,40,pcmcia_core yenta_socket ds)
+endef
+
+define KernelPackage/pcmcia-core/2.6
+  FILES:= \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/pcmcia_core.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/pcmcia.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/yenta_socket.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/pcmcia/rsrc_nonstatic.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,40,pcmcia_core pcmcia yenta_socket rsrc_nonstatic)
+endef
+$(eval $(call KernelPackage,pcmcia-core))
+
+
+define KernelPackage/pcmcia-serial
+  TITLE:=Serial devices support
+  DESCRIPTION:=Kernel support for PCMCIA/CardBus serial devices
+  DEPENDS:=kmod-pcmcia-core
+  SUBMENU:=$(EMENU)
+  AUTOLOAD:=$(call AutoLoad,45,serial_cs)
+endef
+
+define KernelPackage/pcmcia-serial/2.4
+  KCONFIG:=$(CONFIG_PCMCIA_SERIAL_CS)
+  FILES:=$(MODULES_DIR)/kernel/drivers/char/pcmcia/serial_cs.$(LINUX_KMOD_SUFFIX)
+endef
+
+define KernelPackage/pcmcia-serial/2.6
+  KCONFIG:=$(CONFIG_SERIAL_8250_CS)
+  FILES:=$(MODULES_DIR)/kernel/drivers/serial/serial_cs.$(LINUX_KMOD_SUFFIX)
+endef
+$(eval $(call KernelPackage,pcmcia-serial))
+
+
+define KernelPackage/bluetooth
+  TITLE:=Bluetooth support
+  DESCRIPTION:=Kernel support for Bluetooth devices
+  SUBMENU:=$(EMENU)
+  FILES:= \
+	$(MODULES_DIR)/kernel/net/bluetooth/bluetooth.ko \
+	$(MODULES_DIR)/kernel/net/bluetooth/l2cap.ko \
+	$(MODULES_DIR)/kernel/net/bluetooth/sco.ko \
+	$(MODULES_DIR)/kernel/net/bluetooth/rfcomm/rfcomm.ko \
+	$(MODULES_DIR)/kernel/drivers/bluetooth/hci_uart.ko \
+	$(MODULES_DIR)/kernel/drivers/bluetooth/hci_usb.ko
+  AUTOLOAD:=$(call AutoLoad,90,bluetooth l2cap sco rfcomm hci_uart hci_usb)
+endef
+
+define KernelPackage/bluetooth/2.4
+  KCONFIG:=$(CONFIG_BLUEZ)
+endef
+
+define KernelPackage/bluetooth/2.6
+  KCONFIG:=$(CONFIG_BT)
+endef
+$(eval $(call KernelPackage,bluetooth))
+
+
+define KernelPackage/softdog
+  TITLE:=Software watchdog driver
+  DESCRIPTION:=Software watchdog driver
+  SUBMENU:=$(EMENU)
+  KCONFIG:=$(CONFIG_SOFT_WATCHDOG)
+  FILES:=$(MODULES_DIR)/kernel/drivers/char/softdog.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,50,softdog)
+endef
+$(eval $(call KernelPackage,softdog))
+
+
+define KernelPackage/videodev
+  TITLE=Video4Linux support
+  DESCRIPTION:=Kernel modules for Video4Linux support
+  SUBMENU:=$(EMENU)
+  KCONFIG:=$(CONFIG_VIDEO_DEV)
+  FILES:=$(MODULES_DIR)/kernel/drivers/media/video/*.$(LINUX_KMOD_SUFFIX)
+endef
+
+define KernelPackage/videodev/2.4
+  AUTOLOAD:=$(call AutoLoad,60,videodev)
+endef
+
+define KernelPackage/videodev/2.6
+  AUTOLOAD:=$(call AutoLoad,60,v4l2-common videodev)
+endef
+$(eval $(call KernelPackage,videodev))
+
+
+
diff --git a/package/kernel/modules/usb.mk b/package/kernel/modules/usb.mk
index 0f196b6ce2..b172252c75 100644
--- a/package/kernel/modules/usb.mk
+++ b/package/kernel/modules/usb.mk
@@ -243,4 +243,25 @@ define KernelPackage/usb-speedtouch
   AUTOLOAD:=$(call AutoLoad,70,usbatm speedtch)
 endef
 $(eval $(call KernelPackage,usb-speedtouch))
-  
+
+
+define KernelPackage/usb-pwc
+  $(call usbdep,+kmod-videodev)
+  TITLE:=Philips WebCam driver
+  DESCRIPTION:=Kernel modules for supporting Philips WebCam USB devices
+  KCONFIG:=$(CONFIG_USB_PWC)
+  AUTOLOAD:=$(call AutoLoad,70,pwc)
+endef
+
+define KernelPackage/usb-pwc/2.4
+  FILES:=$(MODULES_DIR)/kernel/drivers/usb/pwc.$(LINUX_KMOD_SUFFIX)
+endef
+
+define KernelPackage/usb-pwc/2.6
+  FILES:=$(MODULES_DIR)/kernel/drivers/usb/media/pwc.$(LINUX_KMOD_SUFFIX)
+endef
+$(eval $(call KernelPackage,usb-pwc))
+
+
+
+
diff --git a/package/kernel/modules/wireless.mk b/package/kernel/modules/wireless.mk
index 73ee125fc1..413e353f54 100644
--- a/package/kernel/modules/wireless.mk
+++ b/package/kernel/modules/wireless.mk
@@ -8,47 +8,134 @@
 
 WIMENU:=Wireless Drivers
 
-define KernelPackage/bcm43xx
+define KernelPackage/ieee80211
+  TITLE:=802.11 Networking stack
+  DESCRIPTION:=\\\
+	\\\
+	Includes: \\\
+	- ieee80211_crypt \\\
+	- ieee80211 \\\
+	- ieee80211_crypt_wep \\\
+	- ieee80211_crypt_tkip \\\
+	- ieee80211_crytp_ccmp \\\
+	- ieee80211softmac
+  DEPENDS:=@LINUX_2_6
+  KCONFIG:=$(CONFIG_IEEE80211_SOFTMAC)
+  FILES:= \
+  	$(MODULES_DIR)/kernel/net/ieee80211/*.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/net/ieee80211/softmac/*.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,10, \
+	ieee80211_crypt \
+	ieee80211 \
+	ieee80211_crypt_wep \
+	ieee80211_crypt_tkip \
+	ieee80211_crypt_ccmp \
+	ieee80211softmac \
+  )
+  SUBMENU:=$(WIMENU)
+endef
+$(eval $(call KernelPackage,ieee80211))
+
+
+define KernelPackage/net-bcm43xx
   TITLE:=Broadcom BCM43xx driver
   DESCRIPTION:=\\\
 	\\\
 	Includes: \\\
 	- bcm43xx
-  DEPENDS:=kmod-ieee80211softmac
+  DEPENDS:=kmod-ieee80211
   KCONFIG:=$(CONFIG_BCM43XX)
   FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/bcm43xx/bcm43xx.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call Autoload,50,bcm43xx)
   SUBMENU:=$(WIMENU)
 endef
-$(eval $(call KernelPackage,bcm43xx))
+$(eval $(call KernelPackage,net-bcm43xx))
 
-define KernelPackage/ipw2100
-  TITLE:=Intel IPw2100 driver
+define KernelPackage/net-ipw2100
+  TITLE:=Intel IPW2100 driver
   DESCRIPTION:=\\\
 	\\\
 	Includes: \\\
 	- ipw2100
-  DEPENDS:=kmod-ieee80211softmac
+  DEPENDS:=kmod-ieee80211
   KCONFIG:=$(CONFIG_IPW2100)
   FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/ipw2100.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call Autoload,50,ipw2100)
   SUBMENU:=$(WIMENU)
 endef
-$(eval $(call KernelPackage,ipw2100))
+$(eval $(call KernelPackage,net-ipw2100))
 
-define KernelPackage/ipw2200
-  TITLE:=Intel IPw2200 driver
+define KernelPackage/net-ipw2200
+  TITLE:=Intel IPW2200 driver
   DESCRIPTION:=\\\
 	\\\
 	Includes: \\\
 	- ipw2200
-  DEPENDS:=kmod-ieee80211softmac
+  DEPENDS:=kmod-ieee80211
   KCONFIG:=$(CONFIG_IPW2200)
   FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/ipw2200.$(LINUX_KMOD_SUFFIX)
   AUTOLOAD:=$(call Autoload,50,ipw2200)
   SUBMENU:=$(WIMENU)
 endef
-$(eval $(call KernelPackage,ipw2200))
+$(eval $(call KernelPackage,net-ipw2200))
+
+
+define KernelPackage/net-airo
+  TITLE:=Cisco Aironet driver
+  DESCRIPTION:=Driver for Cisco Aironet cards
+  KCONFIG:=$(CONFIG_AIRO)
+  SUBMENU:=$(WIMENU)
+  FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/airo.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,50,airo)
+endef
+$(eval $(call KernelPackage,net-airo))
+
+
+define KernelPackage/net-hermes
+  TITLE:=Hermes 802.11b chipset support
+  DESCRIPTION:=Kernel support for Hermes 802.11b chipsets
+  KCONFIG:=$(CONFIG_HERMES)
+  SUBMENU:=$(WIMENU)
+  FILES:= \
+	$(MODULES_DIR)/kernel/drivers/net/wireless/hermes.$(LINUX_KMOD_SUFFIX) \
+	$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,50,hermes orinoco)
+endef
+$(eval $(call KernelPackage,net-hermes))
+
+
+define KernelPackage/net-hermes-pci
+  TITLE:=Intersil Prism 2.5 PCI support
+  DESCRIPTION:=Kernel modules for Intersil Prism 2.5 PCI support
+  KCONFIG:=$(CONFIG_PCI_HERMES)
+  DEPENDS:=kmod-net-hermes
+  SUBMENU:=$(WIMENU)
+  FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco_pci.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,55,orinoco_pci)
+endef
+$(eval $(call KernelPackage,net-hermes-pci))
+
 
+define KernelPackage/net-hermes-plx
+  TITLE:=PLX9052 based PCI adaptor
+  DESCRIPTION:=Kernel modules for Hermes in PLX9052 based PCI adaptors
+  KCONFIG:=$(CONFIG_PLX_HERMES)
+  DEPENDS:=kmod-net-hermes
+  SUBMENU:=$(WIMENU)
+  FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/orinoco_plx.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,55,orinoco_plx)
+endef
+$(eval $(call KernelPackage,net-hermes-plx))
+
+
+define KernelPackage/net-prism54
+  TITLE:=Intersil Prism54 support
+  DESCRIPTION:=Kernel modules for Intersil Prism54 support
+  KCONFIG:=$(CONFIG_PRISM54)
+  SUBMENU:=$(WIMENU)
+  FILES:=$(MODULES_DIR)/kernel/drivers/net/wireless/prism54/prism54.$(LINUX_KMOD_SUFFIX)
+  AUTOLOAD:=$(call AutoLoad,prism54)
+endef
+$(eval $(call KernelPackage,net-prism54))
 
 
diff --git a/target/linux/Config.in b/target/linux/Config.in
deleted file mode 100644
index a6153cebf5..0000000000
--- a/target/linux/Config.in
+++ /dev/null
@@ -1,177 +0,0 @@
-menu "Kernel Configuration / Device Support"
-
-comment "Kernel modules"
-
-menu "Multimedia devices support"
-
-config PACKAGE_KMOD_PWC
-	prompt "kmod-pwc.......................... Kernel driver for USB Philips Cameras"
-	tristate
-	depends PACKAGE_kmod-usb-core
-	default m
-
-config PACKAGE_KMOD_VIDEODEV
-	prompt "kmod-videodev..................... Video (For Linux) kernel support"
-	tristate
-	default m
-
-endmenu
-
-
-menu "Network devices support"
-	depends LINUX_2_4_X86 || LINUX_2_6_X86
-
-config PACKAGE_KMOD_NET_AIRO
-	prompt "kmod-net-airo..................... Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards kernel support"
-	tristate
-	depends LINUX_2_4_X86 || LINUX_2_6_X86
-	default m
-	help
-	  This is the standard Linux driver to support Cisco/Aironet ISA and 
-	  PCI 802.11 wireless cards.
-	  It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X 
-	  - with or without encryption) as well as card before the Cisco 
-	  acquisition (Aironet 4500, Aironet 4800, Aironet 4800B).
-	  
-	  This driver support both the standard Linux Wireless Extensions 
-	  and Cisco proprietary API, so both the Linux Wireless Tools and the 
-	  Cisco Linux utilities can be used to configure the card.
-
-
-config PACKAGE_KMOD_NET_HERMES
-	prompt "kmod-net-hermes................... Hermes chipset 802.11b support (Orinoco/Prism2/Symbol) kernel support"
-	tristate
-	depends LINUX_2_4_X86 || LINUX_2_6_X86
-	default m
-	help
-	  A driver for 802.11b wireless cards based based on the "Hermes" or 
-	  Intersil HFA384x (Prism 2) MAC controller.  This includes the vast 
-	  majority of the PCMCIA 802.11b cards (which are nearly all rebadges) 
-	  - except for the Cisco/Aironet cards.  Cards supported include the 
-	  Apple Airport (not a PCMCIA card), WavelanIEEE/Orinoco, 
-	  Cabletron/EnteraSys Roamabout, ELSA AirLancer, MELCO Buffalo, Avaya, 
-	  IBM High Rate Wireless, Farralon Syyline, Samsung MagicLAN, Netgear 
-	  MA401, LinkSys WPC-11, D-Link DWL-650, 3Com AirConnect, Intel 
-	  PRO/Wireless, and Symbol Spectrum24 High Rate amongst others.
-
-config PACKAGE_KMOD_NET_HERMES_PCI
-	prompt   "kmod-net-hermes-pci............. Intersil Prism 2.5 PCI 802.11b adaptor support"
-	tristate
-	default m
-	depends PACKAGE_KMOD_NET_HERMES
-	help
-	  Enable support for PCI and mini-PCI 802.11b wireless NICs based on 
-	  the Prism 2.5 chipset.  These are true PCI cards, not the 802.11b 
-	  PCMCIA cards bundled with PCI<->PCMCIA adaptors which are also 
-	  common.  Some of the built-in wireless adaptors in laptops are of 
-	  this variety.
-
-config PACKAGE_KMOD_NET_HERMES_PLX
-	prompt   "kmod-net-hermes-plx............. Hermes in PLX9052 based PCI adaptor (Netgear MA301, etc.) kernel support"
-	tristate
-	default m
-	depends PACKAGE_KMOD_NET_HERMES
-	help
-	  Enable support for PCMCIA cards supported by the "Hermes" (aka 
-	  orinoco_cs) driver when used in PLX9052 based PCI adaptors.  These 
-	  adaptors are not a full PCMCIA controller but act as a more limited 
-	  PCI <-> PCMCIA bridge.  Several vendors sell such adaptors so that 
-	  802.11b PCMCIA cards can be used in desktop machines.  The Netgear 
-	  MA301 is such an adaptor.
-
-
-
-config PACKAGE_KMOD_NET_PRISM54
-	prompt "kmod-net-prism54.................. Intersil Prism GT/Duette/Indigo PCI/PCMCIA cards kernel support"
-	tristate
-	depends LINUX_2_4_X86 || LINUX_2_6_X86 || LINUX_2_4_BRCM || LINUX_2_6_BRCM
-	default m
-	help
-	  Enable PCI and Cardbus support for the following chipset based cards: 
-	  
-	   * ISL3880 - Prism GT       802.11 b/g
-	   * ISL3877 - Prism Indigo   802.11 a
-	   * ISL3890 - Prism Duette   802.11 a/b/g
-	  
-	  For a complete list of supported cards visit <http://prism54.org>.
-	  Here is the latest confirmed list of supported cards: 
-	  
-	   * 3com OfficeConnect 11g Cardbus Card aka 3CRWE154G72
-	   * Allnet ALL0271 PCI Card
-	   * Compex WL54G Cardbus Card
-	   * Corega CG-WLCB54GT Cardbus Card
-	   * D-Link Air Plus Xtreme G A1 Cardbus Card aka DWL-g650
-	   * I-O Data WN-G54/CB Cardbus Card
-	   * Kobishi XG-300 aka Z-Com Cardbus Card
-	   * Netgear WG511 Cardbus Card
-	   * Ovislink WL-5400PCI PCI Card
-	   * Peabird WLG-PCI PCI Card
-	   * Sitecom WL-100i Cardbus Card
-	   * Sitecom WL-110i PCI Card
-	   * SMC2802W - EZ Connect g 2.4GHz 54 Mbps Wireless PCI Card
-	   * SMC2835W - EZ Connect g 2.4GHz 54 Mbps Wireless Cardbus Card
-	   * Z-Com XG-900 PCI Card
-	   * Zyxel G-100 Cardbus Card
-	  
-	  If you enable this, you require a firmware file as well.
-	  You will need to copy this to /usr/lib/hotplug/firmware/isl3890.
-	  You can get this non-GPL'd firmware file from the Prism54 project page: 
-	  <http://prism54.org>.
-	  
-	  Note: You need a motherboard with DMA support to use any of these cards.
-
-endmenu
-
-menu "PCMCIA/CardBus support"
-	depends PCMCIA_SUPPORT
-
-config PACKAGE_KMOD_PCMCIA_CORE
-	prompt "kmod-pcmcia-core.................. PCMCIA/CardBus support"
-	tristate
-	default m
-
-config PACKAGE_KMOD_PCMCIA_SERIAL
-	prompt   "kmod-pcmcia-serial.............. PCMCIA/CardBus serial device support"
-	tristate
-	default m
-	depends PACKAGE_KMOD_PCMCIA_CORE
-
-endmenu
-
-
-menu "Misc. devices support"
-
-config PACKAGE_KMOD_AX25
-	prompt "kmod-ax25......................... AX25 support"
-	tristate
-	default m
-	help
-	  Kernel modules for AX25 protocol family
-	  
-	  This package contains both the AX25 layer 2 support (ax25) and AX25 KISS driver (mkiss)
-
-config PACKAGE_KMOD_BLUETOOTH
-	prompt "kmod-bluetooth.................... Bluetooth drivers and network stack"
-	tristate
-	depends PCI_SUPPORT || USB_SUPPORT
-	default m
-	help
-	  Bluetooth drivers and network stack
-
-config PACKAGE_KMOD_LP
-	prompt "kmod-lp........................... Parallel port and lp support"
-	tristate
-	default m
-	help
-	  Kernel modules for line printer and parallel port support
-
-config PACKAGE_KMOD_SOFTDOG
-	prompt "kmod-softdog...................... Software watchdog"
-	tristate
-	default m
-	help
-	  Kernel modules for software watchdog driver
-
-endmenu
-
-endmenu
-- 
2.30.2