--- ./drivers/input/joystick/magellan.c	2006-04-19 08:10:14.000000000 +0200
+++ ./drivers/input/joystick/magellan.c	2006-05-06 18:02:52.000000000 +0200
@@ -97,10 +97,13 @@ static void magellan_process_packet(stru
 		case 'd':				/* Axis data */
 			if (magellan->idx != 25) return;
 			if (magellan_crunch_nibbles(data, 24)) return;
-			for (i = 0; i < 6; i++)
-				input_report_abs(dev, magellan_axes[i],
-					(data[(i << 2) + 1] << 12 | data[(i << 2) + 2] << 8 |
-					 data[(i << 2) + 3] <<  4 | data[(i << 2) + 4]) - 32768);
+			for (i = 0; i < 6; i++){
+				int value;
+				value=(data[(i << 2) + 1] << 12 | data[(i << 2) + 2] << 8 | data[(i << 2) + 3] <<  4 |
+					data[(i << 2) + 4]) - 32768;
+				value=(value*value) / 256 * (value < 0 ? -1 : 1);
+				input_report_abs(dev, magellan_axes[i], value);
+			}
 			break;
 
 		case 'k':				/* Button data */
