--- src/joystick/linux/SDL_sysjoystick.original 2015-07-21 16:28:02.939861444 -0500 +++ src/joystick/linux/SDL_sysjoystick.c 2015-07-21 16:26:43.162864247 -0500 @@ -826,6 +826,7 @@ return(-1); } SDL_memset(joystick->hwdata, 0, sizeof(*joystick->hwdata)); + SDL_memset(joystick->hwdata->abs_map, ABS_MAX, sizeof(*joystick->hwdata->abs_map)*ABS_MAX); joystick->hwdata->fd = fd; /* Set the joystick to non-blocking read mode */ @@ -1120,15 +1121,17 @@ events[i].value); break; default: - events[i].value = EV_AxisCorrect(joystick, code, events[i].value); + if (joystick->hwdata->abs_map[code] != ABS_MAX ) { + events[i].value = EV_AxisCorrect(joystick, code, events[i].value); #ifndef NO_LOGICAL_JOYSTICKS - if (!LogicalJoystickAxis(joystick, - joystick->hwdata->abs_map[code], - events[i].value)) + if (!LogicalJoystickAxis(joystick, + joystick->hwdata->abs_map[code], + events[i].value)) #endif - SDL_PrivateJoystickAxis(joystick, - joystick->hwdata->abs_map[code], - events[i].value); + SDL_PrivateJoystickAxis(joystick, + joystick->hwdata->abs_map[code], + events[i].value); + } break; } break;