diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate
index 45bf77b5cfb3c1d55442a11d1fc27282985dfaa8..a0ff53a72c5ca04dab23711981186124ba3e7ed1 100755
--- a/package/base-files/files/bin/config_generate
+++ b/package/base-files/files/bin/config_generate
@@ -293,36 +293,40 @@ generate_led() {
 
 	json_select led
 	json_select "$key"
-	json_get_vars name sysfs type trigger device default port_mask
+	json_get_vars name sysfs type trigger default
 
 	uci -q batch <<-EOF
 		delete system.$cfg
 		set system.$cfg='led'
 		set system.$cfg.name='$name'
 		set system.$cfg.sysfs='$sysfs'
-		set system.$cfg.dev='$device'
 		set system.$cfg.trigger='$trigger'
-		set system.$cfg.port_mask='$port_mask'
 		set system.$cfg.default='$default'
 	EOF
 
 	case "$type" in
 		netdev)
+			local device
+			json_get_vars device
 			uci -q batch <<-EOF
 				set system.$cfg.trigger='netdev'
 				set system.$cfg.mode='link tx rx'
+				set system.$cfg.dev='$device'
 			EOF
 		;;
 
 		usb)
+			local device
+			json_get_vars device
 			uci -q batch <<-EOF
 				set system.$cfg.trigger='usbdev'
 				set system.$cfg.interval='50'
+				set system.$cfg.dev='$device'
 			EOF
 		;;
 
 		rssi)
-			local minq maxq offset factor
+			local iface minq maxq offset factor
 			json_get_vars iface minq maxq offset factor
 			uci -q batch <<-EOF
 				set system.$cfg.trigger='rssi'
@@ -333,6 +337,14 @@ generate_led() {
 				set system.$cfg.factor='$factor'
 			EOF
 		;;
+
+		switch)
+			local port_mask
+			json_get_vars port_mask
+			uci -q batch <<-EOF
+				set system.$cfg.port_mask='$port_mask'
+			EOF
+		;;
 	esac
 
 	json_select ..