STRUCT F11_2D_SENSOR_QUERIES(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹πŸ’… struct f11_2d_sensor_queries(9) πŸ’…πŸ¦‹

okay so bestie, welcome to the Kernel API Manual, section 9 β€” this is the whole entire page for struct f11_2d_sensor_queries and it is long, so buckle up. this struct is literally the vibe check for a 2-D sensor: it tells you what the thing can do before you go poking at it. it's giving "resume of a touchpad." let's get into it ✨


🌸 NAME 🌸

struct f11_2d_sensor_queries β€” describes sensor capabilities. that's it, that's the whole job, and honestly? iconic πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

struct f11_2d_sensor_queries {
    u8 nr_fingers;
    bool has_rel;
    bool has_abs;
    bool has_gestures;
    bool has_sensitivity_adjust;
    bool configurable;
    u8 nr_x_electrodes;
    u8 nr_y_electrodes;
    u8 max_electrodes;
    u8 abs_data_size;
    bool has_anchored_finger;
    bool has_adj_hyst;
    bool has_dribble;
    bool has_bending_correction;
    bool has_large_object_suppression;
    bool has_jitter_filter;
    u8 f11_2d_query6;
    bool has_single_tap;
    bool has_tap_n_hold;
    bool has_double_tap;
    bool has_early_tap;
    bool has_flick;
    bool has_press;
    bool has_pinch;
    bool has_chiral;
    bool query7_nonzero;
    bool has_palm_det;
    bool has_rotate;
    bool has_touch_shapes;
    bool has_scroll_zones;
    bool has_individual_scroll_zones;
    bool has_mf_scroll;
    bool has_mf_edge_motion;
    bool has_mf_scroll_inertia;
    bool query8_nonzero;
    bool has_pen;
    bool has_proximity;
    bool has_palm_det_sensitivity;
    bool has_suppress_on_palm_detect;
    bool has_two_pen_thresholds;
    bool has_contact_geometry;
    bool has_pen_hover_discrimination;
    bool has_pen_filters;
    u8 nr_touch_shapes;
    bool has_z_tuning;
    bool has_algorithm_selection;
    bool has_w_tuning;
    bool has_pitch_info;
    bool has_finger_size;
    bool has_segmentation_aggressiveness;
    bool has_XY_clip;
    bool has_drumming_filter;
    bool has_gapless_finger;
    bool has_gapless_finger_tuning;
    bool has_8bit_w;
    bool has_adjustable_mapping;
    bool has_info2;
    bool has_physical_props;
    bool has_finger_limit;
    bool has_linear_coeff_2;
    u8 jitter_window_size;
    u8 jitter_filter_type;
    u8 light_control;
    bool is_clear;
    u8 clickpad_props;
    u8 mouse_buttons;
    bool has_advanced_gestures;
    u16 x_sensor_size_mm;
    u16 y_sensor_size_mm;
};

that's a LOT of bools and honestly? she's thorough. we respect her 🫢


πŸ‘‘ Members πŸ‘‘

so Members is technically its own heading up in here, but it's really just the main character section β€” every field, one by one, no skips, no cap:

  • nr_fingers β€” the max number of fingers the 2-D sensor can handle. multitouch queen πŸ’…
  • has_rel β€” sensor reports relative motion. yes babe, deltas, we love her.
  • has_abs β€” sensor reports absolute position. pointing-at-a-spot energy ✨
  • has_gestures β€” it does gesture reporting. taps, swipes, the whole choreo.
  • has_sensitivity_adjust β€” you get a global sensitivity adjustment. one dial for everything, periodt.
  • configurable β€” the sensor supports a bunch of various configuration options. she's flexible πŸ’–
  • nr_x_electrodes β€” max number of electrodes the sensor supports along the X axis.
  • nr_y_electrodes β€” same deal, but the Y axis. πŸ¦‹
  • max_electrodes β€” the total number of X and Y electrodes that you're actually allowed to configure.
  • abs_data_size β€” describes the format of the data coming out of the absolute data source. heads up: only one format (the kind used here) is supported at this time β€” so don't go inventing new ones, bestie πŸ™ˆ
  • has_anchored_finger β€” sensor supports the high-precision second-finger tracking that comes from the manual tracking and motion sensitivity options. fancy fr fr.
  • has_adj_hyst β€” the difference between the finger release threshold and the touch threshold.
  • has_dribble β€” sensor can generate dribble interrupts, which you can turn on or off with the dribble control bit. dribble 😭 the naming committee was in a MOOD.
  • has_bending_correction β€” the bending-related data registers 28 and 36, plus control register 52..57, are present.
  • has_large_object_suppression β€” control register 58 and data register 28 exist.
  • has_jitter_filter β€” query 13 and control 73..76 exist.
  • f11_2d_query6 β€” this register is reserved. nothing to see here, move along πŸ‘€
  • has_single_tap β€” basic single-tap gesture: supported βœ…
  • has_tap_n_hold β€” tap-and-hold gesture: supported βœ…
  • has_double_tap β€” double-tap gesture: supported βœ…
  • has_early_tap β€” early tap is supported, and it gets reported as soon as the finger lifts for any tap event that could be read as either a single tap or as the first tap of a double-tap or tap-and-hold gesture. she's eager, she's proactive, she's reporting early πŸ’…
  • has_flick β€” flick detection is supported. swish πŸ¦‹
  • has_press β€” press gesture reporting is supported.
  • has_pinch β€” pinch gesture detection is supported. two fingers, one destiny ✨
  • has_chiral β€” chiral (circular) scrolling gesture detection is supported. going in circles bestie πŸŒ€
  • query7_nonzero β€” true if none of the query 7 bits are set. yes, that's genuinely what it says. no, we're not going to argue with the manpage 😭
  • has_palm_det β€” the 2-D sensor pings the host whenever a large conductive object β€” like a palm, or a cheek β€” touches it. so it knows when you're being a menace πŸ™ˆ
  • has_rotate β€” rotation gesture detection is supported. spin it πŸ”₯
  • has_touch_shapes β€” TouchShapes are supported. and what's a TouchShape, you ask? it's a fixed rectangular area on the sensor that behaves like a capacitive button. lil rectangle, big main character energy πŸ‘‘
  • has_scroll_zones β€” scrolling areas near the sensor edges are supported. edge-scrolling supremacy.
  • has_individual_scroll_zones β€” if 1, then 4 scroll zones are supported; if 0, then only two are supported. choose your fighter.
  • has_mf_scroll β€” the multifinger_scrolling bit will be set when more than one finger is involved in a scrolling action.
  • has_mf_edge_motion β€” tells you whether the multi-finger edge motion gesture is supported.
  • has_mf_scroll_inertia β€” tells you whether the multi-finger scroll inertia feature is supported. momentum, bestie 🌈
  • query8_nonzero β€” true if none of the query 8 bits are set. same energy as her sibling above, we stan consistency πŸ’€
  • has_pen β€” stylus detection is supported, and registers F11_2D_Ctrl20 and F11_2D_Ctrl21 exist. pen girlies rise πŸ–ŠοΈ
  • has_proximity β€” detection of fingers near the sensor is supported (not even touching yet, she just knows), and registers F11_2D_Ctrl22 through F11_2D_Ctrl26 exist.
  • has_palm_det_sensitivity β€” sensor supports the palm detect sensitivity feature, and register F11_2D_Ctrl27 exists.
  • has_suppress_on_palm_detect β€” device supports the large object detect suppression feature, and register F11_2D_Ctrl27 exists.
  • has_two_pen_thresholds β€” if has_pen is also set, then F11_2D_Ctrl35 exists.
  • has_contact_geometry β€” sensor supports using contact geometry to map absolute X and Y target positions, and registers F11_2D_Data18 through F11_2D_Data27 exist. geometry class was worth it πŸ“
  • has_pen_hover_discrimination β€” if has_pen is also set, then registers F11_2D_Data29 through F11_2D_Data31, F11_2D_Ctrl68.*, F11_2D_Ctrl69 and F11_2D_Ctrl72 exist.
  • has_pen_filters β€” if has_pen is also set, then registers F11_2D_Ctrl70 and F11_2D_Ctrl71 exist.
  • nr_touch_shapes β€” the total number of touch shapes supported.
  • has_z_tuning β€” if set, the sensor supports Z tuning, and registers F11_2D_Ctrl29 through F11_2D_Ctrl33 exist.
  • has_algorithm_selection β€” controls the choice of noise suppression algorithm. pick your fighter, algorithm edition.
  • has_w_tuning β€” sensor supports Wx and Wy scaling, and registers F11_2D_Ctrl36 through F11_2D_Ctrl39 exist.
  • has_pitch_info β€” the X and Y pitches of the sensor electrodes can be configured, and registers F11_2D_Ctrl40 and F11_2D_Ctrl41 exist.
  • has_finger_size β€” the default finger width settings for the sensor can be configured, and registers F11_2D_Ctrl42 through F11_2D_Ctrl44 exist.
  • has_segmentation_aggressiveness β€” the sensor's ability to tell multiple objects that are close together apart can be configured, and register F11_2D_Ctrl45 exists. personal space, respected 🫢
  • has_XY_clip β€” the inactive outside borders of the sensor can be configured, and registers F11_2D_Ctrl46 through F11_2D_Ctrl49 exist.
  • has_drumming_filter β€” the sensor can be configured to tell the difference between a fast flick and a quick drumming movement, and registers F11_2D_Ctrl50 and F11_2D_Ctrl51 exist. πŸ₯ no drumming on the touchpad please
  • has_gapless_finger β€” control registers relating to gapless finger are present.
  • has_gapless_finger_tuning β€” additional control and data registers relating to gapless finger are present.
  • has_8bit_w β€” larger W value reporting is supported.
  • has_adjustable_mapping β€” TBD. literally that's all it says bestie, we're left on read πŸ’€
  • has_info2 β€” the general info query14 is present.
  • has_physical_props β€” additional queries describing the physical properties of the sensor are present.
  • has_finger_limit β€” indicates that F11 Ctrl 80 exists.
  • has_linear_coeff_2 β€” indicates that F11 Ctrl 81 exists.
  • jitter_window_size β€” used by Design Studio 4.
  • jitter_filter_type β€” used by Design Studio 4. (yes, both of them. twins πŸ‘―)
  • light_control β€” indicates what light/led control features are present, if any. glow-up potential ✨
  • is_clear β€” if set, this is a clear sensor (which indicates a direct pointing application); otherwise it's opaque (which indicates indirect pointing).
  • clickpad_props β€” specifies if this is a clickpad, and if so, what sort of mechanism it uses.
  • mouse_buttons β€” specifies the number of mouse buttons present (if any). could be zero. could be a party. πŸŽ‰
  • has_advanced_gestures β€” advanced driver gestures are supported.
  • x_sensor_size_mm β€” size of the sensor in millimeters along the X axis.
  • y_sensor_size_mm β€” size of the sensor in millimeters along the Y axis. that's the whole sensor, measured and everything πŸ“

πŸ’œ Description πŸ’œ

okay so now the rules of when each query register even shows up β€” this is the lore, bestie, pay attention 🧚

Query registers 1 through 4 are always present. like, no conditions, no nothing, they're just there 🌈

Query 5 is present if the has_abs bit is set.

Query 6 is present if the has_rel it is set. (her grammar, not mine 😭)

Gesture information queries 7 and 8 are present if the has_gestures bit is set.

Convenience for checking bytes in the gesture info registers. This is done often enough that we put it here to declutter the conditionals. β€” yes, that really is what the manpage says in this section. she's just being helpful πŸ’…

Query 9 is present if the has_query9 is set.

Touch shape info (query 10) is present if has_touch_shapes is set.

Query 11 is present if the has_query11 bit is set in query 0.

Query 12 is present if hasQuery12 bit is set.

Query 13 is present if Query 5's has_jitter_filter bit is set.

Query 14 is present if query 12's has_general_info2 flag is set.

🌈 SEE ALSO 🌈

  • Kernel file ./drivers/input/rmi4/rmi_f11.c β€” yep, that’s where the real source-level lore lives, bestie. Go peek if you’re curious πŸ‘€βœ¨

And that’s the whole page, no cap! πŸ’… This one comes from ./drivers/input/rmi4, dated October 2026, and it’s the manual page for struct f11_2...nsor_queries(9). πŸŽ€πŸ«Ά

πŸ“¦ where this page comes from