--- a/tn7dsl.c
+++ b/tn7dsl.c
@@ -203,7 +203,11 @@ led_reg_t ledreg[2];
 static struct led_funcs ledreg[2];
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
 #define DEV_DSLMOD       CTL_UNNUMBERED
+#else
+#define DEV_DSLMOD	0
+#endif
 #define MAX_STR_SIZE     256
 #define DSL_MOD_SIZE     256
 
@@ -3431,9 +3435,16 @@ static int dslmod_sysctl(ctl_table *ctl,
    */
   if(write)
     {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
     ret = proc_dostring(ctl, write, filp, buffer, lenp, 0);
-
+#else
+    ret = proc_dostring(ctl, write, buffer, lenp, 0);
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
     switch (ctl->ctl_name)
+#else
+    switch ((long)ctl->extra2)
+#endif
       {
       case DEV_DSLMOD:
       ptr = strpbrk(info, " \t");
@@ -3517,14 +3528,29 @@ static int dslmod_sysctl(ctl_table *ctl,
   else
     {
     len += sprintf(info+len, mod_req);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
     ret = proc_dostring(ctl, write, filp, buffer, lenp, 0);
+#else
+    ret = proc_dostring(ctl, write, buffer, lenp, 0);
+#endif
     }
   return ret;
 }
 
 
 ctl_table dslmod_table[] = {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
   {DEV_DSLMOD, "dslmod", info, DSL_MOD_SIZE, 0644, NULL, NULL, &dslmod_sysctl, &sysctl_string}
+#else
+	{
+		.procname 		= "dslmod",
+		.data			= info,
+		.maxlen			= DSL_MOD_SIZE,
+		.mode			= 0644,
+		.proc_handler	= &dslmod_sysctl,
+		.extra2			= (void *)DEV_DSLMOD,
+	}
+#endif
   ,
   {0}
   };
@@ -3532,7 +3558,16 @@ ctl_table dslmod_table[] = {
 /* Make sure that /proc/sys/dev is there */
 ctl_table dslmod_root_table[] = {
 #ifdef CONFIG_PROC_FS
+	#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
   {CTL_DEV, "dev", NULL, 0, 0555, dslmod_table}
+	#else
+	{
+		.procname		= "dev",
+		.maxlen			= 0,
+		.mode			= 0555,
+		.child			= dslmod_table,
+	}
+	#endif
   ,
 #endif /* CONFIG_PROC_FS */
   {0}
