Index: package/kernel/switch/Makefile
===================================================================
--- package/kernel/switch/Makefile	(revision 38233)
+++ package/kernel/switch/Makefile	(working copy)
@@ -15,7 +15,7 @@
 
 define KernelPackage/switch
   SUBMENU:=Other modules
-  DEPENDS:=@TARGET_brcm47xx @!LINUX_3_10
+  DEPENDS:=@TARGET_brcm47xx
   TITLE:=Switch drivers
   FILES:= \
 	$(PKG_BUILD_DIR)/switch-core.ko \
Index: package/kernel/switch/src/switch-core.c
===================================================================
--- package/kernel/switch/src/switch-core.c	(revision 38233)
+++ package/kernel/switch/src/switch-core.c	(working copy)
@@ -68,7 +68,7 @@
 
 static ssize_t switch_proc_read(struct file *file, char *buf, size_t count, loff_t *ppos)
 {
-	struct proc_dir_entry *dent = PDE(file->f_dentry->d_inode);
+	switch_proc_handler *handler = PDE_DATA(file->f_dentry->d_inode);
 	char *page;
 	int len = 0;
 
@@ -75,8 +75,7 @@
 	if ((page = kmalloc(SWITCH_MAX_BUFSZ, GFP_KERNEL)) == NULL)
 		return -ENOBUFS;
 
-	if (dent->data != NULL) {
-		switch_proc_handler *handler = (switch_proc_handler *) dent->data;
+	if (handler != NULL) {
 		if (handler->handler.read != NULL)
 			len += handler->handler.read(handler->driver, page + len, handler->nr);
 	}
@@ -100,7 +99,7 @@
 
 static ssize_t switch_proc_write(struct file *file, const char *buf, size_t count, void *data)
 {
-	struct proc_dir_entry *dent = PDE(file->f_dentry->d_inode);
+	switch_proc_handler *handler = PDE_DATA(file->f_dentry->d_inode);
 	char *page;
 	int ret = -EINVAL;
 
@@ -113,8 +112,7 @@
 	}
 	page[count] = 0;
 
-	if (dent->data != NULL) {
-		switch_proc_handler *handler = (switch_proc_handler *) dent->data;
+	if (handler != NULL) {
 		if (handler->handler.write != NULL) {
 			if ((ret = handler->handler.write(handler->driver, page, handler->nr)) >= 0)
 				ret = count;
@@ -183,10 +181,7 @@
 	if (handler->read != NULL) mode |= S_IRUSR;
 	if (handler->write != NULL) mode |= S_IWUSR;
 
-	if ((p = create_proc_entry(handler->name, mode, parent)) != NULL) {
-		p->data = (void *) tmp;
-		p->proc_fops = &switch_proc_fops;
-	}
+	(void)proc_create_data(handler->name, mode, parent, &switch_proc_fops, tmp);
 }
 
 static inline void add_handlers(switch_driver *driver, const switch_config *handlers, struct proc_dir_entry *parent, int nr)
Index: package/kernel/switch/src/switch-core.h
===================================================================
--- package/kernel/switch/src/switch-core.h	(revision 38233)
+++ package/kernel/switch/src/switch-core.h	(working copy)
@@ -3,6 +3,7 @@
 
 #include <linux/version.h>
 #include <linux/list.h>
+#include <linux/slab.h>
 #define SWITCH_MAX_BUFSZ	4096
 #define SWITCH_NAME_BUFSZ	16
 
