STRUCT INPUT_ABSINFO(9)
π struct input_absinfo(9)
okay so bestie, welcome to the Kernel API Manual β¨ this one's about struct input_absinfo and honestly it's lowkey the blueprint for how the kernel talks about axes. let me put you on π«Ά
πΈ NAME πΈ
struct input_absinfo β the struct that the EVIOCGABS / EVIOCSABS ioctls use, like literally that's its whole job π
π SYNOPSIS π
struct input_absinfo {
__s32 value;
__s32 minimum;
__s32 maximum;
__s32 fuzz;
__s32 flat;
__s32 resolution;
};
look at her. six __s32 fields, no notes, iconic π
π¦ Members π¦
valueβ the latest reported value for the axis. the current reading, the moment, the main character β¨minimumβ specifies the minimum value for the axis. the floor, fr fr.maximumβ specifies the maximum value for the axis. the ceiling bestie π―fuzzβ specifies the fuzz value, which is what's used to filter noise out of the event stream. think of it as the "ignore the jitter" knob πͺοΈflatβ values that land within this value get discarded by thejoydevinterface and reported as0instead. so yes, tiny movements get rounded down to nothing πresolutionβ specifies the resolution for the values reported for the axis. precision info, basically π
π Description π
heads up bestie: the input core does not clamp reported values to the [minimum, maximum] limits. that task is left to userspace, so if you thought the kernel had your back on this β it does not π that's on you β
so, the resolution tea β the default resolution for the main axes (ABS_X, ABS_Y, ABS_Z, ABS_MT_POSITION_X, ABS_MT_POSITION_Y) is reported in units per millimeter (units/mm), and the resolution for rotational axes (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian. slay, units.
the resolution for the size axes (ABS_MT_TOUCH_MAJOR, ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR, ABS_MT_WIDTH_MINOR) is reported in units per millimeter (units/mm). same unit, different flavor π
and when INPUT_PROP_ACCELEROMETER is set, the resolution changes β plot twist π³ the main axes (ABS_X, ABS_Y, ABS_Z) are then reported in units per g (units/g), and rotational axes (ABS_RX, ABS_RY, ABS_RZ) are reported in units per degree per second (units/deg/s).
so yeah. same struct, different units depending on whether the accelerometer prop is set. iykyk π«
β SEE ALSO β
go read these next, bestie, they're all in the kernel file ./include/uapi/linux/input.h:
struct input_keymap_entry(9)EVIOCGMTSLOTS(9)EVIOCGMASK(9)EVIOCSMASK(9)struct ff_replay(9)struct ff_trigger(9)struct ff_envelope(9)struct ff_constant_effect(9)struct ff_ramp_effect(9)struct ff_condition_effect(9)struct ff_periodic_effect(9)struct ff_rumble_effect(9)struct ff_haptic_effect(9)struct ff_effect(9)
that's the whole page babes, go forth and respect your limits (or don't, userspace is literally in charge of clamping) π
sign-off: this came from ./include/uapi/linux, dated October 2026, and it's struct input_absinfo(9) forever and always πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms