--- /usr/src/line6linux/driver/trunk/driver.c	2012-06-08 10:33:34.003582761 +0200
+++ /usr/src/linux/drivers/staging/line6/driver.c	2012-06-12 10:50:31.578089504 +0200
@@ -443,10 +443,26 @@
 			break;
 
 		case LINE6_DEVID_PODHD300:
-		case LINE6_DEVID_PODHD500:
 			break; /* let userspace handle MIDI */
 
-		case LINE6_DEVID_PODXTLIVE:
+		case LINE6_DEVID_PODHD500:
+			switch (line6->interface_number) {
+			case PODHD500_INTERFACE_POD:
+				break;/* let userspace handle MIDI */
+
+			case PODHD500_INTERFACE_VARIAX:
+				line6_variax_process_message((struct
+							      usb_line6_variax
+							      *)line6);
+				break;
+
+			default:
+				dev_err(line6->ifcdev,
+					"PODHD500 interface %d not supported\n",
+					line6->interface_number);
+			}
+			break;
+*		case LINE6_DEVID_PODXTLIVE:
 			switch (line6->interface_number) {
 			case PODXTLIVE_INTERFACE_POD:
 				line6_pod_process_message((struct usb_line6_pod
@@ -883,11 +899,27 @@
 		break;
 
 	case LINE6_DEVID_PODHD500:
-		size = sizeof(struct usb_line6_podhd);
-		ep_read = 0x86;
-		ep_write = 0x02;
+                switch (interface_number) {
+			case PODHD500_INTERFACE_POD:
+				size = sizeof(struct usb_line6_podhd);
+				ep_read = 0x86;
+				ep_write = 0x02;
+				break;
+		
+			case PODHD500_INTERFACE_VARIAX:
+				size = sizeof(struct usb_line6_variax);
+				ep_read = 0x81;
+				ep_write = 0x01;
+				break;
+		
+			default:
+				ret = -ENODEV;
+				goto err_put;
+		}
 		break;
 
+
+
 	case LINE6_DEVID_POCKETPOD:
 		size = sizeof(struct usb_line6_pod);
 		ep_read = 0x82;
@@ -1041,11 +1073,33 @@
 		break;
 
 	case LINE6_DEVID_PODHD300:
-	case LINE6_DEVID_PODHD500:
 		ret = line6_podhd_init(interface,
 				       (struct usb_line6_podhd *)line6);
 		break;
 
+	case LINE6_DEVID_PODHD500:
+		switch (interface_number) {
+		case PODHD500_INTERFACE_POD:
+			ret =
+			    line6_podhd_init(interface,
+					   (struct usb_line6_podhd *)line6);
+			break;
+
+		case PODHD500_INTERFACE_VARIAX:
+			ret =
+			    line6_variax_init(interface,
+					      (struct usb_line6_variax *)line6);
+			break;
+
+		default:
+			dev_err(&interface->dev,
+				"POD HD500 interface %d not supported\n",
+				interface_number);
+			ret = -ENODEV;
+		}
+
+		break;
+
 	case LINE6_DEVID_PODXTLIVE:
 		switch (interface_number) {
 		case PODXTLIVE_INTERFACE_POD:
@@ -1169,10 +1223,22 @@
 			break;
 
 		case LINE6_DEVID_PODHD300:
-		case LINE6_DEVID_PODHD500:
 			line6_podhd_disconnect(interface);
 			break;
 
+		case LINE6_DEVID_PODHD500:
+			switch (interface_number) {
+			case PODHD500_INTERFACE_POD:
+				line6_podhd_disconnect(interface);
+				break;
+
+			case PODHD500_INTERFACE_VARIAX:
+				line6_variax_disconnect(interface);
+				break;
+			}
+
+			break;
+
 		case LINE6_DEVID_PODXTLIVE:
 			switch (interface_number) {
 			case PODXTLIVE_INTERFACE_POD:
--- /usr/src/line6linux/driver/trunk/podhd.h	2012-06-07 10:36:33.573350283 +0200
+++ /usr/src/linux/drivers/staging/line6/podhd.h	2012-06-08 12:27:42.810274062 +0200
@@ -16,6 +16,15 @@
 
 #include "driver.h"
 
+
+/*
+ * POD HD500 interfaces
+ *         */
+#define PODHD500_INTERFACE_POD    0
+#define PODHD500_INTERFACE_VARIAX 1
+
+
+
 struct usb_line6_podhd {
 	/**
 		Generic Line6 USB data.
