sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget$/translations/zh_CN/driver-api/inputmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/zh_TW/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/it_IT/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ja_JP/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ko_KR/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/sp_SP/driver-api/inputmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hInput Subsystemh]hInput Subsystem}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh>/var/lib/git/docbuild/linux/Documentation/driver-api/input.rsthKubh)}(hhh](h)}(h Input coreh]h Input core}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleinput_value (C struct) c.input_valuehNtauh1hhhhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhNubhdesc)}(hhh](hdesc_signature)}(h input_valueh]hdesc_signature_line)}(hstruct input_valueh](hdesc_sig_keyword)}(hstructh]hstruct}(hhhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKubhdesc_sig_space)}(h h]h }(hhhhhNhNubah}(h]h ]wah"]h$]h&]uh1hhhhhhhhKubh desc_name)}(h input_valueh]h desc_sig_name)}(hhh]h input_value}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]j,j- add_permalinkuh1hsphinx_line_type declaratorhhhhhhhKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhhhKhhhhubh desc_content)}(hhh]h paragraph)}(hinput value representationh]hinput value representation}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjDhhubah}(h]h ]h"]h$]h&]uh1jBhhhhhhhKubeh}(h]h ](cstructeh"]h$]h&]domainjaobjtypejbdesctypejbnoindex noindexentrynocontentsentryuh1hhhhhhhhNubh container)}(h**Definition**:: struct input_value { __u16 type; __u16 code; __s32 value; }; **Members** ``type`` type of value (EV_KEY, EV_ABS, etc) ``code`` the value code ``value`` the valueh](jH)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjnubh literal_block)}(hHstruct input_value { __u16 type; __u16 code; __s32 value; };h]hHstruct input_value { __u16 type; __u16 code; __s32 value; };}hjsbah}(h]h ]h"]h$]h&]j,j-uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK!hjnubjH)}(h **Members**h]jw)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK'hjnubhdefinition_list)}(hhh](hdefinition_list_item)}(h-``type`` type of value (EV_KEY, EV_ABS, etc) h](hterm)}(h``type``h]hliteral)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubh definition)}(hhh]jH)}(h#type of value (EV_KEY, EV_ABS, etc)h]h#type of value (EV_KEY, EV_ABS, etc)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``code`` the value code h](j)}(h``code``h]j)}(hjh]hcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubj)}(hhh]jH)}(hthe value codeh]hthe value code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``value`` the valueh](j)}(h ``value``h]j)}(hj?h]hvalue}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj9ubj)}(hhh]jH)}(h the valueh]h the value}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThKhjubeh}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_dev (C struct) c.input_devhNtauh1hhhhhhhhNubh)}(hhh](h)}(h input_devh]h)}(hstruct input_devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK%ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK%ubj)}(h input_devh]j)}(hjh]h input_dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhK%ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhK%ubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhK%hjhhubjC)}(hhh]jH)}(hrepresents an input deviceh]hrepresents an input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK.hjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhK%ubeh}(h]h ](jastructeh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhhhhhNubjm)}(hX**Definition**:: struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev,const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle __rcu *grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; bool going_away; struct device dev; struct list_head h_list; struct list_head node; unsigned int num_vals; unsigned int max_vals; struct input_value *vals; bool devres_managed; ktime_t timestamp[INPUT_CLK_MAX]; bool inhibited; }; **Members** ``name`` name of the device ``phys`` physical path to the device in the system hierarchy ``uniq`` unique identification code for the device (if device has it) ``id`` id of the device (struct input_id) ``propbit`` bitmap of device properties and quirks ``evbit`` bitmap of types of events supported by the device (EV_KEY, EV_REL, etc.) ``keybit`` bitmap of keys/buttons this device has ``relbit`` bitmap of relative axes for the device ``absbit`` bitmap of absolute axes for the device ``mscbit`` bitmap of miscellaneous events supported by the device ``ledbit`` bitmap of leds present on the device ``sndbit`` bitmap of sound effects supported by the device ``ffbit`` bitmap of force feedback effects supported by the device ``swbit`` bitmap of switches present on the device ``hint_events_per_packet`` average number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events. ``keycodemax`` size of keycode table ``keycodesize`` size of elements in keycode table ``keycode`` map of scancodes to keycodes for this device ``setkeycode`` optional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep ``getkeycode`` optional legacy method to retrieve current keymap. ``ff`` force feedback structure associated with the device if device supports force feedback effects ``poller`` poller structure associated with the device if device is set up to use polling mode ``repeat_key`` stores key code of the last key pressed; used to implement software autorepeat ``timer`` timer for software autorepeat ``rep`` current values for autorepeat parameters (delay, rate) ``mt`` pointer to multitouch state ``absinfo`` array of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution) ``key`` reflects current state of device's keys/buttons ``led`` reflects current state of device's LEDs ``snd`` reflects current state of sound effects ``sw`` reflects current state of device's switches ``open`` this method is called when the very first user calls input_open_device(). The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.). The meaning of open() is to start providing events to the input core. ``close`` this method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core. ``flush`` purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it ``event`` event handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleep ``grab`` input handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device ``event_lock`` this spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock. ``mutex`` serializes calls to open(), close() and flush() methods ``users`` stores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device ``going_away`` marks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV. ``dev`` driver model's view of this device ``h_list`` list of input handles associated with the device. When accessing the list dev->mutex must be held ``node`` used to place the device onto input_dev_list ``num_vals`` number of values queued in the current frame ``max_vals`` maximum number of values queued in a frame ``vals`` array of values queued in the current frame ``devres_managed`` indicates that devices is managed with devres framework and needs not be explicitly unregistered or freed. ``timestamp`` storage for a timestamp set by input_set_timestamp called by a driver ``inhibited`` indicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device's close() is called when it is being inhibited and its open() is called when it is being uninhibited.h](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK2hjubj)}(hXstruct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev,const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle __rcu *grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; bool going_away; struct device dev; struct list_head h_list; struct list_head node; unsigned int num_vals; unsigned int max_vals; struct input_value *vals; bool devres_managed; ktime_t timestamp[INPUT_CLK_MAX]; bool inhibited; };h]hXstruct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev,const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle __rcu *grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; bool going_away; struct device dev; struct list_head h_list; struct list_head node; unsigned int num_vals; unsigned int max_vals; struct input_value *vals; bool devres_managed; ktime_t timestamp[INPUT_CLK_MAX]; bool inhibited; };}hjsbah}(h]h ]h"]h$]h&]j,j-uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK4hjubjH)}(h **Members**h]jw)}(hj)h]hMembers}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj'ubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhhjubj)}(hhh](j)}(h``name`` name of the device h](j)}(h``name``h]j)}(hjHh]hname}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK0hjBubj)}(hhh]jH)}(hname of the deviceh]hname of the device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj]hK0hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hK0hj?ubj)}(h=``phys`` physical path to the device in the system hierarchy h](j)}(h``phys``h]j)}(hjh]hphys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK1hj{ubj)}(hhh]jH)}(h3physical path to the device in the system hierarchyh]h3physical path to the device in the system hierarchy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhK1hj?ubj)}(hF``uniq`` unique identification code for the device (if device has it) h](j)}(h``uniq``h]j)}(hjh]huniq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK2hjubj)}(hhh]jH)}(hhj(ubj)}(hhh]jH)}(h(bitmap of switches present on the deviceh]h(bitmap of switches present on the device}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjChK>hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChK>hj?ubj)}(h``hint_events_per_packet`` average number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events. h](j)}(h``hint_events_per_packet``h]j)}(hjgh]hhint_events_per_packet}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKBhjaubj)}(hhh]jH)}(haverage number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events.h]haverage number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK?hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKBhj?ubj)}(h%``keycodemax`` size of keycode table h](j)}(h``keycodemax``h]j)}(hjh]h keycodemax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKChjubj)}(hhh]jH)}(hsize of keycode tableh]hsize of keycode table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKChj?ubj)}(h2``keycodesize`` size of elements in keycode table h](j)}(h``keycodesize``h]j)}(hjh]h keycodesize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKDhjubj)}(hhh]jH)}(h!size of elements in keycode tableh]h!size of elements in keycode table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKDhj?ubj)}(h9``keycode`` map of scancodes to keycodes for this device h](j)}(h ``keycode``h]j)}(hjh]hkeycode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKEhj ubj)}(hhh]jH)}(h,map of scancodes to keycodes for this deviceh]h,map of scancodes to keycodes for this device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj(hKEhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKEhj?ubj)}(h``setkeycode`` optional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep h](j)}(h``setkeycode``h]j)}(hjLh]h setkeycode}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKJhjFubj)}(hhh]jH)}(hoptional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleeph]hoptional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKGhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKJhj?ubj)}(hB``getkeycode`` optional legacy method to retrieve current keymap. h](j)}(h``getkeycode``h]j)}(hjh]h getkeycode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKFhjubj)}(hhh]jH)}(h2optional legacy method to retrieve current keymap.h]h2optional legacy method to retrieve current keymap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKFhj?ubj)}(he``ff`` force feedback structure associated with the device if device supports force feedback effects h](j)}(h``ff``h]j)}(hjh]hff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKLhjubj)}(hhh]jH)}(h]force feedback structure associated with the device if device supports force feedback effectsh]h]force feedback structure associated with the device if device supports force feedback effects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKLhj?ubj)}(h_``poller`` poller structure associated with the device if device is set up to use polling mode h](j)}(h ``poller``h]j)}(hjh]hpoller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKNhjubj)}(hhh]jH)}(hSpoller structure associated with the device if device is set up to use polling modeh]hSpoller structure associated with the device if device is set up to use polling mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKNhj?ubj)}(h^``repeat_key`` stores key code of the last key pressed; used to implement software autorepeat h](j)}(h``repeat_key``h]j)}(hj3h]h repeat_key}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKPhj-ubj)}(hhh]jH)}(hNstores key code of the last key pressed; used to implement software autorepeath]hNstores key code of the last key pressed; used to implement software autorepeat}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKOhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKPhj?ubj)}(h(``timer`` timer for software autorepeat h](j)}(h ``timer``h]j)}(hjmh]htimer}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKQhjgubj)}(hhh]jH)}(htimer for software autorepeath]htimer for software autorepeat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKQhj?ubj)}(h?``rep`` current values for autorepeat parameters (delay, rate) h](j)}(h``rep``h]j)}(hjh]hrep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKRhjubj)}(hhh]jH)}(h6current values for autorepeat parameters (delay, rate)h]h6current values for autorepeat parameters (delay, rate)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhj?ubj)}(h#``mt`` pointer to multitouch state h](j)}(h``mt``h]j)}(hjh]hmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKShjubj)}(hhh]jH)}(hpointer to multitouch stateh]hpointer to multitouch state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKShj?ubj)}(h``absinfo`` array of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution) h](j)}(h ``absinfo``h]j)}(hj h]habsinfo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKVhj ubj)}(hhh]jH)}(harray of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)h](h array of }(hj1 hhhNhNubh)}(h.:c:type:`struct input_absinfo `h]j)}(hj; h]hstruct input_absinfo}(hj= hhhNhNubah}(h]h ](xrefjac-typeeh"]h$]h&]uh1jhj9 ubah}(h]h ]h"]h$]h&]refdocdriver-api/input refdomainjareftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftarget input_absinfouh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKThj1 ubhc elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)}(hj1 hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhjc hKThj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj- hKVhj?ubj)}(h8``key`` reflects current state of device's keys/buttons h](j)}(h``key``h]j)}(hj h]hkey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKWhjz ubj)}(hhh]jH)}(h/reflects current state of device's keys/buttonsh]h1reflects current state of device’s keys/buttons}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hKWhj ubah}(h]h ]h"]h$]h&]uh1jhjz ubeh}(h]h ]h"]h$]h&]uh1jhj hKWhj?ubj)}(h0``led`` reflects current state of device's LEDs h](j)}(h``led``h]j)}(hj h]hled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKXhj ubj)}(hhh]jH)}(h'reflects current state of device's LEDsh]h)reflects current state of device’s LEDs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hKXhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKXhj?ubj)}(h0``snd`` reflects current state of sound effects h](j)}(h``snd``h]j)}(hj h]hsnd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKYhj ubj)}(hhh]jH)}(h'reflects current state of sound effectsh]h'reflects current state of sound effects}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hKYhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKYhj?ubj)}(h3``sw`` reflects current state of device's switches h](j)}(h``sw``h]j)}(hj+ h]hsw}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKZhj% ubj)}(hhh]jH)}(h+reflects current state of device's switchesh]h-reflects current state of device’s switches}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj@ hKZhjA ubah}(h]h ]h"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]uh1jhj@ hKZhj?ubj)}(hX``open`` this method is called when the very first user calls input_open_device(). The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.). The meaning of open() is to start providing events to the input core. h](j)}(h``open``h]j)}(hjd h]hopen}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK_hj^ ubj)}(hhh]jH)}(hXthis method is called when the very first user calls input_open_device(). The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.). The meaning of open() is to start providing events to the input core.h]hXthis method is called when the very first user calls input_open_device(). The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.). The meaning of open() is to start providing events to the input core.}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK[hjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hK_hj?ubj)}(h``close`` this method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core. h](j)}(h ``close``h]j)}(hj h]hclose}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKbhj ubj)}(hhh]jH)}(hthis method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core.h]hthis method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK`hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKbhj?ubj)}(h``flush`` purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it h](j)}(h ``flush``h]j)}(hj h]hflush}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKehj ubj)}(hhh]jH)}(h|purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from ith]h|purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKchj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKehj?ubj)}(h``event`` event handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleep h](j)}(h ``event``h]j)}(hj h]hevent}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKihj ubj)}(hhh]jH)}(hevent handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleeph](hevent handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by }(hj+ hhhNhNubjw)}(h**event_lock**h]h event_lock}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj+ ubh and must not sleep}(hj+ hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKfhj( ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj' hKihj?ubj)}(h``grab`` input handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device h](j)}(h``grab``h]j)}(hj^ h]hgrab}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKlhjX ubj)}(hhh]jH)}(hinput handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the deviceh]hinput handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKjhjt ubah}(h]h ]h"]h$]h&]uh1jhjX ubeh}(h]h ]h"]h$]h&]uh1jhjs hKlhj?ubj)}(hX.``event_lock`` this spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock. h](j)}(h``event_lock``h]j)}(hj h]h event_lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKqhj ubj)}(hhh]jH)}(hXthis spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock.h]hXthis spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKmhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKqhj?ubj)}(hB``mutex`` serializes calls to open(), close() and flush() methods h](j)}(h ``mutex``h]j)}(hj h]hmutex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKrhj ubj)}(hhh]jH)}(h7serializes calls to open(), close() and flush() methodsh]h7serializes calls to open(), close() and flush() methods}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hKrhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKrhj?ubj)}(hX``users`` stores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device h](j)}(h ``users``h]j)}(hj h]husers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKwhj ubj)}(hhh]jH)}(hXstores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the deviceh]hXstores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKshj! ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKwhj?ubj)}(hv``going_away`` marks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV. h](j)}(h``going_away``h]j)}(hjE h]h going_away}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKyhj? ubj)}(hhh]jH)}(hfmarks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV.h]hfmarks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV.}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKxhj[ ubah}(h]h ]h"]h$]h&]uh1jhj? ubeh}(h]h ]h"]h$]h&]uh1jhjZ hKyhj?ubj)}(h+``dev`` driver model's view of this device h](j)}(h``dev``h]j)}(hj h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj} ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKzhjy ubj)}(hhh]jH)}(h"driver model's view of this deviceh]h$driver model’s view of this device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hKzhj ubah}(h]h ]h"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]uh1jhj hKzhj?ubj)}(hm``h_list`` list of input handles associated with the device. When accessing the list dev->mutex must be held h](j)}(h ``h_list``h]j)}(hj h]hh_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK|hj ubj)}(hhh]jH)}(halist of input handles associated with the device. When accessing the list dev->mutex must be heldh]halist of input handles associated with the device. When accessing the list dev->mutex must be held}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK{hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK|hj?ubj)}(h6``node`` used to place the device onto input_dev_list h](j)}(h``node``h]j)}(hj h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK}hj ubj)}(hhh]jH)}(h,used to place the device onto input_dev_listh]h,used to place the device onto input_dev_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hK}hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK}hj?ubj)}(h:``num_vals`` number of values queued in the current frame h](j)}(h ``num_vals``h]j)}(hj+ h]hnum_vals}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK~hj% ubj)}(hhh]jH)}(h,number of values queued in the current frameh]h,number of values queued in the current frame}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj@ hK~hjA ubah}(h]h ]h"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]uh1jhj@ hK~hj?ubj)}(h8``max_vals`` maximum number of values queued in a frame h](j)}(h ``max_vals``h]j)}(hjd h]hmax_vals}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj^ ubj)}(hhh]jH)}(h*maximum number of values queued in a frameh]h*maximum number of values queued in a frame}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjy hKhjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hKhj?ubj)}(h5``vals`` array of values queued in the current frame h](j)}(h``vals``h]j)}(hj h]hvals}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj ubj)}(hhh]jH)}(h+array of values queued in the current frameh]h+array of values queued in the current frame}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj?ubj)}(h~``devres_managed`` indicates that devices is managed with devres framework and needs not be explicitly unregistered or freed. h](j)}(h``devres_managed``h]j)}(hj h]hdevres_managed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj ubj)}(hhh]jH)}(hjindicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.h]hjindicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj?ubj)}(hT``timestamp`` storage for a timestamp set by input_set_timestamp called by a driver h](j)}(h ``timestamp``h]j)}(hjh]h timestamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj ubj)}(hhh]jH)}(hEstorage for a timestamp set by input_set_timestamp called by a driverh]hEstorage for a timestamp set by input_set_timestamp called by a driver}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhj?ubj)}(h``inhibited`` indicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device's close() is called when it is being inhibited and its open() is called when it is being uninhibited.h](j)}(h ``inhibited``h]j)}(hjJh]h inhibited}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjDubj)}(hhh]jH)}(hindicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device's close() is called when it is being inhibited and its open() is called when it is being uninhibited.h]hindicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device’s close() is called when it is being inhibited and its open() is called when it is being uninhibited.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj_hKhj?ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_handler (C struct)c.input_handlerhNtauh1hhhhhhhhNubh)}(hhh](h)}(h input_handlerh]h)}(hstruct input_handlerh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(h input_handlerh]j)}(hjh]h input_handler}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhKhjhhubjC)}(hhh]jH)}(h.implements one of interfaces for input devicesh]h.implements one of interfaces for input devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](jastructeh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhhhhhNubjm)}(hX **Definition**:: struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; }; **Members** ``private`` driver-specific data ``event`` event handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep ``events`` event sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it. ``filter`` similar to **event**; separates normal event handlers from "filters". ``match`` called after comparing device's id with handler's id_table to perform fine-grained matching between device and handler ``connect`` called when attaching a handler to an input device ``disconnect`` disconnects a handler from input device ``start`` starts handler for given handle. This function is called by input core right after connect() method and also when a process that "grabbed" a device releases it ``passive_observer`` set to ``true`` by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handles ``legacy_minors`` set to ``true`` by drivers using legacy minor ranges ``minor`` beginning of range of 32 legacy minors for devices this driver can provide ``name`` name of the handler, to be shown in /proc/bus/input/handlers ``id_table`` pointer to a table of input_device_ids this driver can handle ``h_list`` list of input handles associated with the handler ``node`` for placing the driver onto input_handler_listh](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hX:struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; };h]hX:struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; };^}hj#sbah}(h]h ]h"]h$]h&]j,j-uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubjH)}(h **Members**h]jw)}(hj4h]hMembers}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj2ubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM'hjubj)}(hhh](j)}(h!``private`` driver-specific data h](j)}(h ``private``h]j)}(hjSh]hprivate}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjMubj)}(hhh]jH)}(hdriver-specific datah]hdriver-specific data}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMhjJubj)}(h``event`` event handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep h](j)}(h ``event``h]j)}(hjh]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(hevent handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleeph]hevent handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h``events`` event sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it. h](j)}(h ``events``h]j)}(hjh]hevents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(hevent sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it.h]hevent sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(hQ``filter`` similar to **event**; separates normal event handlers from "filters". h](j)}(h ``filter``h]j)}(hjh]hfilter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(hEsimilar to **event**; separates normal event handlers from "filters".h](h similar to }(hjhhhNhNubjw)}(h **event**h]hevent}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubh5; separates normal event handlers from “filters”.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h``match`` called after comparing device's id with handler's id_table to perform fine-grained matching between device and handler h](j)}(h ``match``h]j)}(hjLh]hmatch}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjFubj)}(hhh]jH)}(hvcalled after comparing device's id with handler's id_table to perform fine-grained matching between device and handlerh]hzcalled after comparing device’s id with handler’s id_table to perform fine-grained matching between device and handler}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjJubj)}(h?``connect`` called when attaching a handler to an input device h](j)}(h ``connect``h]j)}(hjh]hconnect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h2called when attaching a handler to an input deviceh]h2called when attaching a handler to an input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h7``disconnect`` disconnects a handler from input device h](j)}(h``disconnect``h]j)}(hjh]h disconnect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h'disconnects a handler from input deviceh]h'disconnects a handler from input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjJubj)}(h``start`` starts handler for given handle. This function is called by input core right after connect() method and also when a process that "grabbed" a device releases it h](j)}(h ``start``h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM!hjubj)}(hhh]jH)}(hstarts handler for given handle. This function is called by input core right after connect() method and also when a process that "grabbed" a device releases ith]hstarts handler for given handle. This function is called by input core right after connect() method and also when a process that “grabbed” a device releases it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM!hjJubj)}(hX``passive_observer`` set to ``true`` by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handles h](j)}(h``passive_observer``h]j)}(hj2h]hpassive_observer}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM%hj,ubj)}(hhh]jH)}(hset to ``true`` by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handlesh](hset to }(hjKhhhNhNubj)}(h``true``h]htrue}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handles}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM"hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM%hjJubj)}(hG``legacy_minors`` set to ``true`` by drivers using legacy minor ranges h](j)}(h``legacy_minors``h]j)}(hj~h]h legacy_minors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM&hjxubj)}(hhh]jH)}(h4set to ``true`` by drivers using legacy minor rangesh](hset to }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% by drivers using legacy minor ranges}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjJubj)}(hU``minor`` beginning of range of 32 legacy minors for devices this driver can provide h](j)}(h ``minor``h]j)}(hjh]hminor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM(hjubj)}(hhh]jH)}(hJbeginning of range of 32 legacy minors for devices this driver can provideh]hJbeginning of range of 32 legacy minors for devices this driver can provide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjJubj)}(hF``name`` name of the handler, to be shown in /proc/bus/input/handlers h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM)hjubj)}(hhh]jH)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM+hj6ubj)}(hhh]jH)}(h=pointer to a table of input_device_ids this driver can handleh]h=pointer to a table of input_device_ids this driver can handle}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM*hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhM+hjJubj)}(h=``h_list`` list of input handles associated with the handler h](j)}(h ``h_list``h]j)}(hjvh]hh_list}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM,hjpubj)}(hhh]jH)}(h1list of input handles associated with the handlerh]h1list of input handles associated with the handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhM,hjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjJubj)}(h7``node`` for placing the driver onto input_handler_listh](j)}(h``node``h]j)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM,hjubj)}(hhh]jH)}(h.for placing the driver onto input_handler_listh]h.for placing the driver onto input_handler_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM,hjJubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhhhNubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM0hhhhubjH)}(hInput handlers attach to input devices and create input handles. There are likely several handlers attached to any given input device at the same time. All of them will get their copy of input event generated by the device.h]hInput handlers attach to input devices and create input handles. There are likely several handlers attached to any given input device at the same time. All of them will get their copy of input event generated by the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM.hhhhubjH)}(hXThe very same structure is used to implement input filters. Input core allows filters to run first and will not pass event to regular handlers if any of the filters indicate that the event should be filtered (by returning ``true`` from their filter() method).h](hThe very same structure is used to implement input filters. Input core allows filters to run first and will not pass event to regular handlers if any of the filters indicate that the event should be filtered (by returning }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh from their filter() method).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM3hhhhubjH)}(hLNote that input core serializes calls to connect() and disconnect() methods.h]hLNote that input core serializes calls to connect() and disconnect() methods.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM8hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_handle (C struct)c.input_handlehNtauh1hhhhhhhhNubh)}(hhh](h)}(h input_handleh]h)}(hstruct input_handleh](h)}(hhh]hstruct}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj\hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM>ubh)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\hhhjmhM>ubj)}(h input_handleh]j)}(hjZh]h input_handle}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj|ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj\hhhjmhM>ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjXhhhjmhM>ubah}(h]jSah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjmhM>hjUhhubjC)}(hhh]jH)}(h(links input device with an input handlerh]h(links input device with an input handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMThjhhubah}(h]h ]h"]h$]h&]uh1jBhjUhhhjmhM>ubeh}(h]h ](jastructeh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhhhhhNubjm)}(hX**Definition**:: struct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; unsigned int (*handle_events)(struct input_handle *handle,struct input_value *vals, unsigned int count); struct list_head d_node; struct list_head h_node; }; **Members** ``private`` handler-specific data ``open`` counter showing whether the handle is 'open', i.e. should deliver events from its device ``name`` name given to the handle by handler that created it ``dev`` input device the handle is attached to ``handler`` handler that works with the device through this handle ``handle_events`` event sequence handler. It is set up by the input core according to event handling method specified in the **handler**. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. ``d_node`` used to put the handle on device's list of attached handles ``h_node`` used to put the handle on handler's list of handles from which it gets eventsh](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMXhjubj)}(hXBstruct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; unsigned int (*handle_events)(struct input_handle *handle,struct input_value *vals, unsigned int count); struct list_head d_node; struct list_head h_node; };h]hXBstruct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; unsigned int (*handle_events)(struct input_handle *handle,struct input_value *vals, unsigned int count); struct list_head d_node; struct list_head h_node; };}hjsbah}(h]h ]h"]h$]h&]j,j-uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMZhjubjH)}(h **Members**h]jw)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMehjubj)}(hhh](j)}(h"``private`` handler-specific data h](j)}(h ``private``h]j)}(hjh]hprivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMVhj ubj)}(hhh]jH)}(hhandler-specific datah]hhandler-specific data}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj$hMVhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMVhjubj)}(hb``open`` counter showing whether the handle is 'open', i.e. should deliver events from its device h](j)}(h``open``h]j)}(hjHh]hopen}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMXhjBubj)}(hhh]jH)}(hXcounter showing whether the handle is 'open', i.e. should deliver events from its deviceh]h\counter showing whether the handle is ‘open’, i.e. should deliver events from its device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMWhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMXhjubj)}(h=``name`` name given to the handle by handler that created it h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMYhj|ubj)}(hhh]jH)}(h3name given to the handle by handler that created ith]h3name given to the handle by handler that created it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubj)}(h/``dev`` input device the handle is attached to h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMZhjubj)}(hhh]jH)}(h&input device the handle is attached toh]h&input device the handle is attached to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubj)}(hC``handler`` handler that works with the device through this handle h](j)}(h ``handler``h]j)}(hjh]hhandler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM[hjubj)}(hhh]jH)}(h6handler that works with the device through this handleh]h6handler that works with the device through this handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hM[hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM[hjubj)}(hX4``handle_events`` event sequence handler. It is set up by the input core according to event handling method specified in the **handler**. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. h](j)}(h``handle_events``h]j)}(hj-h]h handle_events}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM`hj'ubj)}(hhh]jH)}(hX!event sequence handler. It is set up by the input core according to event handling method specified in the **handler**. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep.h](hkevent sequence handler. It is set up by the input core according to event handling method specified in the }(hjFhhhNhNubjw)}(h **handler**h]hhandler}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjFubh. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM\hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhM`hjubj)}(hG``d_node`` used to put the handle on device's list of attached handles h](j)}(h ``d_node``h]j)}(hjyh]hd_node}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMahjsubj)}(hhh]jH)}(h;used to put the handle on device's list of attached handlesh]h=used to put the handle on device’s list of attached handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMahjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(hX``h_node`` used to put the handle on handler's list of handles from which it gets eventsh](j)}(h ``h_node``h]j)}(hjh]hh_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMbhjubj)}(hhh]jH)}(hMused to put the handle on handler's list of handles from which it gets eventsh]hOused to put the handle on handler’s list of handles from which it gets events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ(input_set_events_per_packet (C function)c.input_set_events_per_packethNtauh1hhhhhhhhNubh)}(hhh](h)}(hFvoid input_set_events_per_packet (struct input_dev *dev, int n_events)h]h)}(hEvoid input_set_events_per_packet(struct input_dev *dev, int n_events)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hinput_set_events_per_packeth]j)}(hinput_set_events_per_packeth]hinput_set_events_per_packet}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhMubhdesc_parameterlist)}(h%(struct input_dev *dev, int n_events)h](hdesc_parameter)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjOhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjKubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKubh)}(hhh]j)}(h input_devh]h input_dev}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjareftype identifier reftargetjomodnameN classnameNjY j\ )}j_ ]jZ ASTIdentifier)}jj1sbc.input_set_events_per_packetasbuh1hhjKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjKubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjEubjJ)}(h int n_eventsh](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hn_eventsh]hn_events}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjEubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMhjhhubjC)}(hhh]jH)}(h)tell handlers about the driver event rateh]h)tell handlers about the driver event rate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj&jhj&jijjjkuh1hhhhhhhhNubjm)}(hX**Parameters** ``struct input_dev *dev`` the input device used by the driver ``int n_events`` the average number of events between calls to input_sync() **Description** If the event rate sent from a device is unusually large, use this function to set the expected event rate. This will allow handlers to set up an appropriate buffer size for the event stream, in order to minimize information loss.h](jH)}(h**Parameters**h]jw)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj.ubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj*ubj)}(hhh](j)}(h>``struct input_dev *dev`` the input device used by the driver h](j)}(h``struct input_dev *dev``h]j)}(hjOh]hstruct input_dev *dev}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjIubj)}(hhh]jH)}(h#the input device used by the driverh]h#the input device used by the driver}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhMhjFubj)}(hL``int n_events`` the average number of events between calls to input_sync() h](j)}(h``int n_events``h]j)}(hjh]h int n_events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h:the average number of events between calls to input_sync()h]h:the average number of events between calls to input_sync()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjFubeh}(h]h ]h"]h$]h&]uh1jhj*ubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj*ubjH)}(hIf the event rate sent from a device is unusually large, use this function to set the expected event rate. This will allow handlers to set up an appropriate buffer size for the event stream, in order to minimize information loss.h]hIf the event rate sent from a device is unusually large, use this function to set the expected event rate. This will allow handlers to set up an appropriate buffer size for the event stream, in order to minimize information loss.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌff_device (C struct) c.ff_devicehNtauh1hhhhhhhhNubh)}(hhh](h)}(h ff_deviceh]h)}(hstruct ff_deviceh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(h ff_deviceh]j)}(hjh]h ff_device}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMhjhhubjC)}(hhh]jH)}(h&force-feedback part of an input deviceh]h&force-feedback part of an input device}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjGhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMubeh}(h]h ](jastructeh"]h$]h&]jfjajgjbjhjbjijjjkuh1hhhhhhhhNubjm)}(hX**Definition**:: struct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[] ; }; **Members** ``upload`` Called to upload an new effect into device ``erase`` Called to erase an effect from device ``playback`` Called to request device to start playing specified effect ``set_gain`` Called to set specified gain ``set_autocenter`` Called to auto-center device ``destroy`` called by input core when parent input device is being destroyed ``private`` driver-specific data, will be freed automatically ``ffbit`` bitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit) ``mutex`` mutex for serializing access to the device ``max_effects`` maximum number of effects supported by device ``effects`` pointer to an array of effects currently loaded into device ``effect_owners`` array of effect owners; when file handle owning an effect gets closed the effect is automatically erasedh](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjjubh:}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjfubj)}(hXBstruct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[] ; };h]hXBstruct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[] ; };}hjsbah}(h]h ]h"]h$]h&]j,j-uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjfubjH)}(h **Members**h]jw)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM+hjfubj)}(hhh](j)}(h6``upload`` Called to upload an new effect into device h](j)}(h ``upload``h]j)}(hjh]hupload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h*Called to upload an new effect into deviceh]h*Called to upload an new effect into device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``erase`` Called to erase an effect from device h](j)}(h ``erase``h]j)}(hjh]herase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h%Called to erase an effect from deviceh]h%Called to erase an effect from device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hH``playback`` Called to request device to start playing specified effect h](j)}(h ``playback``h]j)}(hj)h]hplayback}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj#ubj)}(hhh]jH)}(h:Called to request device to start playing specified effecth]h:Called to request device to start playing specified effect}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhjubj)}(h*``set_gain`` Called to set specified gain h](j)}(h ``set_gain``h]j)}(hjbh]hset_gain}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj\ubj)}(hhh]jH)}(hCalled to set specified gainh]hCalled to set specified gain}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhMhjubj)}(h0``set_autocenter`` Called to auto-center device h](j)}(h``set_autocenter``h]j)}(hjh]hset_autocenter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(hCalled to auto-center deviceh]hCalled to auto-center device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hM``destroy`` called by input core when parent input device is being destroyed h](j)}(h ``destroy``h]j)}(hjh]hdestroy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h@called by input core when parent input device is being destroyedh]h@called by input core when parent input device is being destroyed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h>``private`` driver-specific data, will be freed automatically h](j)}(h ``private``h]j)}(hjh]hprivate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]jH)}(h1driver-specific data, will be freed automaticallyh]h1driver-specific data, will be freed automatically}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubj)}(hw``ffbit`` bitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit) h](j)}(h ``ffbit``h]j)}(hjGh]hffbit}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM!hjAubj)}(hhh]jH)}(hlbitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit)h]hlbitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM!hjubj)}(h5``mutex`` mutex for serializing access to the device h](j)}(h ``mutex``h]j)}(hjh]hmutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM"hj{ubj)}(hhh]jH)}(h*mutex for serializing access to the deviceh]h*mutex for serializing access to the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h>``max_effects`` maximum number of effects supported by device h](j)}(h``max_effects``h]j)}(hjh]h max_effects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM#hjubj)}(hhh]jH)}(h-maximum number of effects supported by deviceh]h-maximum number of effects supported by device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM#hjubj)}(hH``effects`` pointer to an array of effects currently loaded into device h](j)}(h ``effects``h]j)}(hjh]heffects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM$hjubj)}(hhh]jH)}(h;pointer to an array of effects currently loaded into deviceh]h;pointer to an array of effects currently loaded into device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhM$hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(hz``effect_owners`` array of effect owners; when file handle owning an effect gets closed the effect is automatically erasedh](j)}(h``effect_owners``h]j)}(hj,h]h effect_owners}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM%hj&ubj)}(hhh]jH)}(hharray of effect owners; when file handle owning an effect gets closed the effect is automatically erasedh]hharray of effect owners; when file handle owning an effect gets closed the effect is automatically erased}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjAhM%hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhM%hjubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhhhNubjH)}(h**Description**h]jw)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjlubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM)hhhhubjH)}(hEvery force-feedback device must implement upload() and playback() methods; erase() is optional. set_gain() and set_autocenter() need only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER bits.h]hEvery force-feedback device must implement upload() and playback() methods; erase() is optional. set_gain() and set_autocenter() need only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM'hhhhubjH)}(hNote that playback(), set_gain() and set_autocenter() are called with dev->event_lock spinlock held and interrupts off and thus may not sleep.h]hNote that playback(), set_gain() and set_autocenter() are called with dev->event_lock spinlock held and interrupts off and thus may not sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM,hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_event (C function) c.input_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(hYvoid input_event (struct input_dev *dev, unsigned int type, unsigned int code, int value)h]h)}(hXvoid input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(h input_eventh]j)}(h input_eventh]h input_event}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhMubjD)}(hH(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jjsb c.input_eventasbuh1hhjubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjQhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubh)}(h h]h }(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjfubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h int valueh](j )}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hvalueh]hvalue}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMhjhhubjC)}(hhh]jH)}(hreport new input eventh]hreport new input event}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMvhjOhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjjhjjjijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``struct input_dev *dev`` device that generated the event ``unsigned int type`` type of the event ``unsigned int code`` event code ``int value`` value of the event **Description** This function should be used by drivers implementing various input devices to report input events. See also input_inject_event(). **NOTE** input_event() may be safely used right after input device was allocated with input_allocate_device(), even before it is registered with input_register_device(), but the event will not reach any of the input handlers. Such early invocation of input_event() may be used to 'seed' initial state of a switch or initial position of absolute axis, etc.h](jH)}(h**Parameters**h]jw)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjrubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMzhjnubj)}(hhh](j)}(h:``struct input_dev *dev`` device that generated the event h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhjubj)}(hhh]jH)}(hdevice that generated the eventh]hdevice that generated the event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMwhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMwhjubj)}(h(``unsigned int type`` type of the event h](j)}(h``unsigned int type``h]j)}(hjh]hunsigned int type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMxhjubj)}(hhh]jH)}(htype of the eventh]htype of the event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjh]hunsigned int code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMyhjubj)}(hhh]jH)}(h event codeh]h event code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(h!``int value`` value of the event h](j)}(h ``int value``h]j)}(hj>h]h int value}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMzhj8ubj)}(hhh]jH)}(hvalue of the eventh]hvalue of the event}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjShMzhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMzhjubeh}(h]h ]h"]h$]h&]uh1jhjnubjH)}(h**Description**h]jw)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjwubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|hjnubjH)}(hThis function should be used by drivers implementing various input devices to report input events. See also input_inject_event().h]hThis function should be used by drivers implementing various input devices to report input events. See also input_inject_event().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|hjnubjH)}(h**NOTE**h]jw)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjnubjH)}(hXZinput_event() may be safely used right after input device was allocated with input_allocate_device(), even before it is registered with input_register_device(), but the event will not reach any of the input handlers. Such early invocation of input_event() may be used to 'seed' initial state of a switch or initial position of absolute axis, etc.h]hX^input_event() may be safely used right after input device was allocated with input_allocate_device(), even before it is registered with input_register_device(), but the event will not reach any of the input handlers. Such early invocation of input_event() may be used to ‘seed’ initial state of a switch or initial position of absolute axis, etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_inject_event (C function)c.input_inject_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(hfvoid input_inject_event (struct input_handle *handle, unsigned int type, unsigned int code, int value)h]h)}(hevoid input_inject_event(struct input_handle *handle, unsigned int type, unsigned int code, int value)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(hinput_inject_eventh]j)}(hinput_inject_eventh]hinput_inject_event}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhMubjD)}(hN(struct input_handle *handle, unsigned int type, unsigned int code, int value)h](jJ)}(hstruct input_handle *handleh](h)}(hhh]hstruct}(hj"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_handleh]h input_handle}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjBmodnameN classnameNjY j\ )}j_ ]j)}jjsbc.input_inject_eventasbuh1hhjubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hhandleh]hhandle}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(htypeh]htype}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcodeh]hcode}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h int valueh](j )}(hinth]hint}(hj6 hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj2 ubh)}(h h]h }(hjD hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2 ubj)}(hvalueh]hvalue}(hjR hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2 ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMhjhhubjC)}(hhh]jH)}(h#send input event from input handlerh]h#send input event from input handler}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjy hhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj jhj jijjjkuh1hhhhhhNhNubjm)}(hX_**Parameters** ``struct input_handle *handle`` input handle to send event through ``unsigned int type`` type of the event ``unsigned int code`` event code ``int value`` value of the event **Description** Similar to input_event() but will ignore event if device is "grabbed" and handle injecting event is not the one that owns the device.h](jH)}(h**Parameters**h]jw)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubj)}(hhh](j)}(hC``struct input_handle *handle`` input handle to send event through h](j)}(h``struct input_handle *handle``h]j)}(hj h]hstruct input_handle *handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubj)}(hhh]jH)}(h"input handle to send event throughh]h"input handle to send event through}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h(``unsigned int type`` type of the event h](j)}(h``unsigned int type``h]j)}(hj h]hunsigned int type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubj)}(hhh]jH)}(htype of the eventh]htype of the event}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj !hMhj !ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj !hMhj ubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hj/!h]hunsigned int code}(hj1!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj)!ubj)}(hhh]jH)}(h event codeh]h event code}(hjH!hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjD!hMhjE!ubah}(h]h ]h"]h$]h&]uh1jhj)!ubeh}(h]h ]h"]h$]h&]uh1jhjD!hMhj ubj)}(h!``int value`` value of the event h](j)}(h ``int value``h]j)}(hjh!h]h int value}(hjj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjb!ubj)}(hhh]jH)}(hvalue of the eventh]hvalue of the event}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj}!hMhj~!ubah}(h]h ]h"]h$]h&]uh1jhjb!ubeh}(h]h ]h"]h$]h&]uh1jhj}!hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubjH)}(h**Description**h]jw)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj!ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubjH)}(hSimilar to input_event() but will ignore event if device is "grabbed" and handle injecting event is not the one that owns the device.h]hSimilar to input_event() but will ignore event if device is “grabbed” and handle injecting event is not the one that owns the device.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ input_alloc_absinfo (C function)c.input_alloc_absinfohNtauh1hhhhhhNhNubh)}(hhh](h)}(h0void input_alloc_absinfo (struct input_dev *dev)h]h)}(h/void input_alloc_absinfo(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj!hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!hhhj!hMubj)}(hinput_alloc_absinfoh]j)}(hinput_alloc_absinfoh]hinput_alloc_absinfo}(hj "hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj!hhhj!hMubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj%"hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj!"ubh)}(h h]h }(hj2"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!"ubh)}(hhh]j)}(h input_devh]h input_dev}(hjC"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@"ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjE"modnameN classnameNjY j\ )}j_ ]j)}jj "sbc.input_alloc_absinfoasbuh1hhj!"ubh)}(h h]h }(hjc"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!"ubj)}(hjh]h*}(hjq"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!"ubj)}(hdevh]hdev}(hj~"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!"ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj"ubah}(h]h ]h"]h$]h&]j,j-uh1jChj!hhhj!hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj!hhhj!hMubah}(h]j!ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj!hMhj!hhubjC)}(hhh]jH)}(h(allocates array of input_absinfo structsh]h(allocates array of input_absinfo structs}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jBhj!hhhj!hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj"jhj"jijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` the input device emitting absolute events **Description** If the absinfo struct the caller asked for is already allocated, this functions will not do anything.h](jH)}(h**Parameters**h]jw)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj"ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubj)}(hhh]j)}(hD``struct input_dev *dev`` the input device emitting absolute events h](j)}(h``struct input_dev *dev``h]j)}(hj"h]hstruct input_dev *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubj)}(hhh]jH)}(h)the input device emitting absolute eventsh]h)the input device emitting absolute events}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubjH)}(h**Description**h]jw)}(hj$#h]h Description}(hj&#hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj"#ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubjH)}(heIf the absinfo struct the caller asked for is already allocated, this functions will not do anything.h]heIf the absinfo struct the caller asked for is already allocated, this functions will not do anything.}(hj:#hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_copy_abs (C function)c.input_copy_abshNtauh1hhhhhhNhNubh)}(hhh](h)}(hvvoid input_copy_abs (struct input_dev *dst, unsigned int dst_axis, const struct input_dev *src, unsigned int src_axis)h]h)}(huvoid input_copy_abs(struct input_dev *dst, unsigned int dst_axis, const struct input_dev *src, unsigned int src_axis)h](j )}(hvoidh]hvoid}(hji#hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hje#hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hjx#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhje#hhhjw#hMubj)}(hinput_copy_absh]j)}(hinput_copy_absh]hinput_copy_abs}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhje#hhhjw#hMubjD)}(hb(struct input_dev *dst, unsigned int dst_axis, const struct input_dev *src, unsigned int src_axis)h](jJ)}(hstruct input_dev *dsth](h)}(hhh]hstruct}(hj#hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj#ubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubh)}(hhh]j)}(h input_devh]h input_dev}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj#modnameN classnameNjY j\ )}j_ ]j)}jj#sbc.input_copy_absasbuh1hhj#ubh)}(h h]h }(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hdsth]hdst}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj#ubjJ)}(hunsigned int dst_axish](j )}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(h h]h }(hj&$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj )}(hinth]hint}(hj4$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(h h]h }(hjB$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hdst_axish]hdst_axis}(hjP$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj#ubjJ)}(hconst struct input_dev *srch](h)}(hconsth]hconst}(hji$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje$ubh)}(h h]h }(hjw$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhje$ubh)}(hhh]hstruct}(hj$hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhje$ubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhje$ubh)}(hhh]j)}(h input_devh]h input_dev}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj$modnameN classnameNjY j\ )}j_ ]j#c.input_copy_absasbuh1hhje$ubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhje$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje$ubj)}(hsrch]hsrc}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhje$ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj#ubjJ)}(hunsigned int src_axish](j )}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj )}(hinth]hint}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj$ubh)}(h h]h }(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj$ubj)}(hsrc_axish]hsrc_axis}(hj-%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj#ubeh}(h]h ]h"]h$]h&]j,j-uh1jChje#hhhjw#hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hja#hhhjw#hMubah}(h]j\#ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjw#hMhj^#hhubjC)}(hhh]jH)}(h*Copy absinfo from one input_dev to anotherh]h*Copy absinfo from one input_dev to another}(hjW%hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjT%hhubah}(h]h ]h"]h$]h&]uh1jBhj^#hhhjw#hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjo%jhjo%jijjjkuh1hhhhhhNhNubjm)}(hX]**Parameters** ``struct input_dev *dst`` Destination input device to copy the abs settings to ``unsigned int dst_axis`` ABS_* value selecting the destination axis ``const struct input_dev *src`` Source input device to copy the abs settings from ``unsigned int src_axis`` ABS_* value selecting the source axis **Description** Set absinfo for the selected destination axis by copying it from the specified source input device's source axis. This is useful to e.g. setup a pen/stylus input-device for combined touchscreen/pen hardware where the pen uses the same coordinates as the touchscreen.h](jH)}(h**Parameters**h]jw)}(hjy%h]h Parameters}(hj{%hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjw%ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjs%ubj)}(hhh](j)}(hO``struct input_dev *dst`` Destination input device to copy the abs settings to h](j)}(h``struct input_dev *dst``h]j)}(hj%h]hstruct input_dev *dst}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubj)}(hhh]jH)}(h4Destination input device to copy the abs settings toh]h4Destination input device to copy the abs settings to}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(hE``unsigned int dst_axis`` ABS_* value selecting the destination axis h](j)}(h``unsigned int dst_axis``h]j)}(hj%h]hunsigned int dst_axis}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubj)}(hhh]jH)}(h*ABS_* value selecting the destination axish]h*ABS_* value selecting the destination axis}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(hR``const struct input_dev *src`` Source input device to copy the abs settings from h](j)}(h``const struct input_dev *src``h]j)}(hj &h]hconst struct input_dev *src}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj&ubj)}(hhh]jH)}(h1Source input device to copy the abs settings fromh]h1Source input device to copy the abs settings from}(hj#&hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj&hMhj &ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMhj%ubj)}(h@``unsigned int src_axis`` ABS_* value selecting the source axis h](j)}(h``unsigned int src_axis``h]j)}(hjC&h]hunsigned int src_axis}(hjE&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=&ubj)}(hhh]jH)}(h%ABS_* value selecting the source axish]h%ABS_* value selecting the source axis}(hj\&hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjX&hMhjY&ubah}(h]h ]h"]h$]h&]uh1jhj=&ubeh}(h]h ]h"]h$]h&]uh1jhjX&hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhjs%ubjH)}(h**Description**h]jw)}(hj~&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj|&ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjs%ubjH)}(hX Set absinfo for the selected destination axis by copying it from the specified source input device's source axis. This is useful to e.g. setup a pen/stylus input-device for combined touchscreen/pen hardware where the pen uses the same coordinates as the touchscreen.h]hX Set absinfo for the selected destination axis by copying it from the specified source input device’s source axis. This is useful to e.g. setup a pen/stylus input-device for combined touchscreen/pen hardware where the pen uses the same coordinates as the touchscreen.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjs%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_grab_device (C function)c.input_grab_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h3int input_grab_device (struct input_handle *handle)h]h)}(h2int input_grab_device(struct input_handle *handle)h](j )}(hinth]hint}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj&hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&hhhj&hMubj)}(hinput_grab_deviceh]j)}(hinput_grab_deviceh]hinput_grab_device}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj&hhhj&hMubjD)}(h(struct input_handle *handle)h]jJ)}(hstruct input_handle *handleh](h)}(hhh]hstruct}(hj'hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj&ubh)}(h h]h }(hj 'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubh)}(hhh]j)}(h input_handleh]h input_handle}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj 'modnameN classnameNjY j\ )}j_ ]j)}jj&sbc.input_grab_deviceasbuh1hhj&ubh)}(h h]h }(hj>'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj&ubj)}(hjh]h*}(hjL'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hhandleh]hhandle}(hjY'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj&ubah}(h]h ]h"]h$]h&]j,j-uh1jChj&hhhj&hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj&hhhj&hMubah}(h]j&ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj&hMhj&hhubjC)}(hhh]jH)}(hgrabs device for exclusive useh]hgrabs device for exclusive use}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jBhj&hhhj&hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj'jhj'jijjjkuh1hhhhhhNhNubjm)}(hX0**Parameters** ``struct input_handle *handle`` input handle that wants to own the device **Description** When a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.h](jH)}(h**Parameters**h]jw)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj'ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubj)}(hhh]j)}(hJ``struct input_handle *handle`` input handle that wants to own the device h](j)}(h``struct input_handle *handle``h]j)}(hj'h]hstruct input_handle *handle}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubj)}(hhh]jH)}(h)input handle that wants to own the deviceh]h)input handle that wants to own the device}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubjH)}(h**Description**h]jw)}(hj'h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj'ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubjH)}(hWhen a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.h]hWhen a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!input_release_device (C function)c.input_release_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h7void input_release_device (struct input_handle *handle)h]h)}(h6void input_release_device(struct input_handle *handle)h](j )}(hvoidh]hvoid}(hjD(hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@(hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM1ubh)}(h h]h }(hjS(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@(hhhjR(hM1ubj)}(hinput_release_deviceh]j)}(hinput_release_deviceh]hinput_release_device}(hje(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhja(ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj@(hhhjR(hM1ubjD)}(h(struct input_handle *handle)h]jJ)}(hstruct input_handle *handleh](h)}(hhh]hstruct}(hj(hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}(ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}(ubh)}(hhh]j)}(h input_handleh]h input_handle}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj(modnameN classnameNjY j\ )}j_ ]j)}jjg(sbc.input_release_deviceasbuh1hhj}(ubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}(ubj)}(hhandleh]hhandle}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}(ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjy(ubah}(h]h ]h"]h$]h&]j,j-uh1jChj@(hhhjR(hM1ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj<(hhhjR(hM1ubah}(h]j7(ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjR(hM1hj9(hhubjC)}(hhh]jH)}(h!release previously grabbed deviceh]h!release previously grabbed device}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM)hj)hhubah}(h]h ]h"]h$]h&]uh1jBhj9(hhhjR(hM1ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj)jhj)jijjjkuh1hhhhhhNhNubjm)}(hXg**Parameters** ``struct input_handle *handle`` input handle that owns the device **Description** Releases previously grabbed device so that other input handles can start receiving input events. Upon release all handlers attached to the device have their start() method called so they have a change to synchronize device state with the rest of the system.h](jH)}(h**Parameters**h]jw)}(hj&)h]h Parameters}(hj()hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj$)ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM-hj )ubj)}(hhh]j)}(hB``struct input_handle *handle`` input handle that owns the device h](j)}(h``struct input_handle *handle``h]j)}(hjE)h]hstruct input_handle *handle}(hjG)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM*hj?)ubj)}(hhh]jH)}(h!input handle that owns the deviceh]h!input handle that owns the device}(hj^)hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjZ)hM*hj[)ubah}(h]h ]h"]h$]h&]uh1jhj?)ubeh}(h]h ]h"]h$]h&]uh1jhjZ)hM*hj<)ubah}(h]h ]h"]h$]h&]uh1jhj )ubjH)}(h**Description**h]jw)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj~)ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM,hj )ubjH)}(hXReleases previously grabbed device so that other input handles can start receiving input events. Upon release all handlers attached to the device have their start() method called so they have a change to synchronize device state with the rest of the system.h]hXReleases previously grabbed device so that other input handles can start receiving input events. Upon release all handlers attached to the device have their start() method called so they have a change to synchronize device state with the rest of the system.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM,hj )ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_open_device (C function)c.input_open_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h3int input_open_device (struct input_handle *handle)h]h)}(h2int input_open_device(struct input_handle *handle)h](j )}(hinth]hint}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj)hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMAubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)hhhj)hMAubj)}(hinput_open_deviceh]j)}(hinput_open_deviceh]hinput_open_device}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj)hhhj)hMAubjD)}(h(struct input_handle *handle)h]jJ)}(hstruct input_handle *handleh](h)}(hhh]hstruct}(hj*hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj)ubh)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubh)}(hhh]j)}(h input_handleh]h input_handle}(hj *hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj"*modnameN classnameNjY j\ )}j_ ]j)}jj)sbc.input_open_deviceasbuh1hhj)ubh)}(h h]h }(hj@*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj)ubj)}(hjh]h*}(hjN*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hhandleh]hhandle}(hj[*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj)ubah}(h]h ]h"]h$]h&]j,j-uh1jChj)hhhj)hMAubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj)hhhj)hMAubah}(h]j)ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj)hMAhj)hhubjC)}(hhh]jH)}(hopen input deviceh]hopen input device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM;hj*hhubah}(h]h ]h"]h$]h&]uh1jBhj)hhhj)hMAubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj*jhj*jijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_handle *handle`` handle through which device is being accessed **Description** This function should be called by input handlers when they want to start receive events from given input device.h](jH)}(h**Parameters**h]jw)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj*ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM?hj*ubj)}(hhh]j)}(hN``struct input_handle *handle`` handle through which device is being accessed h](j)}(h``struct input_handle *handle``h]j)}(hj*h]hstruct input_handle *handle}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM<hj*ubj)}(hhh]jH)}(h-handle through which device is being accessedh]h-handle through which device is being accessed}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj*hM<hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM<hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubjH)}(h**Description**h]jw)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj*ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM>hj*ubjH)}(hpThis function should be called by input handlers when they want to start receive events from given input device.h]hpThis function should be called by input handlers when they want to start receive events from given input device.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM>hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_close_device (C function)c.input_close_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h5void input_close_device (struct input_handle *handle)h]h)}(h4void input_close_device(struct input_handle *handle)h](j )}(hvoidh]hvoid}(hjF+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjB+hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hjU+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjB+hhhjT+hMubj)}(hinput_close_deviceh]j)}(hinput_close_deviceh]hinput_close_device}(hjg+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjc+ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjB+hhhjT+hMubjD)}(h(struct input_handle *handle)h]jJ)}(hstruct input_handle *handleh](h)}(hhh]hstruct}(hj+hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj+ubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+ubh)}(hhh]j)}(h input_handleh]h input_handle}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj+modnameN classnameNjY j\ )}j_ ]j)}jji+sbc.input_close_deviceasbuh1hhj+ubh)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hhandleh]hhandle}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj{+ubah}(h]h ]h"]h$]h&]j,j-uh1jChjB+hhhjT+hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj>+hhhjT+hMubah}(h]j9+ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjT+hMhj;+hhubjC)}(hhh]jH)}(hclose input deviceh]hclose input device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{hj,hhubah}(h]h ]h"]h$]h&]uh1jBhj;+hhhjT+hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj,jhj,jijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_handle *handle`` handle through which device is being accessed **Description** This function should be called by input handlers when they want to stop receive events from given input device.h](jH)}(h**Parameters**h]jw)}(hj(,h]h Parameters}(hj*,hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj&,ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj",ubj)}(hhh]j)}(hN``struct input_handle *handle`` handle through which device is being accessed h](j)}(h``struct input_handle *handle``h]j)}(hjG,h]hstruct input_handle *handle}(hjI,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|hjA,ubj)}(hhh]jH)}(h-handle through which device is being accessedh]h-handle through which device is being accessed}(hj`,hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj\,hM|hj],ubah}(h]h ]h"]h$]h&]uh1jhjA,ubeh}(h]h ]h"]h$]h&]uh1jhj\,hM|hj>,ubah}(h]h ]h"]h$]h&]uh1jhj",ubjH)}(h**Description**h]jw)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj,ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM~hj",ubjH)}(hoThis function should be called by input handlers when they want to stop receive events from given input device.h]hoThis function should be called by input handlers when they want to stop receive events from given input device.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM~hj",ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%input_scancode_to_scalar (C function)c.input_scancode_to_scalarhNtauh1hhhhhhNhNubh)}(hhh](h)}(hZint input_scancode_to_scalar (const struct input_keymap_entry *ke, unsigned int *scancode)h]h)}(hYint input_scancode_to_scalar(const struct input_keymap_entry *ke, unsigned int *scancode)h](j )}(hinth]hint}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj,hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj,hhhj,hMubj)}(hinput_scancode_to_scalarh]j)}(hinput_scancode_to_scalarh]hinput_scancode_to_scalar}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj,hhhj,hMubjD)}(h=(const struct input_keymap_entry *ke, unsigned int *scancode)h](jJ)}(h#const struct input_keymap_entry *keh](h)}(hjk$h]hconst}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubh)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubh)}(hhh]hstruct}(hj-hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubh)}(h h]h }(hj,-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubh)}(hhh]j)}(hinput_keymap_entryh]hinput_keymap_entry}(hj=-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:-ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj?-modnameN classnameNjY j\ )}j_ ]j)}jj,sbc.input_scancode_to_scalarasbuh1hhj-ubh)}(h h]h }(hj]-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(hjh]h*}(hjk-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hkeh]hke}(hjx-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj,ubjJ)}(hunsigned int *scancodeh](j )}(hunsignedh]hunsigned}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj )}(hinth]hint}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj-ubh)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hscancodeh]hscancode}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj,ubeh}(h]h ]h"]h$]h&]j,j-uh1jChj,hhhj,hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj,hhhj,hMubah}(h]j,ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj,hMhj,hhubjC)}(hhh]jH)}(hMconverts scancode in :c:type:`struct input_keymap_entry `h](hconverts scancode in }(hj.hhhNhNubh)}(h8:c:type:`struct input_keymap_entry `h]j)}(hj .h]hstruct input_keymap_entry}(hj .hhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j\ )}j_ ]jY-c.input_scancode_to_scalarasbja input_keymap_entryuh1hhjhMhj.ubeh}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj-hhubah}(h]h ]h"]h$]h&]uh1jBhj,hhhj,hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj<.jhj<.jijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``const struct input_keymap_entry *ke`` keymap entry containing scancode to be converted. ``unsigned int *scancode`` pointer to the location where converted scancode should be stored. **Description** This function is used to convert scancode stored in :c:type:`struct keymap_entry ` into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as 'unsigned int'.h](jH)}(h**Parameters**h]jw)}(hjF.h]h Parameters}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjD.ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj@.ubj)}(hhh](j)}(hZ``const struct input_keymap_entry *ke`` keymap entry containing scancode to be converted. h](j)}(h'``const struct input_keymap_entry *ke``h]j)}(hje.h]h#const struct input_keymap_entry *ke}(hjg.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj_.ubj)}(hhh]jH)}(h1keymap entry containing scancode to be converted.h]h1keymap entry containing scancode to be converted.}(hj~.hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjz.hMhj{.ubah}(h]h ]h"]h$]h&]uh1jhj_.ubeh}(h]h ]h"]h$]h&]uh1jhjz.hMhj\.ubj)}(h^``unsigned int *scancode`` pointer to the location where converted scancode should be stored. h](j)}(h``unsigned int *scancode``h]j)}(hj.h]hunsigned int *scancode}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.ubj)}(hhh]jH)}(hBpointer to the location where converted scancode should be stored.h]hBpointer to the location where converted scancode should be stored.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj\.ubeh}(h]h ]h"]h$]h&]uh1jhj@.ubjH)}(h**Description**h]jw)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj.ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj@.ubjH)}(hThis function is used to convert scancode stored in :c:type:`struct keymap_entry ` into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as 'unsigned int'.h](h4This function is used to convert scancode stored in }(hj.hhhNhNubh)}(h,:c:type:`struct keymap_entry `h]j)}(hj.h]hstruct keymap_entry}(hj.hhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j] ja keymap_entryuh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.ubh into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as ‘unsigned int’.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhj/hMhj@.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_get_keycode (C function)c.input_get_keycodehNtauh1hhhhhhNhNubh)}(hhh](h)}(hLint input_get_keycode (struct input_dev *dev, struct input_keymap_entry *ke)h]h)}(hKint input_get_keycode(struct input_dev *dev, struct input_keymap_entry *ke)h](j )}(hinth]hint}(hjB/hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>/hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhubh)}(h h]h }(hjQ/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>/hhhjP/hMhubj)}(hinput_get_keycodeh]j)}(hinput_get_keycodeh]hinput_get_keycode}(hjc/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_/ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj>/hhhjP/hMhubjD)}(h6(struct input_dev *dev, struct input_keymap_entry *ke)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj{/ubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{/ubh)}(hhh]j)}(h input_devh]h input_dev}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj/modnameN classnameNjY j\ )}j_ ]j)}jje/sbc.input_get_keycodeasbuh1hhj{/ubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{/ubj)}(hdevh]hdev}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{/ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjw/ubjJ)}(hstruct input_keymap_entry *keh](h)}(hhh]hstruct}(hj/hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj/ubh)}(h h]h }(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubh)}(hhh]j)}(hinput_keymap_entryh]hinput_keymap_entry}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj 0ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj0modnameN classnameNjY j\ )}j_ ]j/c.input_get_keycodeasbuh1hhj/ubh)}(h h]h }(hj-0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubj)}(hjh]h*}(hj;0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hkeh]hke}(hjH0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjw/ubeh}(h]h ]h"]h$]h&]j,j-uh1jChj>/hhhjP/hMhubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj:/hhhjP/hMhubah}(h]j5/ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjP/hMhhj7/hhubjC)}(hhh]jH)}(h5retrieve keycode currently mapped to a given scancodeh]h5retrieve keycode currently mapped to a given scancode}(hjr0hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMahjo0hhubah}(h]h ]h"]h$]h&]uh1jBhj7/hhhjP/hMhubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj0jhj0jijjjkuh1hhhhhhNhNubjm)}(hX **Parameters** ``struct input_dev *dev`` input device which keymap is being queried ``struct input_keymap_entry *ke`` keymap entry **Description** This function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.h](jH)}(h**Parameters**h]jw)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj0ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMehj0ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being queried h](j)}(h``struct input_dev *dev``h]j)}(hj0h]hstruct input_dev *dev}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMbhj0ubj)}(hhh]jH)}(h*input device which keymap is being queriedh]h*input device which keymap is being queried}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj0hMbhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMbhj0ubj)}(h/``struct input_keymap_entry *ke`` keymap entry h](j)}(h!``struct input_keymap_entry *ke``h]j)}(hj0h]hstruct input_keymap_entry *ke}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMchj0ubj)}(hhh]jH)}(h keymap entryh]h keymap entry}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj1hMchj1ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj1hMchj0ubeh}(h]h ]h"]h$]h&]uh1jhj0ubjH)}(h**Description**h]jw)}(hj'1h]h Description}(hj)1hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj%1ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMehj0ubjH)}(hrThis function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.h]hrThis function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.}(hj=1hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMehj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_set_keycode (C function)c.input_set_keycodehNtauh1hhhhhhNhNubh)}(hhh](h)}(hRint input_set_keycode (struct input_dev *dev, const struct input_keymap_entry *ke)h]h)}(hQint input_set_keycode(struct input_dev *dev, const struct input_keymap_entry *ke)h](j )}(hinth]hint}(hjl1hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjh1hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMxubh)}(h h]h }(hj{1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjh1hhhjz1hMxubj)}(hinput_set_keycodeh]j)}(hinput_set_keycodeh]hinput_set_keycode}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjh1hhhjz1hMxubjD)}(h<(struct input_dev *dev, const struct input_keymap_entry *ke)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj1ubh)}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1ubh)}(hhh]j)}(h input_devh]h input_dev}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj1modnameN classnameNjY j\ )}j_ ]j)}jj1sbc.input_set_keycodeasbuh1hhj1ubh)}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hdevh]hdev}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj1ubjJ)}(h#const struct input_keymap_entry *keh](h)}(hjk$h]hconst}(hj2hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubh)}(h h]h }(hj(2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubh)}(hhh]hstruct}(hj62hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj2ubh)}(h h]h }(hjC2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubh)}(hhh]j)}(hinput_keymap_entryh]hinput_keymap_entry}(hjT2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQ2ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjV2modnameN classnameNjY j\ )}j_ ]j1c.input_set_keycodeasbuh1hhj2ubh)}(h h]h }(hjr2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hkeh]hke}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj1ubeh}(h]h ]h"]h$]h&]j,j-uh1jChjh1hhhjz1hMxubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjd1hhhjz1hMxubah}(h]j_1ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjz1hMxhja1hhubjC)}(hhh]jH)}(h'attribute a keycode to a given scancodeh]h'attribute a keycode to a given scancode}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMqhj2hhubah}(h]h ]h"]h$]h&]uh1jBhja1hhhjz1hMxubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj2jhj2jijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``struct input_dev *dev`` input device which keymap is being updated ``const struct input_keymap_entry *ke`` new keymap entry **Description** This function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.h](jH)}(h**Parameters**h]jw)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj2ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMuhj2ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being updated h](j)}(h``struct input_dev *dev``h]j)}(hj2h]hstruct input_dev *dev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMrhj2ubj)}(hhh]jH)}(h*input device which keymap is being updatedh]h*input device which keymap is being updated}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj 3hMrhj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj 3hMrhj2ubj)}(h9``const struct input_keymap_entry *ke`` new keymap entry h](j)}(h'``const struct input_keymap_entry *ke``h]j)}(hj13h]h#const struct input_keymap_entry *ke}(hj33hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/3ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMshj+3ubj)}(hhh]jH)}(hnew keymap entryh]hnew keymap entry}(hjJ3hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjF3hMshjG3ubah}(h]h ]h"]h$]h&]uh1jhj+3ubeh}(h]h ]h"]h$]h&]uh1jhjF3hMshj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubjH)}(h**Description**h]jw)}(hjl3h]h Description}(hjn3hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjj3ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMuhj2ubjH)}(hxThis function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.h]hxThis function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMuhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_reset_device (C function)c.input_reset_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h/void input_reset_device (struct input_dev *dev)h]h)}(h.void input_reset_device(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj3hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3hhhj3hMubj)}(hinput_reset_deviceh]j)}(hinput_reset_deviceh]hinput_reset_device}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj3hhhj3hMubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj3hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj3ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubh)}(hhh]j)}(h input_devh]h input_dev}(hj 4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj 4ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj4modnameN classnameNjY j\ )}j_ ]j)}jj3sbc.input_reset_deviceasbuh1hhj3ubh)}(h h]h }(hj,4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubj)}(hjh]h*}(hj:4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hdevh]hdev}(hjG4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj3ubah}(h]h ]h"]h$]h&]j,j-uh1jChj3hhhj3hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj3hhhj3hMubah}(h]j3ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj3hMhj3hhubjC)}(hhh]jH)}(h'reset/restore the state of input deviceh]h'reset/restore the state of input device}(hjq4hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjn4hhubah}(h]h ]h"]h$]h&]uh1jBhj3hhhj3hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj4jhj4jijjjkuh1hhhhhhNhNubjm)}(hX8**Parameters** ``struct input_dev *dev`` input device whose state needs to be reset **Description** This function tries to reset the state of an opened input device and bring internal state and state if the hardware in sync with each other. We mark all keys as released, restore LED state, repeat rate, etc.h](jH)}(h**Parameters**h]jw)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj4ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj4ubj)}(hhh]j)}(hE``struct input_dev *dev`` input device whose state needs to be reset h](j)}(h``struct input_dev *dev``h]j)}(hj4h]hstruct input_dev *dev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj4ubj)}(hhh]jH)}(h*input device whose state needs to be reseth]h*input device whose state needs to be reset}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubjH)}(h**Description**h]jw)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj4ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj4ubjH)}(hThis function tries to reset the state of an opened input device and bring internal state and state if the hardware in sync with each other. We mark all keys as released, restore LED state, repeat rate, etc.h]hThis function tries to reset the state of an opened input device and bring internal state and state if the hardware in sync with each other. We mark all keys as released, restore LED state, repeat rate, etc.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ"input_allocate_device (C function)c.input_allocate_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h/struct input_dev * input_allocate_device (void)h]h)}(h-struct input_dev *input_allocate_device(void)h](h)}(hhh]hstruct}(hj25hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj.5hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj@5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.5hhhj?5hMubh)}(hhh]j)}(h input_devh]h input_dev}(hjQ5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjN5ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjS5modnameN classnameNjY j\ )}j_ ]j)}jinput_allocate_devicesbc.input_allocate_deviceasbuh1hhj.5hhhj?5hMubh)}(h h]h }(hjr5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.5hhhj?5hMubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.5hhhj?5hMubj)}(hinput_allocate_deviceh]j)}(hjo5h]hinput_allocate_device}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj.5hhhj?5hMubjD)}(h(void)h]jJ)}(hvoidh]j )}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5ubah}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj5ubah}(h]h ]h"]h$]h&]j,j-uh1jChj.5hhhj?5hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj*5hhhj?5hMubah}(h]j%5ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj?5hMhj'5hhubjC)}(hhh]jH)}(h$allocate memory for new input deviceh]h$allocate memory for new input device}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhj5hhubah}(h]h ]h"]h$]h&]uh1jBhj'5hhhj?5hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj5jhj5jijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``void`` no arguments **Description** Returns prepared struct input_dev or ``NULL``. **NOTE** Use input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.h](jH)}(h**Parameters**h]jw)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj5ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{hj5ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj6h]hvoid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM~hj6ubj)}(hhh]jH)}(h no argumentsh]h no arguments}(hj06hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj,6hM~hj-6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj,6hM~hj6ubah}(h]h ]h"]h$]h&]uh1jhj5ubjH)}(h**Description**h]jw)}(hjR6h]h Description}(hjT6hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjP6ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj5ubjH)}(h.Returns prepared struct input_dev or ``NULL``.h](h%Returns prepared struct input_dev or }(hjh6hhhNhNubj)}(h``NULL``h]hNULL}(hjp6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh6ubh.}(hjh6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMxhj5ubjH)}(h**NOTE**h]jw)}(hj6h]hNOTE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj6ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMzhj5ubjH)}(hUse input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.h]hUse input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'devm_input_allocate_device (C function)c.devm_input_allocate_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(hBstruct input_dev * devm_input_allocate_device (struct device *dev)h]h)}(h@struct input_dev *devm_input_allocate_device(struct device *dev)h](h)}(hhh]hstruct}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj6hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6hhhj6hMubh)}(hhh]j)}(h input_devh]h input_dev}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj6modnameN classnameNjY j\ )}j_ ]j)}jdevm_input_allocate_devicesbc.devm_input_allocate_deviceasbuh1hhj6hhhj6hMubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6hhhj6hMubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj6hMubj)}(hdevm_input_allocate_deviceh]j)}(hj 7h]hdevm_input_allocate_device}(hj/7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+7ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj6hhhj6hMubjD)}(h(struct device *dev)h]jJ)}(hstruct device *devh](h)}(hhh]hstruct}(hjJ7hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjF7ubh)}(h h]h }(hjW7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjF7ubh)}(hhh]j)}(hdeviceh]hdevice}(hjh7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhje7ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjj7modnameN classnameNjY j\ )}j_ ]j 7c.devm_input_allocate_deviceasbuh1hhjF7ubh)}(h h]h }(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjF7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF7ubj)}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjF7ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjB7ubah}(h]h ]h"]h$]h&]j,j-uh1jChj6hhhj6hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj6hhhj6hMubah}(h]j6ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj6hMhj6hhubjC)}(hhh]jH)}(hallocate managed input deviceh]hallocate managed input device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jBhj6hhhj6hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj7jhj7jijjjkuh1hhhhhhNhNubjm)}(hX **Parameters** ``struct device *dev`` device owning the input device being created **Description** Returns prepared struct input_dev or ``NULL``. Managed input devices do not need to be explicitly unregistered or freed as it will be done automatically when owner device unbinds from its driver (or binding fails). Once managed input device is allocated, it is ready to be set up and registered in the same fashion as regular input device. There are no special devm_input_device_[un]register() variants, regular ones work with both managed and unmanaged devices, should you need them. In most cases however, managed input device need not be explicitly unregistered or freed. **NOTE** the owner device is set up as parent of input device and users should not override it.h](jH)}(h**Parameters**h]jw)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj7ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubj)}(hhh]j)}(hD``struct device *dev`` device owning the input device being created h](j)}(h``struct device *dev``h]j)}(hj 8h]hstruct device *dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj8ubj)}(hhh]jH)}(h,device owning the input device being createdh]h,device owning the input device being created}(hj%8hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj!8hMhj"8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj!8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubjH)}(h**Description**h]jw)}(hjG8h]h Description}(hjI8hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjE8ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubjH)}(h.Returns prepared struct input_dev or ``NULL``.h](h%Returns prepared struct input_dev or }(hj]8hhhNhNubj)}(h``NULL``h]hNULL}(hje8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]8ubh.}(hj]8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubjH)}(hXManaged input devices do not need to be explicitly unregistered or freed as it will be done automatically when owner device unbinds from its driver (or binding fails). Once managed input device is allocated, it is ready to be set up and registered in the same fashion as regular input device. There are no special devm_input_device_[un]register() variants, regular ones work with both managed and unmanaged devices, should you need them. In most cases however, managed input device need not be explicitly unregistered or freed.h]hXManaged input devices do not need to be explicitly unregistered or freed as it will be done automatically when owner device unbinds from its driver (or binding fails). Once managed input device is allocated, it is ready to be set up and registered in the same fashion as regular input device. There are no special devm_input_device_[un]register() variants, regular ones work with both managed and unmanaged devices, should you need them. In most cases however, managed input device need not be explicitly unregistered or freed.}(hj~8hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubjH)}(h**NOTE**h]jw)}(hj8h]hNOTE}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj8ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubjH)}(hVthe owner device is set up as parent of input device and users should not override it.h]hVthe owner device is set up as parent of input device and users should not override it.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_free_device (C function)c.input_free_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h.void input_free_device (struct input_dev *dev)h]h)}(h-void input_free_device(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj8hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8hhhj8hMubj)}(hinput_free_deviceh]j)}(hinput_free_deviceh]hinput_free_device}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj8hhhj8hMubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj9hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj 9ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj 9ubh)}(hhh]j)}(h input_devh]h input_dev}(hj/9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,9ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj19modnameN classnameNjY j\ )}j_ ]j)}jj8sbc.input_free_deviceasbuh1hhj 9ubh)}(h h]h }(hjO9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj 9ubj)}(hjh]h*}(hj]9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9ubj)}(hdevh]hdev}(hjj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj 9ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj 9ubah}(h]h ]h"]h$]h&]j,j-uh1jChj8hhhj8hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj8hhhj8hMubah}(h]j8ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj8hMhj8hhubjC)}(hhh]jH)}(h+free memory occupied by input_dev structureh]h+free memory occupied by input_dev structure}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jBhj8hhhj8hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj9jhj9jijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``struct input_dev *dev`` input device to free **Description** This function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped. Device should be allocated by input_allocate_device(). **NOTE** If there are references to the input device then memory will not be freed until last reference is dropped.h](jH)}(h**Parameters**h]jw)}(hj9h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj9ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubj)}(hhh]j)}(h/``struct input_dev *dev`` input device to free h](j)}(h``struct input_dev *dev``h]j)}(hj9h]hstruct input_dev *dev}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubj)}(hhh]jH)}(hinput device to freeh]hinput device to free}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubjH)}(h**Description**h]jw)}(hj:h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj:ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubjH)}(hThis function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped.h]hThis function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped.}(hj&:hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubjH)}(h6Device should be allocated by input_allocate_device().h]h6Device should be allocated by input_allocate_device().}(hj5:hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubjH)}(h**NOTE**h]jw)}(hjF:h]hNOTE}(hjH:hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjD:ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubjH)}(hjIf there are references to the input device then memory will not be freed until last reference is dropped.h]hjIf there are references to the input device then memory will not be freed until last reference is dropped.}(hj\:hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ input_set_timestamp (C function)c.input_set_timestamphNtauh1hhhhhhNhNubh)}(hhh](h)}(hCvoid input_set_timestamp (struct input_dev *dev, ktime_t timestamp)h]h)}(hBvoid input_set_timestamp(struct input_dev *dev, ktime_t timestamp)h](j )}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:hhhj:hMubj)}(hinput_set_timestamph]j)}(hinput_set_timestamph]hinput_set_timestamp}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj:hhhj:hMubjD)}(h*(struct input_dev *dev, ktime_t timestamp)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj:hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj:ubh)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:ubh)}(hhh]j)}(h input_devh]h input_dev}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj:modnameN classnameNjY j\ )}j_ ]j)}jj:sbc.input_set_timestampasbuh1hhj:ubh)}(h h]h }(hj;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hdevh]hdev}(hj!;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj:ubjJ)}(hktime_t timestamph](h)}(hhh]j)}(hktime_th]hktime_t}(hj=;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:;ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj?;modnameN classnameNjY j\ )}j_ ]j;c.input_set_timestampasbuh1hhj6;ubh)}(h h]h }(hj[;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6;ubj)}(h timestamph]h timestamp}(hji;hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6;ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj:ubeh}(h]h ]h"]h$]h&]j,j-uh1jChj:hhhj:hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj:hhhj:hMubah}(h]j~:ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj:hMhj:hhubjC)}(hhh]jH)}(hset timestamp for input eventsh]hset timestamp for input events}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj;hhubah}(h]h ]h"]h$]h&]uh1jBhj:hhhj:hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj;jhj;jijjjkuh1hhhhhhNhNubjm)}(hX=**Parameters** ``struct input_dev *dev`` input device to set timestamp for ``ktime_t timestamp`` the time at which the event has occurred in CLOCK_MONOTONIC **Description** This function is intended to provide to the input system a more accurate time of when an event actually occurred. The driver should call this function as soon as a timestamp is acquired ensuring clock conversions in input_set_timestamp are done correctly. The system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.h](jH)}(h**Parameters**h]jw)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj;ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj;ubj)}(hhh](j)}(h<``struct input_dev *dev`` input device to set timestamp for h](j)}(h``struct input_dev *dev``h]j)}(hj;h]hstruct input_dev *dev}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj;ubj)}(hhh]jH)}(h!input device to set timestamp forh]h!input device to set timestamp for}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hM hj;ubj)}(hR``ktime_t timestamp`` the time at which the event has occurred in CLOCK_MONOTONIC h](j)}(h``ktime_t timestamp``h]j)}(hj <h]hktime_t timestamp}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj <ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj<ubj)}(hhh]jH)}(h;the time at which the event has occurred in CLOCK_MONOTONICh]h;the time at which the event has occurred in CLOCK_MONOTONIC}(hj&<hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj#<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj"<hM hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;ubjH)}(h**Description**h]jw)}(hjI<h]h Description}(hjK<hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjG<ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj;ubjH)}(hThis function is intended to provide to the input system a more accurate time of when an event actually occurred. The driver should call this function as soon as a timestamp is acquired ensuring clock conversions in input_set_timestamp are done correctly.h]hThis function is intended to provide to the input system a more accurate time of when an event actually occurred. The driver should call this function as soon as a timestamp is acquired ensuring clock conversions in input_set_timestamp are done correctly.}(hj_<hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj;ubjH)}(hThe system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.h]hThe system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.}(hjn<hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ input_get_timestamp (C function)c.input_get_timestamphNtauh1hhhhhhNhNubh)}(hhh](h)}(h5ktime_t * input_get_timestamp (struct input_dev *dev)h]h)}(h3ktime_t *input_get_timestamp(struct input_dev *dev)h](h)}(hhh]j)}(hktime_th]hktime_t}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj<modnameN classnameNjY j\ )}j_ ]j)}jinput_get_timestampsbc.input_get_timestampasbuh1hhj<hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM%ubh)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<hhhj<hM%ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hM%ubj)}(hinput_get_timestamph]j)}(hj<h]hinput_get_timestamp}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj<hhhj<hM%ubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj<hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj<ubh)}(h h]h }(hj =hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubh)}(hhh]j)}(h input_devh]h input_dev}(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj=modnameN classnameNjY j\ )}j_ ]j<c.input_get_timestampasbuh1hhj<ubh)}(h h]h }(hj8=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<ubj)}(hjh]h*}(hjF=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(hdevh]hdev}(hjS=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj<ubah}(h]h ]h"]h$]h&]j,j-uh1jChj<hhhj<hM%ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj<hhhj<hM%ubah}(h]j<ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj<hM%hj<hhubjC)}(hhh]jH)}(hget timestamp for input eventsh]hget timestamp for input events}(hj}=hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjz=hhubah}(h]h ]h"]h$]h&]uh1jBhj<hhhj<hM%ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj=jhj=jijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` input device to get timestamp from **Description** A valid timestamp is a timestamp of non-zero value.h](jH)}(h**Parameters**h]jw)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj=ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hj=ubj)}(hhh]j)}(h=``struct input_dev *dev`` input device to get timestamp from h](j)}(h``struct input_dev *dev``h]j)}(hj=h]hstruct input_dev *dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM!hj=ubj)}(hhh]jH)}(h"input device to get timestamp fromh]h"input device to get timestamp from}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj=hM!hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hM!hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubjH)}(h**Description**h]jw)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj=ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM#hj=ubjH)}(h3A valid timestamp is a timestamp of non-zero value.h]h3A valid timestamp is a timestamp of non-zero value.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM#hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!input_set_capability (C function)c.input_set_capabilityhNtauh1hhhhhhNhNubh)}(hhh](h)}(hWvoid input_set_capability (struct input_dev *dev, unsigned int type, unsigned int code)h]h)}(hVvoid input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)h](j )}(hvoidh]hvoid}(hj>>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:>hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM9ubh)}(h h]h }(hjM>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:>hhhjL>hM9ubj)}(hinput_set_capabilityh]j)}(hinput_set_capabilityh]hinput_set_capability}(hj_>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj[>ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj:>hhhjL>hM9ubjD)}(h=(struct input_dev *dev, unsigned int type, unsigned int code)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj{>hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjw>ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjw>ubh)}(hhh]j)}(h input_devh]h input_dev}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj>modnameN classnameNjY j\ )}j_ ]j)}jja>sbc.input_set_capabilityasbuh1hhjw>ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjw>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw>ubj)}(hdevh]hdev}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjw>ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjs>ubjJ)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>ubj )}(hinth]hint}(hj ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj>ubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>ubj)}(htypeh]htype}(hj%?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjs>ubjJ)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hj>?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:?ubh)}(h h]h }(hjL?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:?ubj )}(hinth]hint}(hjZ?hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj:?ubh)}(h h]h }(hjh?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:?ubj)}(hcodeh]hcode}(hjv?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:?ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjs>ubeh}(h]h ]h"]h$]h&]j,j-uh1jChj:>hhhjL>hM9ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj6>hhhjL>hM9ubah}(h]j1>ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjL>hM9hj3>hhubjC)}(hhh]jH)}(h)mark device as capable of a certain eventh]h)mark device as capable of a certain event}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM1hj?hhubah}(h]h ]h"]h$]h&]uh1jBhj3>hhhjL>hM9ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj?jhj?jijjjkuh1hhhhhhNhNubjm)}(hXN**Parameters** ``struct input_dev *dev`` device that is capable of emitting or accepting event ``unsigned int type`` type of the event (EV_KEY, EV_REL, etc...) ``unsigned int code`` event code **Description** In addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.h](jH)}(h**Parameters**h]jw)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj?ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM5hj?ubj)}(hhh](j)}(hP``struct input_dev *dev`` device that is capable of emitting or accepting event h](j)}(h``struct input_dev *dev``h]j)}(hj?h]hstruct input_dev *dev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM2hj?ubj)}(hhh]jH)}(h5device that is capable of emitting or accepting eventh]h5device that is capable of emitting or accepting event}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj?hM2hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hM2hj?ubj)}(hA``unsigned int type`` type of the event (EV_KEY, EV_REL, etc...) h](j)}(h``unsigned int type``h]j)}(hj@h]hunsigned int type}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM3hj@ubj)}(hhh]jH)}(h*type of the event (EV_KEY, EV_REL, etc...)h]h*type of the event (EV_KEY, EV_REL, etc...)}(hj3@hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj/@hM3hj0@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj/@hM3hj?ubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjS@h]hunsigned int code}(hjU@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ@ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM4hjM@ubj)}(hhh]jH)}(h event codeh]h event code}(hjl@hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjh@hM4hji@ubah}(h]h ]h"]h$]h&]uh1jhjM@ubeh}(h]h ]h"]h$]h&]uh1jhjh@hM4hj?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubjH)}(h**Description**h]jw)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj@ubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM6hj?ubjH)}(hrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.h]hrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM6hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$input_enable_softrepeat (C function)c.input_enable_softrepeathNtauh1hhhhhhNhNubh)}(hhh](h)}(hKvoid input_enable_softrepeat (struct input_dev *dev, int delay, int period)h]h)}(hJvoid input_enable_softrepeat(struct input_dev *dev, int delay, int period)h](j )}(hvoidh]hvoid}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj@hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubh)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@hhhj@hMubj)}(hinput_enable_softrepeath]j)}(hinput_enable_softrepeath]hinput_enable_softrepeat}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj@hhhj@hMubjD)}(h.(struct input_dev *dev, int delay, int period)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjAhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj Aubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj Aubh)}(hhh]j)}(h input_devh]h input_dev}(hj.AhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+Aubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj0AmodnameN classnameNjY j\ )}j_ ]j)}jj@sbc.input_enable_softrepeatasbuh1hhj Aubh)}(h h]h }(hjNAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj Aubj)}(hjh]h*}(hj\AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Aubj)}(hdevh]hdev}(hjiAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj Aubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjAubjJ)}(h int delayh](j )}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj~Aubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~Aubj)}(hdelayh]hdelay}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~Aubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjAubjJ)}(h int periodh](j )}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjAubh)}(h h]h }(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAubj)}(hperiodh]hperiod}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjAubeh}(h]h ]h"]h$]h&]j,j-uh1jChj@hhhj@hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj@hhhj@hMubah}(h]j@ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj@hMhj@hhubjC)}(hhh]jH)}(henable software autorepeath]henable software autorepeat}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jBhj@hhhj@hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjBjhjBjijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` input device ``int delay`` repeat delay ``int period`` repeat period **Description** Enable software autorepeat on the input device.h](jH)}(h**Parameters**h]jw)}(hjBh]h Parameters}(hj!BhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjBubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjBubj)}(hhh](j)}(h'``struct input_dev *dev`` input device h](j)}(h``struct input_dev *dev``h]j)}(hj>Bh]hstruct input_dev *dev}(hj@BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjChM* ubj)}(hinput_register_deviceh]j)}(hinput_register_deviceh]hinput_register_device}(hjQChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjMCubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj,Chhhj>ChM* ubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjmChhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjiCubh)}(h h]h }(hjzChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiCubh)}(hhh]j)}(h input_devh]h input_dev}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjCmodnameN classnameNjY j\ )}j_ ]j)}jjSCsbc.input_register_deviceasbuh1hhjiCubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiCubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiCubj)}(hdevh]hdev}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiCubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjeCubah}(h]h ]h"]h$]h&]j,j-uh1jChj,Chhhj>ChM* ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj(Chhhj>ChM* ubah}(h]j#Cah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj>ChM* hj%ChhubjC)}(hhh]jH)}(hregister device with input coreh]hregister device with input core}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjChhubah}(h]h ]h"]h$]h&]uh1jBhj%Chhhj>ChM* ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjDjhjDjijjjkuh1hhhhhhNhNubjm)}(hX^**Parameters** ``struct input_dev *dev`` device to be registered **Description** This function registers device with input core. The device must be allocated with input_allocate_device() and all it's capabilities set up before registering. If function fails the device must be freed with input_free_device(). Once device has been successfully registered it can be unregistered with input_unregister_device(); input_free_device() should not be called in this case. Note that this function is also used to register managed input devices (ones allocated with devm_input_allocate_device()). Such managed input devices need not be explicitly unregistered or freed, their tear down is controlled by the devres infrastructure. It is also worth noting that tear down of managed input devices is internally a 2-step process: registered managed input device is first unregistered, but stays in memory and can still handle input_event() calls (although events will not be delivered anywhere). The freeing of managed input device will happen later, when devres stack is unwound to the point where device allocation was made.h](jH)}(h**Parameters**h]jw)}(hjDh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjDubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj Dubj)}(hhh]j)}(h2``struct input_dev *dev`` device to be registered h](j)}(h``struct input_dev *dev``h]j)}(hj1Dh]hstruct input_dev *dev}(hj3DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Dubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj+Dubj)}(hhh]jH)}(hdevice to be registeredh]hdevice to be registered}(hjJDhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjFDhM hjGDubah}(h]h ]h"]h$]h&]uh1jhj+Dubeh}(h]h ]h"]h$]h&]uh1jhjFDhM hj(Dubah}(h]h ]h"]h$]h&]uh1jhj DubjH)}(h**Description**h]jw)}(hjlDh]h Description}(hjnDhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjjDubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj DubjH)}(hX~This function registers device with input core. The device must be allocated with input_allocate_device() and all it's capabilities set up before registering. If function fails the device must be freed with input_free_device(). Once device has been successfully registered it can be unregistered with input_unregister_device(); input_free_device() should not be called in this case.h]hXThis function registers device with input core. The device must be allocated with input_allocate_device() and all it’s capabilities set up before registering. If function fails the device must be freed with input_free_device(). Once device has been successfully registered it can be unregistered with input_unregister_device(); input_free_device() should not be called in this case.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj DubjH)}(hXNote that this function is also used to register managed input devices (ones allocated with devm_input_allocate_device()). Such managed input devices need not be explicitly unregistered or freed, their tear down is controlled by the devres infrastructure. It is also worth noting that tear down of managed input devices is internally a 2-step process: registered managed input device is first unregistered, but stays in memory and can still handle input_event() calls (although events will not be delivered anywhere). The freeing of managed input device will happen later, when devres stack is unwound to the point where device allocation was made.h]hXNote that this function is also used to register managed input devices (ones allocated with devm_input_allocate_device()). Such managed input devices need not be explicitly unregistered or freed, their tear down is controlled by the devres infrastructure. It is also worth noting that tear down of managed input devices is internally a 2-step process: registered managed input device is first unregistered, but stays in memory and can still handle input_event() calls (although events will not be delivered anywhere). The freeing of managed input device will happen later, when devres stack is unwound to the point where device allocation was made.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$input_unregister_device (C function)c.input_unregister_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h4void input_unregister_device (struct input_dev *dev)h]h)}(h3void input_unregister_device(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjDhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubh)}(h h]h }(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDhhhjDhM ubj)}(hinput_unregister_deviceh]j)}(hinput_unregister_deviceh]hinput_unregister_device}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjDhhhjDhM ubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjDhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjDubh)}(h h]h }(hj EhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubh)}(hhh]j)}(h input_devh]h input_dev}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjEmodnameN classnameNjY j\ )}j_ ]j)}jjDsbc.input_unregister_deviceasbuh1hhjDubh)}(h h]h }(hj;EhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubj)}(hjh]h*}(hjIEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hdevh]hdev}(hjVEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjDubah}(h]h ]h"]h$]h&]j,j-uh1jChjDhhhjDhM ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjDhhhjDhM ubah}(h]jDah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjDhM hjDhhubjC)}(hhh]jH)}(h'unregister previously registered deviceh]h'unregister previously registered device}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj}Ehhubah}(h]h ]h"]h$]h&]uh1jBhjDhhhjDhM ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjEjhjEjijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` device to be unregistered **Description** This function unregisters an input device. Once device is unregistered the caller should not try to access it as it may get freed at any moment.h](jH)}(h**Parameters**h]jw)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjEubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjEubj)}(hhh]j)}(h4``struct input_dev *dev`` device to be unregistered h](j)}(h``struct input_dev *dev``h]j)}(hjEh]hstruct input_dev *dev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjEubj)}(hhh]jH)}(hdevice to be unregisteredh]hdevice to be unregistered}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jhjEubjH)}(h**Description**h]jw)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjEubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjEubjH)}(hThis function unregisters an input device. Once device is unregistered the caller should not try to access it as it may get freed at any moment.h]hThis function unregisters an input device. Once device is unregistered the caller should not try to access it as it may get freed at any moment.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#input_register_handler (C function)c.input_register_handlerhNtauh1hhhhhhNhNubh)}(hhh](h)}(h:int input_register_handler (struct input_handler *handler)h]h)}(h9int input_register_handler(struct input_handler *handler)h](j )}(hinth]hint}(hjAFhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj=FhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubh)}(h h]h }(hjPFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj=FhhhjOFhM ubj)}(hinput_register_handlerh]j)}(hinput_register_handlerh]hinput_register_handler}(hjbFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^Fubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj=FhhhjOFhM ubjD)}(h(struct input_handler *handler)h]jJ)}(hstruct input_handler *handlerh](h)}(hhh]hstruct}(hj~FhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjzFubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzFubh)}(hhh]j)}(h input_handlerh]h input_handler}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjFmodnameN classnameNjY j\ )}j_ ]j)}jjdFsbc.input_register_handlerasbuh1hhjzFubh)}(h h]h }(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzFubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzFubj)}(hhandlerh]hhandler}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzFubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjvFubah}(h]h ]h"]h$]h&]j,j-uh1jChj=FhhhjOFhM ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj9FhhhjOFhM ubah}(h]j4Fah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjOFhM hj6FhhubjC)}(hhh]jH)}(hregister a new input handlerh]hregister a new input handler}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjFhhubah}(h]h ]h"]h$]h&]uh1jBhj6FhhhjOFhM ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjGjhjGjijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``struct input_handler *handler`` handler to be registered **Description** This function registers a new input handler (interface) for input devices in the system and attaches it to all input devices that are compatible with the handler.h](jH)}(h**Parameters**h]jw)}(hj#Gh]h Parameters}(hj%GhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj!Gubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjGubj)}(hhh]j)}(h;``struct input_handler *handler`` handler to be registered h](j)}(h!``struct input_handler *handler``h]j)}(hjBGh]hstruct input_handler *handler}(hjDGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Gubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj:Oubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM| hj6Oubj)}(hhh]j)}(h5``struct input_handle *handle`` handle to unregister h](j)}(h``struct input_handle *handle``h]j)}(hj[Oh]hstruct input_handle *handle}(hj]OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYOubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMy hjUOubj)}(hhh]jH)}(hhandle to unregisterh]hhandle to unregister}(hjtOhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjpOhMy hjqOubah}(h]h ]h"]h$]h&]uh1jhjUOubeh}(h]h ]h"]h$]h&]uh1jhjpOhMy hjROubah}(h]h ]h"]h$]h&]uh1jhj6OubjH)}(h**Description**h]jw)}(hjOh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjOubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{ hj6OubjH)}(hEThis function removes input handle from device's and handler's lists.h]hIThis function removes input handle from device’s and handler’s lists.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{ hj6OubjH)}(hJThis function is supposed to be called from handler's disconnect() method.h]hLThis function is supposed to be called from handler’s disconnect() method.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM~ hj6Oubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ input_get_new_minor (C function)c.input_get_new_minorhNtauh1hhhhhhNhNubh)}(hhh](h)}(hVint input_get_new_minor (int legacy_base, unsigned int legacy_num, bool allow_dynamic)h]h)}(hUint input_get_new_minor(int legacy_base, unsigned int legacy_num, bool allow_dynamic)h](j )}(hinth]hint}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjOhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOhhhjOhM ubj)}(hinput_get_new_minorh]j)}(hinput_get_new_minorh]hinput_get_new_minor}(hj PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjOhhhjOhM ubjD)}(h>(int legacy_base, unsigned int legacy_num, bool allow_dynamic)h](jJ)}(hint legacy_baseh](j )}(hinth]hint}(hj'PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#Pubh)}(h h]h }(hj5PhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#Pubj)}(h legacy_baseh]h legacy_base}(hjCPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#Pubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjPubjJ)}(hunsigned int legacy_numh](j )}(hunsignedh]hunsigned}(hj\PhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXPubh)}(h h]h }(hjjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXPubj )}(hinth]hint}(hjxPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXPubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXPubj)}(h legacy_numh]h legacy_num}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjXPubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjPubjJ)}(hbool allow_dynamich](j )}(hboolh]hbool}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjPubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPubj)}(h allow_dynamich]h allow_dynamic}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjPubeh}(h]h ]h"]h$]h&]j,j-uh1jChjOhhhjOhM ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjOhhhjOhM ubah}(h]jOah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjOhM hjOhhubjC)}(hhh]jH)}(h"allocates a new input minor numberh]h"allocates a new input minor number}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjPhhubah}(h]h ]h"]h$]h&]uh1jBhjOhhhjOhM ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj Qjhj Qjijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``int legacy_base`` beginning or the legacy range to be searched ``unsigned int legacy_num`` size of legacy range ``bool allow_dynamic`` whether we can also take ID from the dynamic range **Description** This function allocates a new device minor for from input major namespace. Caller can request legacy minor by specifying **legacy_base** and **legacy_num** parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.h](jH)}(h**Parameters**h]jw)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjQubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjQubj)}(hhh](j)}(hA``int legacy_base`` beginning or the legacy range to be searched h](j)}(h``int legacy_base``h]j)}(hj4Qh]hint legacy_base}(hj6QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Qubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj.Qubj)}(hhh]jH)}(h,beginning or the legacy range to be searchedh]h,beginning or the legacy range to be searched}(hjMQhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjIQhM hjJQubah}(h]h ]h"]h$]h&]uh1jhj.Qubeh}(h]h ]h"]h$]h&]uh1jhjIQhM hj+Qubj)}(h1``unsigned int legacy_num`` size of legacy range h](j)}(h``unsigned int legacy_num``h]j)}(hjmQh]hunsigned int legacy_num}(hjoQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjgQubj)}(hhh]jH)}(hsize of legacy rangeh]hsize of legacy range}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjgQubeh}(h]h ]h"]h$]h&]uh1jhjQhM hj+Qubj)}(hJ``bool allow_dynamic`` whether we can also take ID from the dynamic range h](j)}(h``bool allow_dynamic``h]j)}(hjQh]hbool allow_dynamic}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjQubj)}(hhh]jH)}(h2whether we can also take ID from the dynamic rangeh]h2whether we can also take ID from the dynamic range}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjQhM hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhM hj+Qubeh}(h]h ]h"]h$]h&]uh1jhjQubjH)}(h**Description**h]jw)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjQubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjQubjH)}(hXThis function allocates a new device minor for from input major namespace. Caller can request legacy minor by specifying **legacy_base** and **legacy_num** parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.h](hyThis function allocates a new device minor for from input major namespace. Caller can request legacy minor by specifying }(hjQhhhNhNubjw)}(h**legacy_base**h]h legacy_base}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjQubh and }(hjQhhhNhNubjw)}(h**legacy_num**h]h legacy_num}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjQubhh parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_free_minor (C function)c.input_free_minorhNtauh1hhhhhhNhNubh)}(hhh](h)}(h*void input_free_minor (unsigned int minor)h]h)}(h)void input_free_minor(unsigned int minor)h](j )}(hvoidh]hvoid}(hjJRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjFRhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubh)}(h h]h }(hjYRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFRhhhjXRhM ubj)}(hinput_free_minorh]j)}(hinput_free_minorh]hinput_free_minor}(hjkRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjgRubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjFRhhhjXRhM ubjD)}(h(unsigned int minor)h]jJ)}(hunsigned int minorh](j )}(hunsignedh]hunsigned}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubj )}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjRubh)}(h h]h }(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRubj)}(hminorh]hminor}(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjRubah}(h]h ]h"]h$]h&]j,j-uh1jChjFRhhhjXRhM ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjBRhhhjXRhM ubah}(h]j=Rah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjXRhM hj?RhhubjC)}(hhh]jH)}(h"release previously allocated minorh]h"release previously allocated minor}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjRhhubah}(h]h ]h"]h$]h&]uh1jBhj?RhhhjXRhM ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjSjhjSjijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``unsigned int minor`` minor to be released **Description** This function releases previously allocated input minor so that it can be reused later.h](jH)}(h**Parameters**h]jw)}(hj Sh]h Parameters}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj Subah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubj)}(hhh]j)}(h,``unsigned int minor`` minor to be released h](j)}(h``unsigned int minor``h]j)}(hj*Sh]hunsigned int minor}(hj,ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Subah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj$Subj)}(hhh]jH)}(hminor to be releasedh]hminor to be released}(hjCShhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj?ShM hj@Subah}(h]h ]h"]h$]h&]uh1jhj$Subeh}(h]h ]h"]h$]h&]uh1jhj?ShM hj!Subah}(h]h ]h"]h$]h&]uh1jhjSubjH)}(h**Description**h]jw)}(hjeSh]h Description}(hjgShhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjcSubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubjH)}(hWThis function releases previously allocated input minor so that it can be reused later.h]hWThis function releases previously allocated input minor so that it can be reused later.}(hj{ShhhNhNubah}(h]h ]h"]h$]h&]uh1jGhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_ff_upload (C function)c.input_ff_uploadhNtauh1hhhhhhNhNubh)}(hhh](h)}(hXint input_ff_upload (struct input_dev *dev, struct ff_effect *effect, struct file *file)h]h)}(hWint input_ff_upload(struct input_dev *dev, struct ff_effect *effect, struct file *file)h](j )}(hinth]hint}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjShhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chK[ubh)}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjShhhjShK[ubj)}(hinput_ff_uploadh]j)}(hinput_ff_uploadh]hinput_ff_upload}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjShhhjShK[ubjD)}(hD(struct input_dev *dev, struct ff_effect *effect, struct file *file)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjShhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjSubh)}(h h]h }(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjSubh)}(hhh]j)}(h input_devh]h input_dev}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjTmodnameN classnameNjY j\ )}j_ ]j)}jjSsbc.input_ff_uploadasbuh1hhjSubh)}(h h]h }(hj%ThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjSubj)}(hjh]h*}(hj3ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hdevh]hdev}(hj@ThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjSubjJ)}(hstruct ff_effect *effecth](h)}(hhh]hstruct}(hjYThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjUTubh)}(h h]h }(hjfThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjUTubh)}(hhh]j)}(h ff_effecth]h ff_effect}(hjwThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjtTubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjyTmodnameN classnameNjY j\ )}j_ ]j!Tc.input_ff_uploadasbuh1hhjUTubh)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjUTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUTubj)}(heffecth]heffect}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUTubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjSubjJ)}(hstruct file *fileh](h)}(hhh]hstruct}(hjThhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjTubh)}(h h]h }(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubh)}(hhh]j)}(hfileh]hfile}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjTmodnameN classnameNjY j\ )}j_ ]j!Tc.input_ff_uploadasbuh1hhjTubh)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjTubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hfileh]hfile}(hj UhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjSubeh}(h]h ]h"]h$]h&]j,j-uh1jChjShhhjShK[ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjShhhjShK[ubah}(h]jSah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjShK[hjShhubjC)}(hhh]jH)}(h(upload effect into force-feedback deviceh]h(upload effect into force-feedback device}(hjJUhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKVhjGUhhubah}(h]h ]h"]h$]h&]uh1jBhjShhhjShK[ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjbUjhjbUjijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` input device ``struct ff_effect *effect`` effect to be uploaded ``struct file *file`` owner of the effecth](jH)}(h**Parameters**h]jw)}(hjlUh]h Parameters}(hjnUhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjjUubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKZhjfUubj)}(hhh](j)}(h'``struct input_dev *dev`` input device h](j)}(h``struct input_dev *dev``h]j)}(hjUh]hstruct input_dev *dev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKWhjUubj)}(hhh]jH)}(h input deviceh]h input device}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjUhKWhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKWhjUubj)}(h3``struct ff_effect *effect`` effect to be uploaded h](j)}(h``struct ff_effect *effect``h]j)}(hjUh]hstruct ff_effect *effect}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKXhjUubj)}(hhh]jH)}(heffect to be uploadedh]heffect to be uploaded}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjUhKXhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjUhKXhjUubj)}(h)``struct file *file`` owner of the effecth](j)}(h``struct file *file``h]j)}(hjUh]hstruct file *file}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKZhjUubj)}(hhh]jH)}(howner of the effecth]howner of the effect}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKYhjVubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjVhKZhjUubeh}(h]h ]h"]h$]h&]uh1jhjfUubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_ff_erase (C function)c.input_ff_erasehNtauh1hhhhhhNhNubh)}(hhh](h)}(hLint input_ff_erase (struct input_dev *dev, int effect_id, struct file *file)h]h)}(hKint input_ff_erase(struct input_dev *dev, int effect_id, struct file *file)h](j )}(hinth]hint}(hjWVhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjSVhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKubh)}(h h]h }(hjfVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjSVhhhjeVhKubj)}(hinput_ff_eraseh]j)}(hinput_ff_eraseh]hinput_ff_erase}(hjxVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjtVubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjSVhhhjeVhKubjD)}(h9(struct input_dev *dev, int effect_id, struct file *file)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjVhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjVubh)}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjVubh)}(hhh]j)}(h input_devh]h input_dev}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjVmodnameN classnameNjY j\ )}j_ ]j)}jjzVsbc.input_ff_eraseasbuh1hhjVubh)}(h h]h }(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(hdevh]hdev}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjVubjJ)}(h int effect_idh](j )}(hinth]hint}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjWubh)}(h h]h }(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubj)}(h effect_idh]h effect_id}(hj"WhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjVubjJ)}(hstruct file *fileh](h)}(hhh]hstruct}(hj;WhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj7Wubh)}(h h]h }(hjHWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7Wubh)}(hhh]j)}(hfileh]hfile}(hjYWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVWubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj[WmodnameN classnameNjY j\ )}j_ ]jVc.input_ff_eraseasbuh1hhj7Wubh)}(h h]h }(hjwWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7Wubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Wubj)}(hfileh]hfile}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7Wubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjVubeh}(h]h ]h"]h$]h&]j,j-uh1jChjSVhhhjeVhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjOVhhhjeVhKubah}(h]jJVah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjeVhKhjLVhhubjC)}(hhh]jH)}(h)erase a force-feedback effect from deviceh]h)erase a force-feedback effect from device}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjWhhubah}(h]h ]h"]h$]h&]uh1jBhjLVhhhjeVhKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjWjhjWjijjjkuh1hhhhhhNhNubjm)}(hXw**Parameters** ``struct input_dev *dev`` input device to erase effect from ``int effect_id`` id of the effect to be erased ``struct file *file`` purported owner of the request **Description** This function erases a force-feedback effect from specified device. The effect will only be erased if it was uploaded through the same file handle that is requesting erase.h](jH)}(h**Parameters**h]jw)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjWubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjWubj)}(hhh](j)}(h<``struct input_dev *dev`` input device to erase effect from h](j)}(h``struct input_dev *dev``h]j)}(hjWh]hstruct input_dev *dev}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjWubj)}(hhh]jH)}(h!input device to erase effect fromh]h!input device to erase effect from}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjXhKhjXubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjWubj)}(h0``int effect_id`` id of the effect to be erased h](j)}(h``int effect_id``h]j)}(hj6Xh]h int effect_id}(hj8XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Xubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj0Xubj)}(hhh]jH)}(hid of the effect to be erasedh]hid of the effect to be erased}(hjOXhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjKXhKhjLXubah}(h]h ]h"]h$]h&]uh1jhj0Xubeh}(h]h ]h"]h$]h&]uh1jhjKXhKhjWubj)}(h5``struct file *file`` purported owner of the request h](j)}(h``struct file *file``h]j)}(hjoXh]hstruct file *file}(hjqXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmXubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjiXubj)}(hhh]jH)}(hpurported owner of the requesth]hpurported owner of the request}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjXhKhjXubah}(h]h ]h"]h$]h&]uh1jhjiXubeh}(h]h ]h"]h$]h&]uh1jhjXhKhjWubeh}(h]h ]h"]h$]h&]uh1jhjWubjH)}(h**Description**h]jw)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjXubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjWubjH)}(hThis function erases a force-feedback effect from specified device. The effect will only be erased if it was uploaded through the same file handle that is requesting erase.h]hThis function erases a force-feedback effect from specified device. The effect will only be erased if it was uploaded through the same file handle that is requesting erase.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_ff_event (C function)c.input_ff_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(h[int input_ff_event (struct input_dev *dev, unsigned int type, unsigned int code, int value)h]h)}(hZint input_ff_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j )}(hinth]hint}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjXhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjXhhhjXhKubj)}(hinput_ff_eventh]j)}(hinput_ff_eventh]hinput_ff_event}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj Yubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjXhhhjXhKubjD)}(hH(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj,YhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj(Yubh)}(h h]h }(hj9YhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(Yubh)}(hhh]j)}(h input_devh]h input_dev}(hjJYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGYubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjLYmodnameN classnameNjY j\ )}j_ ]j)}jjYsbc.input_ff_eventasbuh1hhj(Yubh)}(h h]h }(hjjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(Yubj)}(hjh]h*}(hjxYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Yubj)}(hdevh]hdev}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(Yubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj$YubjJ)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYubj )}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYubj)}(htypeh]htype}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj$YubjJ)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(h h]h }(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYubj )}(hinth]hint}(hj ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjYubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYubj)}(hcodeh]hcode}(hj'ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj$YubjJ)}(h int valueh](j )}(hinth]hint}(hj@ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjffbit** should be already set up before calling this function. Once ff device is created you need to setup its upload, erase, playback and other handlers before registering input deviceh](jH)}(h**Parameters**h]jw)}(hj\h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj\ubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj\ubj)}(hhh](j)}(hA``struct input_dev *dev`` input device supporting force-feedback h](j)}(h``struct input_dev *dev``h]j)}(hj]h]hstruct input_dev *dev}(hj ]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj]ubj)}(hhh]jH)}(h&input device supporting force-feedbackh]h&input device supporting force-feedback}(hj7]hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj3]hMhj4]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhj3]hMhj]ubj)}(hO``unsigned int max_effects`` maximum number of effects supported by the device h](j)}(h``unsigned int max_effects``h]j)}(hjW]h]hunsigned int max_effects}(hjY]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU]ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhjQ]ubj)}(hhh]jH)}(h1maximum number of effects supported by the deviceh]h1maximum number of effects supported by the device}(hjp]hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjl]hMhjm]ubah}(h]h ]h"]h$]h&]uh1jhjQ]ubeh}(h]h ]h"]h$]h&]uh1jhjl]hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj\ubjH)}(h**Description**h]jw)}(hj]h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj]ubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj\ubjH)}(hX@This function allocates all necessary memory for a force feedback portion of an input device and installs all default handlers. **dev->ffbit** should be already set up before calling this function. Once ff device is created you need to setup its upload, erase, playback and other handlers before registering input deviceh](hThis function allocates all necessary memory for a force feedback portion of an input device and installs all default handlers. }(hj]hhhNhNubjw)}(h**dev->ffbit**h]h dev->ffbit}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj]ubh should be already set up before calling this function. Once ff device is created you need to setup its upload, erase, playback and other handlers before registering input device}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_ff_destroy (C function)c.input_ff_destroyhNtauh1hhhhhhNhNubh)}(hhh](h)}(h-void input_ff_destroy (struct input_dev *dev)h]h)}(h,void input_ff_destroy(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj]hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMXubh)}(h h]h }(hj]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj]hhhj]hMXubj)}(hinput_ff_destroyh]j)}(hinput_ff_destroyh]hinput_ff_destroy}(hj ^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj]hhhj]hMXubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj&^hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj"^ubh)}(h h]h }(hj3^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"^ubh)}(hhh]j)}(h input_devh]h input_dev}(hjD^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjA^ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjF^modnameN classnameNjY j\ )}j_ ]j)}jj ^sbc.input_ff_destroyasbuh1hhj"^ubh)}(h h]h }(hjd^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"^ubj)}(hjh]h*}(hjr^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"^ubj)}(hdevh]hdev}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"^ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj^ubah}(h]h ]h"]h$]h&]j,j-uh1jChj]hhhj]hMXubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj]hhhj]hMXubah}(h]j]ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj]hMXhj]hhubjC)}(hhh]jH)}(h,frees force feedback portion of input deviceh]h,frees force feedback portion of input device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMQhj^hhubah}(h]h ]h"]h$]h&]uh1jBhj]hhhj]hMXubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj^jhj^jijjjkuh1hhhhhhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` input device supporting force feedback **Description** This function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.h](jH)}(h**Parameters**h]jw)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj^ubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMUhj^ubj)}(hhh]j)}(hA``struct input_dev *dev`` input device supporting force feedback h](j)}(h``struct input_dev *dev``h]j)}(hj^h]hstruct input_dev *dev}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMRhj^ubj)}(hhh]jH)}(h&input device supporting force feedbackh]h&input device supporting force feedback}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj^hMRhj_ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMRhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubjH)}(h**Description**h]jw)}(hj%_h]h Description}(hj'_hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj#_ubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMThj^ubjH)}(hThis function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.h]hThis function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.}(hj;_hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMThj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ$input_ff_create_memless (C function)c.input_ff_create_memlesshNtauh1hhhhhhNhNubh)}(hhh](h)}(hint input_ff_create_memless (struct input_dev *dev, void *data, int (*play_effect)(struct input_dev *, void *, struct ff_effect *))h]h)}(hint input_ff_create_memless(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))h](j )}(hinth]hint}(hjj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjf_hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMubh)}(h h]h }(hjy_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjf_hhhjx_hMubj)}(hinput_ff_create_memlessh]j)}(hinput_ff_create_memlessh]hinput_ff_create_memless}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjf_hhhjx_hMubjD)}(hd(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj_hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj_ubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_ubh)}(hhh]j)}(h input_devh]h input_dev}(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj_modnameN classnameNjY j\ )}j_ ]j)}jj_sbc.input_ff_create_memlessasbuh1hhj_ubh)}(h h]h }(hj_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hdevh]hdev}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj_ubjJ)}(h void *datah](j )}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj`ubh)}(h h]h }(hj'`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubj)}(hjh]h*}(hj5`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hdatah]hdata}(hjB`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj_ubjJ)}(h?int (*play_effect)(struct input_dev*, void*, struct ff_effect*)h](j )}(hinth]hint}(hj[`hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW`ubh)}(h h]h }(hji`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW`ubj)}(hjRJh]h(}(hjw`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubj)}(h play_effecth]h play_effect}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjW`ubj)}(hj{Jh]h)}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubj)}(hjRJh]h(}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubh)}(hhh]hstruct}(hj`hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW`ubh)}(h h]h }(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW`ubh)}(hhh]j)}(h input_devh]h input_dev}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj`modnameN classnameNjY j\ )}j_ ]j_c.input_ff_create_memlessasbuh1hhjW`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubj)}(hjJh]h,}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubh)}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW`ubj )}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjW`ubj)}(hjh]h*}(hj+ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubj)}(hjJh]h,}(hj8ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubh)}(h h]h }(hjEahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW`ubh)}(hhh]hstruct}(hjSahhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjW`ubh)}(h h]h }(hj`ahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjW`ubh)}(hhh]j)}(h ff_effecth]h ff_effect}(hjqahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnaubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjsamodnameN classnameNjY j\ )}j_ ]j_c.input_ff_create_memlessasbuh1hhjW`ubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubj)}(hj{Jh]h)}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW`ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj_ubeh}(h]h ]h"]h$]h&]j,j-uh1jChjf_hhhjx_hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjb_hhhjx_hMubah}(h]j]_ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjx_hMhj__hhubjC)}(hhh]jH)}(h'create memoryless force-feedback deviceh]h'create memoryless force-feedback device}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jGh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjahhubah}(h]h ]h"]h$]h&]uh1jBhj__hhhjx_hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjajhjajijjjkuh1hhhhhhNhNubjm)}(hX**Parameters** ``struct input_dev *dev`` input device supporting force-feedback ``void *data`` driver-specific data to be passed into **play_effect** ``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)`` driver-specific method for playing FF effecth](jH)}(h**Parameters**h]jw)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjaubah}(h]h ]h"]h$]h&]uh1jGh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjaubj)}(hhh](j)}(hA``struct input_dev *dev`` input device supporting force-feedback h](j)}(h``struct input_dev *dev``h]j)}(hjbh]hstruct input_dev *dev}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjbubj)}(hhh]jH)}(h&input device supporting force-feedbackh]h&input device supporting force-feedback}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjbhMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjaubj)}(hF``void *data`` driver-specific data to be passed into **play_effect** h](j)}(h``void *data``h]j)}(hj?bh]h void *data}(hjAbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=bubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhj9bubj)}(hhh]jH)}(h6driver-specific data to be passed into **play_effect**h](h'driver-specific data to be passed into }(hjXbhhhNhNubjw)}(h**play_effect**h]h play_effect}(hj`bhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjXbubeh}(h]h ]h"]h$]h&]uh1jGhjTbhMhjUbubah}(h]h ]h"]h$]h&]uh1jhj9bubeh}(h]h ]h"]h$]h&]uh1jhjTbhMhjaubj)}(hs``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)`` driver-specific method for playing FF effecth](j)}(hF``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)``h]j)}(hjbh]hBint (*play_effect)(struct input_dev *, void *, struct ff_effect *)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjbubj)}(hhh]jH)}(h,driver-specific method for playing FF effecth]h,driver-specific method for playing FF effect}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhhhhhNhNubeh}(h] input-coreah ]h"] input coreah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hMultitouch Libraryh]hMultitouch Library}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_mt_slot (C struct)c.input_mt_slothNtauh1hhjbhhhNhNubh)}(hhh](h)}(h input_mt_sloth]h)}(hstruct input_mt_sloth](h)}(hhh]hstruct}(hjbhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjbhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKubh)}(h h]h }(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbhhhjchKubj)}(h input_mt_sloth]j)}(hjbh]h input_mt_slot}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjcubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjbhhhjchKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjbhhhjchKubah}(h]jbah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjchKhjbhhubjC)}(hhh]jH)}(h(represents the state of an input MT sloth]h(represents the state of an input MT slot}(hj;chhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhj8chhubah}(h]h ]h"]h$]h&]uh1jBhjbhhhjchKubeh}(h]h ](jastructeh"]h$]h&]jfjajgjScjhjScjijjjkuh1hhhhjbhNhNubjm)}(hXW**Definition**:: struct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; }; **Members** ``abs`` holds current values of ABS_MT axes for this slot ``frame`` last frame at which input_mt_report_slot_state() was called ``key`` optional driver designation of this sloth](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hj_chhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj[cubh:}(hj[chhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjWcubj)}(htstruct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; };h]htstruct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; };}hjxcsbah}(h]h ]h"]h$]h&]j,j-uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjWcubjH)}(h **Members**h]jw)}(hjch]hMembers}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjcubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK"hjWcubj)}(hhh](j)}(h:``abs`` holds current values of ABS_MT axes for this slot h](j)}(h``abs``h]j)}(hjch]habs}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjcubj)}(hhh]jH)}(h1holds current values of ABS_MT axes for this sloth]h1holds current values of ABS_MT axes for this slot}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjchKhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKhjcubj)}(hF``frame`` last frame at which input_mt_report_slot_state() was called h](j)}(h ``frame``h]j)}(hjch]hframe}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjcubj)}(hhh]jH)}(h;last frame at which input_mt_report_slot_state() was calledh]h;last frame at which input_mt_report_slot_state() was called}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjchKhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhjchKhjcubj)}(h0``key`` optional driver designation of this sloth](j)}(h``key``h]j)}(hjdh]hkey}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjdubj)}(hhh]jH)}(h(optional driver designation of this sloth]h(optional driver designation of this slot}(hj3dhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhj0dubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhj/dhKhjcubeh}(h]h ]h"]h$]h&]uh1jhjWcubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_mt (C struct) c.input_mthNtauh1hhjbhhhNhNubh)}(hhh](h)}(hinput_mth]h)}(hstruct input_mth](h)}(hhh]hstruct}(hjtdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpdhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK ubh)}(h h]h }(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjpdhhhjdhK ubj)}(hinput_mth]j)}(hjndh]hinput_mt}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjdubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjpdhhhjdhK ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjldhhhjdhK ubah}(h]jgdah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjdhK hjidhhubjC)}(hhh]jH)}(hstate of tracked contactsh]hstate of tracked contacts}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK"hjdhhubah}(h]h ]h"]h$]h&]uh1jBhjidhhhjdhK ubeh}(h]h ](jastructeh"]h$]h&]jfjajgjdjhjdjijjjkuh1hhhhjbhNhNubjm)}(hXW**Definition**:: struct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[] ; }; **Members** ``trkid`` stores MT tracking ID for the next contact ``num_slots`` number of MT slots the device uses ``slot`` MT slot currently being transmitted ``flags`` input_mt operation flags ``frame`` increases every time input_mt_sync_frame() is called ``red`` reduced cost matrix for in-kernel tracking ``slots`` array of slots holding current values of tracked contactsh](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjdubh:}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK&hjdubj)}(hstruct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[] ; };h]hstruct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[] ; };}hjdsbah}(h]h ]h"]h$]h&]j,j-uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK(hjdubjH)}(h **Members**h]jw)}(hjeh]hMembers}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjeubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK2hjdubj)}(hhh](j)}(h5``trkid`` stores MT tracking ID for the next contact h](j)}(h ``trkid``h]j)}(hj#eh]htrkid}(hj%ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!eubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK$hjeubj)}(hhh]jH)}(h*stores MT tracking ID for the next contacth]h*stores MT tracking ID for the next contact}(hjfubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK)hj:fubj)}(hhh]jH)}(h*reduced cost matrix for in-kernel trackingh]h*reduced cost matrix for in-kernel tracking}(hjYfhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjUfhK)hjVfubah}(h]h ]h"]h$]h&]uh1jhj:fubeh}(h]h ]h"]h$]h&]uh1jhjUfhK)hjeubj)}(hC``slots`` array of slots holding current values of tracked contactsh](j)}(h ``slots``h]j)}(hjyfh]hslots}(hj{fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwfubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK)hjsfubj)}(hhh]jH)}(h9array of slots holding current values of tracked contactsh]h9array of slots holding current values of tracked contacts}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK*hjfubah}(h]h ]h"]h$]h&]uh1jhjsfubeh}(h]h ]h"]h$]h&]uh1jhjfhK)hjeubeh}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌinput_mt_pos (C struct)c.input_mt_poshNtauh1hhjbhhhNhNubh)}(hhh](h)}(h input_mt_posh]h)}(hstruct input_mt_posh](h)}(hhh]hstruct}(hjfhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjfhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK0ubh)}(h h]h }(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfhhhjfhK0ubj)}(h input_mt_posh]j)}(hjfh]h input_mt_pos}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjfubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjfhhhjfhK0ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjfhhhjfhK0ubah}(h]jfah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjfhK0hjfhhubjC)}(hhh]jH)}(hcontact positionh]hcontact position}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKshjghhubah}(h]h ]h"]h$]h&]uh1jBhjfhhhjfhK0ubeh}(h]h ](jastructeh"]h$]h&]jfjajgj-gjhj-gjijjjkuh1hhhhjbhNhNubjm)}(h**Definition**:: struct input_mt_pos { s16 x, y; }; **Members** ``x`` horizontal coordinate ``y`` vertical coordinateh](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hj9ghhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj5gubh:}(hj5ghhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKwhj1gubj)}(h&struct input_mt_pos { s16 x, y; };h]h&struct input_mt_pos { s16 x, y; };}hjRgsbah}(h]h ]h"]h$]h&]j,j-uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKyhj1gubjH)}(h **Members**h]jw)}(hjcgh]hMembers}(hjeghhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjagubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK}hj1gubj)}(hhh](j)}(h``x`` horizontal coordinate h](j)}(h``x``h]j)}(hjgh]hx}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKuhj|gubj)}(hhh]jH)}(hhorizontal coordinateh]hhorizontal coordinate}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjghKuhjgubah}(h]h ]h"]h$]h&]uh1jhj|gubeh}(h]h ]h"]h$]h&]uh1jhjghKuhjygubj)}(h``y`` vertical coordinateh](j)}(h``y``h]j)}(hjgh]hy}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKuhjgubj)}(hhh]jH)}(hvertical coordinateh]hvertical coordinate}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKvhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghKuhjygubeh}(h]h ]h"]h$]h&]uh1jhj1gubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ input_mt_init_slots (C function)c.input_mt_init_slotshNtauh1hhjbhhhNhNubh)}(hhh](h)}(h[int input_mt_init_slots (struct input_dev *dev, unsigned int num_slots, unsigned int flags)h]h)}(hZint input_mt_init_slots(struct input_dev *dev, unsigned int num_slots, unsigned int flags)h](j )}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK'ubh)}(h h]h }(hj$hhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhhj#hhK'ubj)}(hinput_mt_init_slotsh]j)}(hinput_mt_init_slotsh]hinput_mt_init_slots}(hj6hhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2hubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhhj#hhK'ubjD)}(hC(struct input_dev *dev, unsigned int num_slots, unsigned int flags)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjRhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjNhubh)}(h h]h }(hj_hhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjNhubh)}(hhh]j)}(h input_devh]h input_dev}(hjphhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmhubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjrhmodnameN classnameNjY j\ )}j_ ]j)}jj8hsbc.input_mt_init_slotsasbuh1hhjNhubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjNhubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhubj)}(hdevh]hdev}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjNhubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjJhubjJ)}(hunsigned int num_slotsh](j )}(hunsignedh]hunsigned}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhubj )}(hinth]hint}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhubj)}(h num_slotsh]h num_slots}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjJhubjJ)}(hunsigned int flagsh](j )}(hunsignedh]hunsigned}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(h h]h }(hj#ihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj )}(hinth]hint}(hj1ihhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiubh)}(h h]h }(hj?ihhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj)}(hflagsh]hflags}(hjMihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjJhubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhhj#hhK'ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj hhhhj#hhK'ubah}(h]jhah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj#hhK'hj hhhubjC)}(hhh]jH)}(hinitialize MT input slotsh]hinitialize MT input slots}(hjwihhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjtihhubah}(h]h ]h"]h$]h&]uh1jBhj hhhhj#hhK'ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjijhjijijjjkuh1hhhhjbhNhNubjm)}(hXe**Parameters** ``struct input_dev *dev`` input device supporting MT events and finger tracking ``unsigned int num_slots`` number of slots used by the device ``unsigned int flags`` mt tasks to handle in core **Description** This function allocates all necessary memory for MT slot handling in the input device, prepares the ABS_MT_SLOT and ABS_MT_TRACKING_ID events for use and sets up appropriate buffers. Depending on the flags set, it also performs pointer emulation and frame synchronization. May be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.h](jH)}(h**Parameters**h]jw)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjiubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjiubj)}(hhh](j)}(hP``struct input_dev *dev`` input device supporting MT events and finger tracking h](j)}(h``struct input_dev *dev``h]j)}(hjih]hstruct input_dev *dev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjiubj)}(hhh]jH)}(h5input device supporting MT events and finger trackingh]h5input device supporting MT events and finger tracking}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjihKhjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihKhjiubj)}(h>``unsigned int num_slots`` number of slots used by the device h](j)}(h``unsigned int num_slots``h]j)}(hjih]hunsigned int num_slots}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjiubj)}(hhh]jH)}(h"number of slots used by the deviceh]h"number of slots used by the device}(hj jhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjjhKhjjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjjhKhjiubj)}(h2``unsigned int flags`` mt tasks to handle in core h](j)}(h``unsigned int flags``h]j)}(hj*jh]hunsigned int flags}(hj,jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(jubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj$jubj)}(hhh]jH)}(hmt tasks to handle in coreh]hmt tasks to handle in core}(hjCjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj?jhKhj@jubah}(h]h ]h"]h$]h&]uh1jhj$jubeh}(h]h ]h"]h$]h&]uh1jhj?jhKhjiubeh}(h]h ]h"]h$]h&]uh1jhjiubjH)}(h**Description**h]jw)}(hjejh]h Description}(hjgjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjcjubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjiubjH)}(hXThis function allocates all necessary memory for MT slot handling in the input device, prepares the ABS_MT_SLOT and ABS_MT_TRACKING_ID events for use and sets up appropriate buffers. Depending on the flags set, it also performs pointer emulation and frame synchronization.h]hXThis function allocates all necessary memory for MT slot handling in the input device, prepares the ABS_MT_SLOT and ABS_MT_TRACKING_ID events for use and sets up appropriate buffers. Depending on the flags set, it also performs pointer emulation and frame synchronization.}(hj{jhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjiubjH)}(hiMay be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.h]hiMay be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK$hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ#input_mt_destroy_slots (C function)c.input_mt_destroy_slotshNtauh1hhjbhhhNhNubh)}(hhh](h)}(h3void input_mt_destroy_slots (struct input_dev *dev)h]h)}(h2void input_mt_destroy_slots(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKoubh)}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjhhhjjhKoubj)}(hinput_mt_destroy_slotsh]j)}(hinput_mt_destroy_slotsh]hinput_mt_destroy_slots}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjjhhhjjhKoubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjjubh)}(h h]h }(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjubh)}(hhh]j)}(h input_devh]h input_dev}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjkmodnameN classnameNjY j\ )}j_ ]j)}jjjsbc.input_mt_destroy_slotsasbuh1hhjjubh)}(h h]h }(hj4khhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjubj)}(hjh]h*}(hjBkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hdevh]hdev}(hjOkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjjubah}(h]h ]h"]h$]h&]j,j-uh1jChjjhhhjjhKoubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjjhhhjjhKoubah}(h]jjah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjjhKohjjhhubjC)}(hhh]jH)}(h&frees the MT slots of the input deviceh]h&frees the MT slots of the input device}(hjykhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKihjvkhhubah}(h]h ]h"]h$]h&]uh1jBhjjhhhjjhKoubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjkjhjkjijjjkuh1hhhhjbhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` input device with allocated MT slots **Description** This function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.h](jH)}(h**Parameters**h]jw)}(hjkh]h Parameters}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjkubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKmhjkubj)}(hhh]j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjkh]hstruct input_dev *dev}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKjhjkubj)}(hhh]jH)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjkhKjhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKjhjkubah}(h]h ]h"]h$]h&]uh1jhjkubjH)}(h**Description**h]jw)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjkubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKlhjkubjH)}(hThis function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.h]hThis function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.}(hj lhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKlhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'input_mt_report_slot_state (C function)c.input_mt_report_slot_statehNtauh1hhjbhhhNhNubh)}(hhh](h)}(h\bool input_mt_report_slot_state (struct input_dev *dev, unsigned int tool_type, bool active)h]h)}(h[bool input_mt_report_slot_state(struct input_dev *dev, unsigned int tool_type, bool active)h](j )}(hjPh]hbool}(hj:lhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj6lhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKubh)}(h h]h }(hjHlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6lhhhjGlhKubj)}(hinput_mt_report_slot_stateh]j)}(hinput_mt_report_slot_stateh]hinput_mt_report_slot_state}(hjZlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjVlubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj6lhhhjGlhKubjD)}(h<(struct input_dev *dev, unsigned int tool_type, bool active)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjvlhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrlubh)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrlubh)}(hhh]j)}(h input_devh]h input_dev}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjlmodnameN classnameNjY j\ )}j_ ]j)}jj\lsbc.input_mt_report_slot_stateasbuh1hhjrlubh)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrlubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrlubj)}(hdevh]hdev}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrlubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjnlubjJ)}(hunsigned int tool_typeh](j )}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubh)}(h h]h }(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubj )}(hinth]hint}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjlubh)}(h h]h }(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubj)}(h tool_typeh]h tool_type}(hj mhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjnlubjJ)}(h bool activeh](j )}(hjPh]hbool}(hj9mhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj5mubh)}(h h]h }(hjFmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5mubj)}(hactiveh]hactive}(hjTmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5mubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjnlubeh}(h]h ]h"]h$]h&]j,j-uh1jChj6lhhhjGlhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj2lhhhjGlhKubah}(h]j-lah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjGlhKhj/lhhubjC)}(hhh]jH)}(hreport contact stateh]hreport contact state}(hj~mhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKzhj{mhhubah}(h]h ]h"]h$]h&]uh1jBhj/lhhhjGlhKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjmjhjmjijjjkuh1hhhhjbhNhNubjm)}(hX**Parameters** ``struct input_dev *dev`` input device with allocated MT slots ``unsigned int tool_type`` the tool type to use in this slot ``bool active`` true if contact is active, false otherwise **Description** Reports a contact via ABS_MT_TRACKING_ID, and optionally ABS_MT_TOOL_TYPE. If active is true and the slot is currently inactive, or if the tool type is changed, a new tracking id is assigned to the slot. The tool type is only reported if the corresponding absbit field is set. Returns true if contact is active.h](jH)}(h**Parameters**h]jw)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjmubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK~hjmubj)}(hhh](j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjmh]hstruct input_dev *dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK{hjmubj)}(hhh]jH)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjmhK{hjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhK{hjmubj)}(h=``unsigned int tool_type`` the tool type to use in this slot h](j)}(h``unsigned int tool_type``h]j)}(hjmh]hunsigned int tool_type}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK|hjmubj)}(hhh]jH)}(h!the tool type to use in this sloth]h!the tool type to use in this slot}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj nhK|hjnubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj nhK|hjmubj)}(h;``bool active`` true if contact is active, false otherwise h](j)}(h``bool active``h]j)}(hj1nh]h bool active}(hj3nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/nubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK}hj+nubj)}(hhh]jH)}(h*true if contact is active, false otherwiseh]h*true if contact is active, false otherwise}(hjJnhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjFnhK}hjGnubah}(h]h ]h"]h$]h&]uh1jhj+nubeh}(h]h ]h"]h$]h&]uh1jhjFnhK}hjmubeh}(h]h ]h"]h$]h&]uh1jhjmubjH)}(h**Description**h]jw)}(hjlnh]h Description}(hjnnhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjjnubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmubjH)}(hXReports a contact via ABS_MT_TRACKING_ID, and optionally ABS_MT_TOOL_TYPE. If active is true and the slot is currently inactive, or if the tool type is changed, a new tracking id is assigned to the slot. The tool type is only reported if the corresponding absbit field is set.h]hXReports a contact via ABS_MT_TRACKING_ID, and optionally ABS_MT_TOOL_TYPE. If active is true and the slot is currently inactive, or if the tool type is changed, a new tracking id is assigned to the slot. The tool type is only reported if the corresponding absbit field is set.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmubjH)}(h"Returns true if contact is active.h]h"Returns true if contact is active.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ)input_mt_report_finger_count (C function)c.input_mt_report_finger_counthNtauh1hhjbhhhNhNubh)}(hhh](h)}(hDvoid input_mt_report_finger_count (struct input_dev *dev, int count)h]h)}(hCvoid input_mt_report_finger_count(struct input_dev *dev, int count)h](j )}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjnhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKubh)}(h h]h }(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnhhhjnhKubj)}(hinput_mt_report_finger_counth]j)}(hinput_mt_report_finger_counth]hinput_mt_report_finger_count}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjnhhhjnhKubjD)}(h"(struct input_dev *dev, int count)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjnhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjnubh)}(h h]h }(hj ohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubh)}(hhh]j)}(h input_devh]h input_dev}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjomodnameN classnameNjY j\ )}j_ ]j)}jjnsbc.input_mt_report_finger_countasbuh1hhjnubh)}(h h]h }(hj;ohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubj)}(hjh]h*}(hjIohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hdevh]hdev}(hjVohhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjnubjJ)}(h int counth](j )}(hinth]hint}(hjoohhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjkoubh)}(h h]h }(hj}ohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkoubj)}(hcounth]hcount}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjkoubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjnubeh}(h]h ]h"]h$]h&]j,j-uh1jChjnhhhjnhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjnhhhjnhKubah}(h]jnah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjnhKhjnhhubjC)}(hhh]jH)}(hreport contact counth]hreport contact count}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjohhubah}(h]h ]h"]h$]h&]uh1jBhjnhhhjnhKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjojhjojijjjkuh1hhhhjbhNhNubjm)}(hXU**Parameters** ``struct input_dev *dev`` input device with allocated MT slots ``int count`` the number of contacts **Description** Reports the contact count via BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP and BTN_TOOL_QUADTAP. The input core ensures only the KEY events already setup for this device will produce output.h](jH)}(h**Parameters**h]jw)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjoubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjoubj)}(hhh](j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjoh]hstruct input_dev *dev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjoubj)}(hhh]jH)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj phKhj pubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhj phKhjoubj)}(h%``int count`` the number of contacts h](j)}(h ``int count``h]j)}(hj/ph]h int count}(hj1phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-pubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj)pubj)}(hhh]jH)}(hthe number of contactsh]hthe number of contacts}(hjHphhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjDphKhjEpubah}(h]h ]h"]h$]h&]uh1jhj)pubeh}(h]h ]h"]h$]h&]uh1jhjDphKhjoubeh}(h]h ]h"]h$]h&]uh1jhjoubjH)}(h**Description**h]jw)}(hjjph]h Description}(hjlphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjhpubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjoubjH)}(hkReports the contact count via BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP and BTN_TOOL_QUADTAP.h]hkReports the contact count via BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP and BTN_TOOL_QUADTAP.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjoubjH)}(h]The input core ensures only the KEY events already setup for this device will produce output.h]h]The input core ensures only the KEY events already setup for this device will produce output.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.input_mt_report_pointer_emulation (C function)#c.input_mt_report_pointer_emulationhNtauh1hhjbhhhNhNubh)}(hhh](h)}(hNvoid input_mt_report_pointer_emulation (struct input_dev *dev, bool use_count)h]h)}(hMvoid input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count)h](j )}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjphhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKubh)}(h h]h }(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjphhhjphKubj)}(h!input_mt_report_pointer_emulationh]j)}(h!input_mt_report_pointer_emulationh]h!input_mt_report_pointer_emulation}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjpubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjphhhjphKubjD)}(h'(struct input_dev *dev, bool use_count)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjphhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjpubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjpubh)}(hhh]j)}(h input_devh]h input_dev}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjqmodnameN classnameNjY j\ )}j_ ]j)}jjpsb#c.input_mt_report_pointer_emulationasbuh1hhjpubh)}(h h]h }(hj9qhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjpubj)}(hjh]h*}(hjGqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubj)}(hdevh]hdev}(hjTqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjpubjJ)}(hbool use_counth](j )}(hjPh]hbool}(hjmqhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjiqubh)}(h h]h }(hjzqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiqubj)}(h use_counth]h use_count}(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiqubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjpubeh}(h]h ]h"]h$]h&]j,j-uh1jChjphhhjphKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjphhhjphKubah}(h]jpah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjphKhjphhubjC)}(hhh]jH)}(hcommon pointer emulationh]hcommon pointer emulation}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjqhhubah}(h]h ]h"]h$]h&]uh1jBhjphhhjphKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjqjhjqjijjjkuh1hhhhjbhNhNubjm)}(hX**Parameters** ``struct input_dev *dev`` input device with allocated MT slots ``bool use_count`` report number of active contacts as finger count **Description** Performs legacy pointer emulation via BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE. Touchpad finger count is emulated if use_count is true. The input core ensures only the KEY and ABS axes already setup for this device will produce output.h](jH)}(h**Parameters**h]jw)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjqubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjqubj)}(hhh](j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjqh]hstruct input_dev *dev}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjqubj)}(hhh]jH)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hj rhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjrhKhj rubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjrhKhjqubj)}(hD``bool use_count`` report number of active contacts as finger count h](j)}(h``bool use_count``h]j)}(hj,rh]hbool use_count}(hj.rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*rubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj&rubj)}(hhh]jH)}(h0report number of active contacts as finger counth]h0report number of active contacts as finger count}(hjErhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjArhKhjBrubah}(h]h ]h"]h$]h&]uh1jhj&rubeh}(h]h ]h"]h$]h&]uh1jhjArhKhjqubeh}(h]h ]h"]h$]h&]uh1jhjqubjH)}(h**Description**h]jw)}(hjgrh]h Description}(hjirhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjerubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjqubjH)}(hPerforms legacy pointer emulation via BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE. Touchpad finger count is emulated if use_count is true.h]hPerforms legacy pointer emulation via BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE. Touchpad finger count is emulated if use_count is true.}(hj}rhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjqubjH)}(hcThe input core ensures only the KEY and ABS axes already setup for this device will produce output.h]hcThe input core ensures only the KEY and ABS axes already setup for this device will produce output.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ!input_mt_drop_unused (C function)c.input_mt_drop_unusedhNtauh1hhjbhhhNhNubh)}(hhh](h)}(h1void input_mt_drop_unused (struct input_dev *dev)h]h)}(h0void input_mt_drop_unused(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjrhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMubh)}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrhhhjrhMubj)}(hinput_mt_drop_unusedh]j)}(hinput_mt_drop_unusedh]hinput_mt_drop_unused}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjrhhhjrhMubjD)}(h(struct input_dev *dev)h]jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjrhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjrubh)}(h h]h }(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubh)}(hhh]j)}(h input_devh]h input_dev}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjsmodnameN classnameNjY j\ )}j_ ]j)}jjrsbc.input_mt_drop_unusedasbuh1hhjrubh)}(h h]h }(hj6shhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjrubj)}(hjh]h*}(hjDshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hdevh]hdev}(hjQshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjrubah}(h]h ]h"]h$]h&]j,j-uh1jChjrhhhjrhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjrhhhjrhMubah}(h]jrah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjrhMhjrhhubjC)}(hhh]jH)}(h'Inactivate slots not seen in this frameh]h'Inactivate slots not seen in this frame}(hj{shhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjxshhubah}(h]h ]h"]h$]h&]uh1jBhjrhhhjrhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjsjhjsjijjjkuh1hhhhjbhNhNubjm)}(h**Parameters** ``struct input_dev *dev`` input device with allocated MT slots **Description** Lift all slots not seen since the last call to this function.h](jH)}(h**Parameters**h]jw)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjsubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjsubj)}(hhh]j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjsh]hstruct input_dev *dev}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjsubj)}(hhh]jH)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshMhjsubah}(h]h ]h"]h$]h&]uh1jhjsubjH)}(h**Description**h]jw)}(hjsh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjsubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjsubjH)}(h=Lift all slots not seen since the last call to this function.h]h=Lift all slots not seen since the last call to this function.}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ input_mt_sync_frame (C function)c.input_mt_sync_framehNtauh1hhjbhhhNhNubh)}(hhh](h)}(h0void input_mt_sync_frame (struct input_dev *dev)h]h)}(h/void input_mt_sync_frame(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hjReturns zero on success, or negative error in case of failure.h]h>Returns zero on success, or negative error in case of failure.}(hjHyhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjbhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ%input_mt_get_slot_by_key (C function)c.input_mt_get_slot_by_keyhNtauh1hhjbhhhNhNubh)}(hhh](h)}(h=int input_mt_get_slot_by_key (struct input_dev *dev, int key)h]h)}(h|h]hkeymap}(hj@|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<|ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhj8|ubj)}(hhh]jH)}(hNpointer to array of uint32 values encoded with KEY() macro representing keymaph]hNpointer to array of uint32 values encoded with KEY() macro representing keymap}(hjW|hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjT|ubah}(h]h ]h"]h$]h&]uh1jhj8|ubeh}(h]h ]h"]h$]h&]uh1jhjS|hKhj5|ubj)}(h>``keymap_size`` number of entries (initialized) in this keymaph](j)}(h``keymap_size``h]j)}(hjx|h]h keymap_size}(hjz|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv|ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjr|ubj)}(hhh]jH)}(h.number of entries (initialized) in this keymaph]h.number of entries (initialized) in this keymap}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhj|ubah}(h]h ]h"]h$]h&]uh1jhjr|ubeh}(h]h ]h"]h$]h&]uh1jhj|hKhj5|ubeh}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjd{hhhj{hNubjH)}(h**Description**h]jw)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj|ubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjd{hhubjH)}(hThis structure is supposed to be used by platform code to supply keymaps to drivers that implement matrix-like keypads/keyboards.h]hThis structure is supposed to be used by platform code to supply keymaps to drivers that implement matrix-like keypads/keyboards.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjd{hhubeh}(h]matrix-keyboards-keypadsah ]h"]matrix keyboards/keypadsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSparse keymap supporth]hSparse keymap support}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hhhhhK#ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌkey_entry (C struct) c.key_entryhNtauh1hhj|hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhNubh)}(hhh](h)}(h key_entryh]h)}(hstruct key_entryh](h)}(hhh]hstruct}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj}hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKubh)}(h h]h }(hj!}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj}hhhj }hKubj)}(h key_entryh]j)}(hj }h]h key_entry}(hj3}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/}ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj}hhhj }hKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj }hhhj }hKubah}(h]j}ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj }hKhj}hhubjC)}(hhh]jH)}(h%keymap entry for use in sparse keymaph]h%keymap entry for use in sparse keymap}(hjU}hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjR}hhubah}(h]h ]h"]h$]h&]uh1jBhj}hhhj }hKubeh}(h]h ](jastructeh"]h$]h&]jfjajgjm}jhjm}jijjjkuh1hhhhj|hj}hNubjm)}(hX**Definition**:: struct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; }; **Members** ``type`` Type of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions. ``code`` Device-specific data identifying the button/switch ``{unnamed_union}`` anonymous ``keycode`` KEY_* code assigned to a key/button ``sw`` struct with code/value used by KE_SW and KE_VSW ``sw.code`` SW_* code assigned to a switch ``sw.value`` Value that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hjy}hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhju}ubh:}(hju}hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjq}ubj)}(hstruct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; };h]hstruct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; };}hj}sbah}(h]h ]h"]h$]h&]j,j-uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjq}ubjH)}(h **Members**h]jw)}(hj}h]hMembers}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj}ubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhK#hjq}ubj)}(hhh](j)}(h``type`` Type of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions. h](j)}(h``type``h]j)}(hj}h]htype}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj}ubj)}(hhh]jH)}(hType of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions.h]hType of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj}ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj}ubj)}(h<``code`` Device-specific data identifying the button/switch h](j)}(h``code``h]j)}(hj}h]hcode}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj}ubj)}(hhh]jH)}(h2Device-specific data identifying the button/switchh]h2Device-specific data identifying the button/switch}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj}ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hj5~h]h{unnamed_union}}(hj7~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3~ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj/~ubj)}(hhh]jH)}(h anonymoush]h anonymous}(hjN~hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjJ~hKhjK~ubah}(h]h ]h"]h$]h&]uh1jhj/~ubeh}(h]h ]h"]h$]h&]uh1jhjJ~hKhj}ubj)}(h0``keycode`` KEY_* code assigned to a key/button h](j)}(h ``keycode``h]j)}(hjn~h]hkeycode}(hjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl~ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjh~ubj)}(hhh]jH)}(h#KEY_* code assigned to a key/buttonh]h#KEY_* code assigned to a key/button}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1jhjh~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj}ubj)}(h7``sw`` struct with code/value used by KE_SW and KE_VSW h](j)}(h``sw``h]j)}(hj~h]hsw}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj~ubj)}(hhh]jH)}(h/struct with code/value used by KE_SW and KE_VSWh]h/struct with code/value used by KE_SW and KE_VSW}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj}ubj)}(h+``sw.code`` SW_* code assigned to a switch h](j)}(h ``sw.code``h]j)}(hj~h]hsw.code}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj~ubj)}(hhh]jH)}(hSW_* code assigned to a switchh]hSW_* code assigned to a switch}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj~hKhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hKhj}ubj)}(h``sw.value`` Value that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h](j)}(h ``sw.value``h]j)}(hjh]hsw.value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj)}(hhh]jH)}(hValue that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h]hValue that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj}ubeh}(h]h ]h"]h$]h&]uh1jhjq}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhj|hhhj}hNubjH)}(h**Description**h]jw)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjZubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj|hhubjH)}(hThis structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.h]hThis structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj|hhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ.sparse_keymap_entry_from_scancode (C function)#c.sparse_keymap_entry_from_scancodehNtauh1hhj|hhhNhNubh)}(hhh](h)}(h_struct key_entry * sparse_keymap_entry_from_scancode (struct input_dev *dev, unsigned int code)h]h)}(h]struct key_entry *sparse_keymap_entry_from_scancode(struct input_dev *dev, unsigned int code)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK=ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK=ubh)}(hhh]j)}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}j!sparse_keymap_entry_from_scancodesb#c.sparse_keymap_entry_from_scancodeasbuh1hhjhhhjhK=ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhK=ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK=ubj)}(h!sparse_keymap_entry_from_scancodeh]j)}(hjh]h!sparse_keymap_entry_from_scancode}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhK=ubjD)}(h*(struct input_dev *dev, unsigned int code)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_devh]h input_dev}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj4modnameN classnameNjY j\ )}j_ ]j#c.sparse_keymap_entry_from_scancodeasbuh1hhjubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj ubjJ)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj ubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhK=ubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhK=ubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhK=hjhhubjC)}(hhh]jH)}(hperform sparse keymap lookuph]hperform sparse keymap lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK6hjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhK=ubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhj|hNhNubjm)}(h**Parameters** ``struct input_dev *dev`` Input device using sparse keymap ``unsigned int code`` Scan code **Description** This function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK:hjubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hj'h]hstruct input_dev *dev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK7hj!ubj)}(hhh]jH)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj<hK7hj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hK7hjubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hj`h]hunsigned int code}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK8hjZubj)}(hhh]jH)}(h Scan codeh]h Scan code}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjuhK8hjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhK8hjubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK:hjubjH)}(hvThis function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](h!This function is used to perform }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjh]hstruct key_entry}(hjhhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j] ja key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK:hjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhj؁hK:hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhj|hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ-sparse_keymap_entry_from_keycode (C function)"c.sparse_keymap_entry_from_keycodehNtauh1hhj|hhhNhNubh)}(hhh](h)}(hastruct key_entry * sparse_keymap_entry_from_keycode (struct input_dev *dev, unsigned int keycode)h]h)}(h_struct key_entry *sparse_keymap_entry_from_keycode(struct input_dev *dev, unsigned int keycode)h](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKRubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKRubh)}(hhh]j)}(h key_entryh]h key_entry}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj$modnameN classnameNjY j\ )}j_ ]j)}j sparse_keymap_entry_from_keycodesb"c.sparse_keymap_entry_from_keycodeasbuh1hhjhhhjhKRubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKRubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKRubj)}(h sparse_keymap_entry_from_keycodeh]j)}(hj@h]h sparse_keymap_entry_from_keycode}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhKRubjD)}(h-(struct input_dev *dev, unsigned int keycode)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hj}hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjyubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubh)}(hhh]j)}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j>"c.sparse_keymap_entry_from_keycodeasbuh1hhjyubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyubj)}(hjh]h*}(hjǂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hdevh]hdev}(hjԂhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjuubjJ)}(hunsigned int keycodeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hkeycodeh]hkeycode}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjuubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhKRubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhKRubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhKRhjhhubjC)}(hhh]jH)}(hperform sparse keymap lookuph]hperform sparse keymap lookup}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKKhjLhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKRubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjgjhjgjijjjkuh1hhhhj|hNhNubjm)}(h**Parameters** ``struct input_dev *dev`` Input device using sparse keymap ``unsigned int keycode`` Key code **Description** This function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](jH)}(h**Parameters**h]jw)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjoubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKOhjkubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKLhjubj)}(hhh]jH)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKLhjubj)}(h"``unsigned int keycode`` Key code h](j)}(h``unsigned int keycode``h]j)}(hjɃh]hunsigned int keycode}(hj˃hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjǃubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKMhjÃubj)}(hhh]jH)}(hKey codeh]hKey code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjރhKMhj߃ubah}(h]h ]h"]h$]h&]uh1jhjÃubeh}(h]h ]h"]h$]h&]uh1jhjރhKMhjubeh}(h]h ]h"]h$]h&]uh1jhjkubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKOhjkubjH)}(hvThis function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](h!This function is used to perform }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hj$h]hstruct key_entry}(hj&hhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j] ja key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKOhjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhjAhKOhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhj|hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ sparse_keymap_setup (C function)c.sparse_keymap_setuphNtauh1hhj|hhhNhNubh)}(hhh](h)}(hint sparse_keymap_setup (struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev *, struct key_entry *))h]h)}(hint sparse_keymap_setup(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))h](j )}(hinth]hint}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKubh)}(h h]h }(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhhjzhKubj)}(hsparse_keymap_setuph]j)}(hsparse_keymap_setuph]hsparse_keymap_setup}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhhjzhKubjD)}(hk(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_devh]h input_dev}(hjDŽhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjĄubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjɄmodnameN classnameNjY j\ )}j_ ]j)}jjsbc.sparse_keymap_setupasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hconst struct key_entry *keymaph](h)}(hjk$h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hj6hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h key_entryh]h key_entry}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjVmodnameN classnameNjY j\ )}j_ ]jc.sparse_keymap_setupasbuh1hhjubh)}(h h]h }(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkeymaph]hkeymap}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h2int (*setup)(struct input_dev*, struct key_entry*)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjRJh]h(}(hj…hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjυhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsetuph]hsetup}(hj܅hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubj)}(hj{Jh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjRJh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_devh]h input_dev}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj$modnameN classnameNjY j\ )}j_ ]jc.sparse_keymap_setupasbuh1hhjubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjJh]h,}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(h h]h }(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]jc.sparse_keymap_setupasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj{Jh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhhjzhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjdhhhjzhKubah}(h]j_ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjzhKhjahhubjC)}(hhh]jH)}(h(set up sparse keymap for an input deviceh]h(set up sparse keymap for an input device}(hjچhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj׆hhubah}(h]h ]h"]h$]h&]uh1jBhjahhhjzhKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhj|hNhNubjm)}(hXC**Parameters** ``struct input_dev *dev`` Input device ``const struct key_entry *keymap`` Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entry ``int (*setup)(struct input_dev *, struct key_entry *)`` Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL`` **Description** The function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh](j)}(h'``struct input_dev *dev`` Input device h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]jH)}(h Input deviceh]h Input device}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjubj)}(h``const struct key_entry *keymap`` Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entry h](j)}(h"``const struct key_entry *keymap``h]j)}(hjTh]hconst struct key_entry *keymap}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjNubj)}(hhh]jH)}(h[Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entryh](hKeymap in form of array of }(hjmhhhNhNubh)}(h:c:type:`key_entry`h]j)}(hjwh]h key_entry}(hjyhhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j] ja key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjmubh structures ending with }(hjmhhhNhNubj)}(h ``KE_END``h]hKE_END}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh type entry}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhjhKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjubj)}(h``int (*setup)(struct input_dev *, struct key_entry *)`` Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL`` h](j)}(h8``int (*setup)(struct input_dev *, struct key_entry *)``h]j)}(hjÇh]h4int (*setup)(struct input_dev *, struct key_entry *)}(hjŇhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]jH)}(h_Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL``h](hYFunction that can be used to adjust keymap entries depending on device’s needs, may be }(hj܇hhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj܇ubeh}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjهubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj؇hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubjH)}(hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.h]hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhj|hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'sparse_keymap_report_entry (C function)c.sparse_keymap_report_entryhNtauh1hhj|hhhNhNubh)}(hhh](h)}(hyvoid sparse_keymap_report_entry (struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h]h)}(hxvoid sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h](j )}(hvoidh]hvoid}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjNhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKubh)}(h h]h }(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjNhhhj`hKubj)}(hsparse_keymap_report_entryh]j)}(hsparse_keymap_report_entryh]hsparse_keymap_report_entry}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjNhhhj`hKubjD)}(hY(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jjusbc.sparse_keymap_report_entryasbuh1hhjubh)}(h h]h }(hj͈hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjۈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hconst struct key_entry *keh](h)}(hjk$h]hconst}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h key_entryh]h key_entry}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj<modnameN classnameNjY j\ )}j_ ]jɈc.sparse_keymap_report_entryasbuh1hhjubh)}(h h]h }(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hkeh]hke}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int valueh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hvalueh]hvalue}(hjĉhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hbool autoreleaseh](j )}(hjPh]hbool}(hj݉hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjىubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjىubj)}(h autoreleaseh]h autorelease}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjىubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjNhhhj`hKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjJhhhj`hKubah}(h]jEah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj`hKhjGhhubjC)}(hhh]jH)}(h-report event corresponding to given key entryh]h-report event corresponding to given key entry}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjhhubah}(h]h ]h"]h$]h&]uh1jBhjGhhhj`hKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj:jhj:jijjjkuh1hhhhj|hNhNubjm)}(hX **Parameters** ``struct input_dev *dev`` Input device for which event should be reported ``const struct key_entry *ke`` key entry describing event ``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) ``bool autorelease`` Signals whether release event should be emitted for ``KE_KEY`` entries right after reporting press event, ignored by all other entries **Description** This function is used to report input event described by given :c:type:`struct key_entry `.h](jH)}(h**Parameters**h]jw)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjBubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj>ubj)}(hhh](j)}(hJ``struct input_dev *dev`` Input device for which event should be reported h](j)}(h``struct input_dev *dev``h]j)}(hjch]hstruct input_dev *dev}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj]ubj)}(hhh]jH)}(h/Input device for which event should be reportedh]h/Input device for which event should be reported}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjZubj)}(h:``const struct key_entry *ke`` key entry describing event h](j)}(h``const struct key_entry *ke``h]j)}(hjh]hconst struct key_entry *ke}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]jH)}(hkey entry describing eventh]hkey entry describing event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjՊh]hunsigned int value}(hj׊hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjӊubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjϊubj)}(hhh]jH)}(hubjH)}(h**Description**h]jw)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjlubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj>ubjH)}(hfThis function is used to report input event described by given :c:type:`struct key_entry `.h](h?This function is used to report input event described by given }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjh]hstruct key_entry}(hjhhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j] ja key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhjhKhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhj|hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ'sparse_keymap_report_event (C function)c.sparse_keymap_report_eventhNtauh1hhj|hhhNhNubh)}(hhh](h)}(hpbool sparse_keymap_report_event (struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h]h)}(hobool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h](j )}(hjPh]hbool}(hj֋hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjҋhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjҋhhhjhMubj)}(hsparse_keymap_report_eventh]j)}(hsparse_keymap_report_eventh]hsparse_keymap_report_event}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjҋhhhjhMubjD)}(hP(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h](jJ)}(hstruct input_dev *devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(h input_devh]h input_dev}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj2modnameN classnameNjY j\ )}j_ ]j)}jjsbc.sparse_keymap_report_eventasbuh1hhjubh)}(h h]h }(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdevh]hdev}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj ubjJ)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj ubjJ)}(hunsigned int valueh](j )}(hunsignedh]hunsigned}(hjՌhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjьubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjьubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjьubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjьubj)}(hvalueh]hvalue}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjьubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj ubjJ)}(hbool autoreleaseh](j )}(hjPh]hbool}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj"ubh)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubj)}(h autoreleaseh]h autorelease}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj ubeh}(h]h ]h"]h$]h&]j,j-uh1jChjҋhhhjhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hj΋hhhjhMubah}(h]jɋah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMhjˋhhubjC)}(hhh]jH)}(h,report event corresponding to given scancodeh]h,report event corresponding to given scancode}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jBhjˋhhhjhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhj|hNhNubjm)}(hX-**Parameters** ``struct input_dev *dev`` Input device using sparse keymap ``unsigned int code`` Scan code ``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) ``bool autorelease`` Signals whether release event should be emitted for ``KE_KEY`` entries right after reporting press event, ignored by all other entries **Description** This function is used to perform lookup in an input device using sparse keymap and report corresponding event. Returns ``true`` if lookup was successful and ``false`` otherwise.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]jH)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjōhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hjh]hunsigned int code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjߍubj)}(hhh]jH)}(h Scan codeh]h Scan code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjߍubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjh]hunsigned int value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]jH)}(h`) of the received data byte ``receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](jH)}(h**Definition**::h](jw)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjubj)}(hXstruct ps2dev { struct serio *serio; struct mutex cmd_mutex; wait_queue_head_t wait; unsigned long flags; u8 cmdbuf[8]; u8 cmdcnt; u8 nak; ps2_pre_receive_handler_t pre_receive_handler; ps2_receive_handler_t receive_handler; };h]hXstruct ps2dev { struct serio *serio; struct mutex cmd_mutex; wait_queue_head_t wait; unsigned long flags; u8 cmdbuf[8]; u8 cmdcnt; u8 nak; ps2_pre_receive_handler_t pre_receive_handler; ps2_receive_handler_t receive_handler; };}hjsbah}(h]h ]h"]h$]h&]j,j-uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjubjH)}(h **Members**h]jw)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK5hjubj)}(hhh](j)}(h/``serio`` a serio port used by the PS/2 device h](j)}(h ``serio``h]j)}(hj8h]hserio}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK%hj2ubj)}(hhh]jH)}(h$a serio port used by the PS/2 deviceh]h$a serio port used by the PS/2 device}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjMhK%hjNubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhjMhK%hj/ubj)}(hL``cmd_mutex`` a mutex ensuring that only one command is executing at a time h](j)}(h ``cmd_mutex``h]j)}(hjqh]h cmd_mutex}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK&hjkubj)}(hhh]jH)}(h=a mutex ensuring that only one command is executing at a timeh]h=a mutex ensuring that only one command is executing at a time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjhK&hj/ubj)}(hP``wait`` a waitqueue used to signal completion from the serio interrupt handler h](j)}(h``wait``h]j)}(hjh]hwait}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjubj)}(hhh]jH)}(hFa waitqueue used to signal completion from the serio interrupt handlerh]hFa waitqueue used to signal completion from the serio interrupt handler}(hjÑhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK'hj/ubj)}(hM``flags`` various internal flags indicating stages of PS/2 command execution h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK(hjݑubj)}(hhh]jH)}(hBvarious internal flags indicating stages of PS/2 command executionh]hBvarious internal flags indicating stages of PS/2 command execution}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhK(hjubah}(h]h ]h"]h$]h&]uh1jhjݑubeh}(h]h ]h"]h$]h&]uh1jhjhK(hj/ubj)}(h+``cmdbuf`` buffer holding command response h](j)}(h ``cmdbuf``h]j)}(hjh]hcmdbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjubj)}(hhh]jH)}(hbuffer holding command responseh]hbuffer holding command response}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj1hK)hj2ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj1hK)hj/ubj)}(h?``cmdcnt`` outstanding number of bytes of the command response h](j)}(h ``cmdcnt``h]j)}(hjUh]hcmdcnt}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK*hjOubj)}(hhh]jH)}(h3outstanding number of bytes of the command responseh]h3outstanding number of bytes of the command response}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjjhK*hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhK*hj/ubj)}(hA``nak`` a byte transmitted by the device when it refuses command h](j)}(h``nak``h]j)}(hjh]hnak}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK+hjubj)}(hhh]jH)}(h8a byte transmitted by the device when it refuses commandh]h8a byte transmitted by the device when it refuses command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK+hj/ubj)}(h``pre_receive_handler`` checks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byte h](j)}(h``pre_receive_handler``h]j)}(hjǒh]hpre_receive_handler}(hjɒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŒubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK-hjubj)}(hhh]jH)}(hchecks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byteh](h5checks communication errors and returns disposition (}(hjhhhNhNubh)}(h0:c:type:`enum ps2_disposition `h]j)}(hjh]henum ps2_disposition}(hjhhhNhNubah}(h]h ](jG jac-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjS refdomainjareftypetype refexplicitrefwarnjY j] ja ps2_dispositionuh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK,hjubh) of the received data byte}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jGhjhK,hjݒubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjܒhK-hj/ubj)}(h```receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](j)}(h``receive_handler``h]j)}(hj$h]hreceive_handler}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK.hjubj)}(hhh]jH)}(hLmain handler of particular PS/2 protocol, such as keyboard or mouse protocolh]hLmain handler of particular PS/2 protocol, such as keyboard or mouse protocol}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj9hK.hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hK.hj/ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_sendbyte (C function)c.ps2_sendbytehNtauh1hhjhhhNhNubh)}(hhh](h)}(hGint ps2_sendbyte (struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h]h)}(hFint ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h](j )}(hinth]hint}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjyhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKkubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjyhhhjhKkubj)}(h ps2_sendbyteh]j)}(h ps2_sendbyteh]h ps2_sendbyte}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjyhhhjhKkubjD)}(h6(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h](jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjǓhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hps2devh]hps2dev}(hjؓhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjՓubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjړmodnameN classnameNjY j\ )}j_ ]j)}jjsbc.ps2_sendbyteasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hu8 byteh](h)}(hhh]j)}(hu8h]hu8}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj1modnameN classnameNjY j\ )}j_ ]jc.ps2_sendbyteasbuh1hhj(ubh)}(h h]h }(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubj)}(hbyteh]hbyte}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int timeouth](j )}(hunsignedh]hunsigned}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjpubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjpubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjpubj)}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjyhhhjhKkubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjuhhhjhKkubah}(h]jpah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhKkhjrhhubjC)}(hhh]jH)}(h7sends a byte to the device and wait for acknowledgementh]h7sends a byte to the device and wait for acknowledgement}(hj֔hhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKahjӔhhubah}(h]h ]h"]h$]h&]uh1jBhjrhhhjhKkubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhjhNhNubjm)}(hXz**Parameters** ``struct ps2dev *ps2dev`` a PS/2 device to send the data to ``u8 byte`` data to be sent to the device ``unsigned int timeout`` timeout for sending the data and receiving an acknowledge **Description** The function doesn't handle retransmission, the caller is expected to handle it when needed. ps2_sendbyte() can only be called from a process context.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKehjubj)}(hhh](j)}(h<``struct ps2dev *ps2dev`` a PS/2 device to send the data to h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbhjubj)}(hhh]jH)}(h!a PS/2 device to send the data toh]h!a PS/2 device to send the data to}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj,hKbhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hKbhjubj)}(h*``u8 byte`` data to be sent to the device h](j)}(h ``u8 byte``h]j)}(hjPh]hu8 byte}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKchjJubj)}(hhh]jH)}(hdata to be sent to the deviceh]hdata to be sent to the device}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjehKchjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehKchjubj)}(hS``unsigned int timeout`` timeout for sending the data and receiving an acknowledge h](j)}(h``unsigned int timeout``h]j)}(hjh]hunsigned int timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKdhjubj)}(hhh]jH)}(h9timeout for sending the data and receiving an acknowledgeh]h9timeout for sending the data and receiving an acknowledge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKdhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKdhjubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hjĕh]h Description}(hjƕhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj•ubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKfhjubjH)}(h\The function doesn't handle retransmission, the caller is expected to handle it when needed.h]h^The function doesn’t handle retransmission, the caller is expected to handle it when needed.}(hjڕhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKfhjubjH)}(h9ps2_sendbyte() can only be called from a process context.h]h9ps2_sendbyte() can only be called from a process context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKihjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_begin_command (C function)c.ps2_begin_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void ps2_begin_command (struct ps2dev *ps2dev)h]h)}(h-void ps2_begin_command(struct ps2dev *ps2dev)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubh)}(h h]h }(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhj&hKubj)}(hps2_begin_commandh]j)}(hps2_begin_commandh]hps2_begin_command}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhj&hKubjD)}(h(struct ps2dev *ps2dev)h]jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hjUhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjQubh)}(h h]h }(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjQubh)}(hhh]j)}(hps2devh]hps2dev}(hjshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjumodnameN classnameNjY j\ )}j_ ]j)}jj;sbc.ps2_begin_commandasbuh1hhjQubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjMubah}(h]h ]h"]h$]h&]j,j-uh1jChjhhhj&hKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhj&hKubah}(h]j ah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj&hKhj hhubjC)}(hhh]jH)}(h0mark beginning of execution of a complex commandh]h0mark beginning of execution of a complex command}(hjؖhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKyhjՖhhubah}(h]h ]h"]h$]h&]uh1jBhj hhhj&hKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhjhNhNubjm)}(h**Parameters** ``struct ps2dev *ps2dev`` a PS/2 device executing the command **Description** Serializes a complex/compound command. Once command is finished ps2_end_command() should be called.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK}hjubj)}(hhh]j)}(h>``struct ps2dev *ps2dev`` a PS/2 device executing the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKzhjubj)}(hhh]jH)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj.hKzhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hKzhjubah}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjRubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK|hjubjH)}(hcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.h]hcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_end_command (C function)c.ps2_end_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void ps2_end_command (struct ps2dev *ps2dev)h]h)}(h+void ps2_end_command(struct ps2dev *ps2dev)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(hps2_end_commandh]j)}(hps2_end_commandh]hps2_end_command}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhKubjD)}(h(struct ps2dev *ps2dev)h]jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hj֗hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjҗubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjҗubh)}(hhh]j)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jjsbc.ps2_end_commandasbuh1hhjҗubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjҗubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҗubj)}(hps2devh]hps2dev}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjҗubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjΗubah}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhKhjhhubjC)}(hhh]jH)}(h*mark end of execution of a complex commandh]h*mark end of execution of a complex command}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjVhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjqjhjqjijjjkuh1hhhhjhNhNubjm)}(hO**Parameters** ``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](jH)}(h**Parameters**h]jw)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjyubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjuubj)}(hhh]j)}(h=``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]jH)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_drain (C function) c.ps2_drainhNtauh1hhjhhhNhNubh)}(hhh](h)}(hMvoid ps2_drain (struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h]h)}(hLvoid ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhKubj)}(h ps2_drainh]j)}(h ps2_drainh]h ps2_drain}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhKubjD)}(h>(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hj1hhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj-ubh)}(h h]h }(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubh)}(hhh]j)}(hps2devh]hps2dev}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjQmodnameN classnameNjY j\ )}j_ ]j)}jjsb c.ps2_drainasbuh1hhj-ubh)}(h h]h }(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj)ubjJ)}(hsize_t maxbytesh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]jk c.ps2_drainasbuh1hhjubh)}(h h]h }(hjęhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hmaxbytesh]hmaxbytes}(hjҙhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj)ubjJ)}(hunsigned int timeouth](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(htimeouth]htimeout}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj)ubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhKhjhhubjC)}(hhh]jH)}(hHwaits for device to transmit requested number of bytes and discards themh]hHwaits for device to transmit requested number of bytes and discards them}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjejhjejijjjkuh1hhhhjhNhNubjm)}(h**Parameters** ``struct ps2dev *ps2dev`` the PS/2 device that should be drained ``size_t maxbytes`` maximum number of bytes to be drained ``unsigned int timeout`` time to drain the deviceh](jH)}(h**Parameters**h]jw)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjmubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjiubj)}(hhh](j)}(hA``struct ps2dev *ps2dev`` the PS/2 device that should be drained h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]jH)}(h&the PS/2 device that should be drainedh]h&the PS/2 device that should be drained}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``size_t maxbytes`` maximum number of bytes to be drained h](j)}(h``size_t maxbytes``h]j)}(hjǚh]hsize_t maxbytes}(hjɚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjŚubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]jH)}(h%maximum number of bytes to be drainedh]h%maximum number of bytes to be drained}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjܚhKhjݚubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjܚhKhjubj)}(h1``unsigned int timeout`` time to drain the deviceh](j)}(h``unsigned int timeout``h]j)}(hjh]hunsigned int timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]jH)}(htime to drain the deviceh]htime to drain the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_is_keyboard_id (C function)c.ps2_is_keyboard_idhNtauh1hhjhhhNhNubh)}(hhh](h)}(h$bool ps2_is_keyboard_id (u8 id_byte)h]h)}(h#bool ps2_is_keyboard_id(u8 id_byte)h](j )}(hjPh]hbool}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjVhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubh)}(h h]h }(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjVhhhjghKubj)}(hps2_is_keyboard_idh]j)}(hps2_is_keyboard_idh]hps2_is_keyboard_id}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjvubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjVhhhjghKubjD)}(h (u8 id_byte)h]jJ)}(h u8 id_byteh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jj|sbc.ps2_is_keyboard_idasbuh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hid_byteh]hid_byte}(hjǛhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubah}(h]h ]h"]h$]h&]j,j-uh1jChjVhhhjghKubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjRhhhjghKubah}(h]jMah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjghKhjOhhubjC)}(hhh]jH)}(h>checks received ID byte against the list of known keyboard IDsh]h>checks received ID byte against the list of known keyboard IDs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjhhubah}(h]h ]h"]h$]h&]uh1jBhjOhhhjghKubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj jhj jijjjkuh1hhhhjhNhNubjm)}(hA**Parameters** ``u8 id_byte`` data byte that should be checkedh](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj ubj)}(hhh]j)}(h/``u8 id_byte`` data byte that should be checkedh](j)}(h``u8 id_byte``h]j)}(hj2h]h u8 id_byte}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj,ubj)}(hhh]jH)}(h data byte that should be checkedh]h data byte that should be checked}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhKhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌ__ps2_command (C function)c.__ps2_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(hJint __ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)h]h)}(hIint __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMubj)}(h __ps2_commandh]j)}(h __ps2_commandh]h __ps2_command}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhMubjD)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hjɜhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjŜubh)}(h h]h }(hj֜hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjŜubh)}(hhh]j)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jjsbc.__ps2_commandasbuh1hhjŜubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjŜubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŜubj)}(hps2devh]hps2dev}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjŜubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h u8 *paramh](h)}(hhh]j)}(hu8h]hu8}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj@modnameN classnameNjY j\ )}j_ ]jc.__ps2_commandasbuh1hhj7ubh)}(h h]h }(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj)}(hjh]h*}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hparamh]hparam}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hunsigned int commandh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hcommandh]hcommand}(hjȝhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMhjhhubjC)}(hhh]jH)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgj jhj jijjjkuh1hhhhjhNhNubjm)}(hXa**Parameters** ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command ``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both ``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response **Description** Not serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hj3h]hstruct ps2dev *ps2dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj-ubj)}(hhh]jH)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjHhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhj*ubj)}(h``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both h](j)}(h ``u8 *param``h]j)}(hjlh]h u8 *param}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjfubj)}(hhh]jH)}(ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or bothh]ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhKhj*ubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hjh]hunsigned int command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]jH)}(hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command responseh]hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubjH)}(hNot serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.h]hNot serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_command (C function) c.ps2_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(hHint ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)h]h)}(hGint ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j )}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj#hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubh)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#hhhj5hMubj)}(h ps2_commandh]j)}(h ps2_commandh]h ps2_command}(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhj#hhhj5hMubjD)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hjdhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj`ubh)}(h h]h }(hjqhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubh)}(hhh]j)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jjJsb c.ps2_commandasbuh1hhj`ubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj\ubjJ)}(h u8 *paramh](h)}(hhh]j)}(hu8h]hu8}(hjٟhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj֟ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj۟modnameN classnameNjY j\ )}j_ ]j c.ps2_commandasbuh1hhjҟubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjҟubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҟubj)}(hparamh]hparam}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjҟubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj\ubjJ)}(hunsigned int commandh](j )}(hunsignedh]hunsigned}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj )}(hinth]hint}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hj'ubh)}(h h]h }(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hcommandh]hcommand}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj\ubeh}(h]h ]h"]h$]h&]j,j-uh1jChj#hhhj5hMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhj5hMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhj5hMhjhhubjC)}(hhh]jH)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhj5hMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhjhNhNubjm)}(hXt**Parameters** ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command ``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both ``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response **Note** ps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjΠh]hstruct ps2dev *ps2dev}(hjРhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj̠ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjȠubj)}(hhh]jH)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjȠubeh}(h]h ]h"]h$]h&]uh1jhjhMhjŠubj)}(h``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both h](j)}(h ``u8 *param``h]j)}(hjh]h u8 *param}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(#shhh]jH)}(ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or bothh]ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjŠubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hjAh]hunsigned int command}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj;ubj)}(hhh]jH)}(hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command responseh]hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjŠubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Note**h]jw)}(hj}h]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj{ubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubjH)}(hps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.h]hps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_sliced_command (C function)c.ps2_sliced_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:int ps2_sliced_command (struct ps2dev *ps2dev, u8 command)h]h)}(h9int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)h](j )}(hinth]hint}(hj¡hhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubh)}(h h]h }(hjѡhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjСhMubj)}(hps2_sliced_commandh]j)}(hps2_sliced_commandh]hps2_sliced_command}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjߡubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjСhMubjD)}(h#(struct ps2dev *ps2dev, u8 command)h](jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}jjsbc.ps2_sliced_commandasbuh1hhjubh)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hps2devh]hps2dev}(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h u8 commandh](h)}(hhh]j)}(hu8h]hu8}(hjthhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjvmodnameN classnameNjY j\ )}j_ ]j9c.ps2_sliced_commandasbuh1hhjmubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjmubj)}(hcommandh]hcommand}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjСhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjСhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjСhMhjhhubjC)}(hhh]jH)}(h)sends an extended PS/2 command to a mouseh]h)sends an extended PS/2 command to a mouse}(hjʢhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjǢhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjСhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhjhNhNubjm)}(hXo**Parameters** ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command ``u8 command`` command byte **Description** The command is sent using "sliced" syntax understood by advanced devices, such as Logitech or Synaptics touchpads. The command is encoded as: 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu is the command.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hj h]hstruct ps2dev *ps2dev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]jH)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhj hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(h``u8 command`` command byte h](j)}(h``u8 command``h]j)}(hjDh]h u8 command}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj>ubj)}(hhh]jH)}(h command byteh]h command byte}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj}ubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubjH)}(hThe command is sent using "sliced" syntax understood by advanced devices, such as Logitech or Synaptics touchpads. The command is encoded as: 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu is the command.h]hThe command is sent using “sliced” syntax understood by advanced devices, such as Logitech or Synaptics touchpads. The command is encoded as: 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu is the command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_init (C function) c.ps2_inithNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid ps2_init (struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h]h)}(hvoid ps2_init(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h](j )}(hvoidh]hvoid}(hjģhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubh)}(h h]h }(hjӣhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjңhMubj)}(hps2_inith]j)}(hps2_inith]hps2_init}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjңhMubjD)}(h(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h](jJ)}(hstruct ps2dev *ps2devh](h)}(hhh]hstruct}(hjhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubh)}(hhh]j)}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj!modnameN classnameNjY j\ )}j_ ]j)}jjsb c.ps2_initasbuh1hhjubh)}(h h]h }(hj?hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hps2devh]hps2dev}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(hstruct serio *serioh](h)}(hhh]hstruct}(hjshhhNhNubah}(h]h ]hah"]h$]h&]uh1hhjoubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjoubh)}(hhh]j)}(hserioh]hserio}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j; c.ps2_initasbuh1hhjoubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjoubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(hserioh]hserio}(hjʤhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h-ps2_pre_receive_handler_t pre_receive_handlerh](h)}(hhh]j)}(hps2_pre_receive_handler_th]hps2_pre_receive_handler_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j; c.ps2_initasbuh1hhjߤubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjߤubj)}(hpre_receive_handlerh]hpre_receive_handler}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjߤubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubjJ)}(h%ps2_receive_handler_t receive_handlerh](h)}(hhh]j)}(hps2_receive_handler_th]hps2_receive_handler_t}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetj0modnameN classnameNjY j\ )}j_ ]j; c.ps2_initasbuh1hhj'ubh)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(hreceive_handlerh]hreceive_handler}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhjubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjңhMubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjңhMubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjңhMhjhhubjC)}(hhh]jH)}(hinitializes ps2dev structureh]hinitializes ps2dev structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjңhMubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjjhjjijjjkuh1hhhhjhNhNubjm)}(hX**Parameters** ``struct ps2dev *ps2dev`` structure to be initialized ``struct serio *serio`` serio port associated with the PS/2 device ``ps2_pre_receive_handler_t pre_receive_handler`` validation handler to check basic communication state ``ps2_receive_handler_t receive_handler`` main protocol handler **Description** Prepares ps2dev structure for use in drivers for PS/2 devices.h](jH)}(h**Parameters**h]jw)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh](j)}(h6``struct ps2dev *ps2dev`` structure to be initialized h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjťh]hstruct ps2dev *ps2dev}(hjǥhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjåubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]jH)}(hstructure to be initializedh]hstructure to be initialized}(hjޥhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjڥhMhjۥubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڥhMhjubj)}(hC``struct serio *serio`` serio port associated with the PS/2 device h](j)}(h``struct serio *serio``h]j)}(hjh]hstruct serio *serio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]jH)}(h*serio port associated with the PS/2 deviceh]h*serio port associated with the PS/2 device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hh``ps2_pre_receive_handler_t pre_receive_handler`` validation handler to check basic communication state h](j)}(h1``ps2_pre_receive_handler_t pre_receive_handler``h]j)}(hj7h]h-ps2_pre_receive_handler_t pre_receive_handler}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj1ubj)}(hhh]jH)}(h5validation handler to check basic communication stateh]h5validation handler to check basic communication state}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjLhMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubj)}(h@``ps2_receive_handler_t receive_handler`` main protocol handler h](j)}(h)``ps2_receive_handler_t receive_handler``h]j)}(hjph]h%ps2_receive_handler_t receive_handler}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjjubj)}(hhh]jH)}(hmain protocol handlerh]hmain protocol handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubjH)}(h**Description**h]jw)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubjH)}(h>Prepares ps2dev structure for use in drivers for PS/2 devices.h]h>Prepares ps2dev structure for use in drivers for PS/2 devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hՌps2_interrupt (C function)c.ps2_interrupthNtauh1hhjhhhNhNubh)}(hhh](h)}(hLirqreturn_t ps2_interrupt (struct serio *serio, u8 data, unsigned int flags)h]h)}(hKirqreturn_t ps2_interrupt(struct serio *serio, u8 data, unsigned int flags)h](h)}(hhh]j)}(h irqreturn_th]h irqreturn_t}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]j)}j ps2_interruptsbc.ps2_interruptasbuh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMTubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhjhMTubj)}(h ps2_interrupth]j)}(hjh]h ps2_interrupt}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#ubah}(h]h ](j'j(eh"]h$]h&]j,j-uh1jhjhhhjhMTubjD)}(h2(struct serio *serio, u8 data, unsigned int flags)h](jJ)}(hstruct serio *serioh](h)}(hhh]hstruct}(hjBhhhNhNubah}(h]h ]hah"]h$]h&]uh1hhj>ubh)}(h h]h }(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>ubh)}(hhh]j)}(hserioh]hserio}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjbmodnameN classnameNjY j\ )}j_ ]jc.ps2_interruptasbuh1hhj>ubh)}(h h]h }(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hserioh]hserio}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj:ubjJ)}(hu8 datah](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjareftypej reftargetjmodnameN classnameNjY j\ )}j_ ]jc.ps2_interruptasbuh1hhjubh)}(h h]h }(hjӧhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj:ubjJ)}(hunsigned int flagsh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1j hjubh)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(hflagsh]hflags}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj,j-uh1jIhj:ubeh}(h]h ]h"]h$]h&]j,j-uh1jChjhhhjhMTubeh}(h]h ]h"]h$]h&]j,j-j4uh1hj5j6hjhhhjhMTubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1hhjhMThjhhubjC)}(hhh]jH)}(h)common interrupt handler for PS/2 devicesh]h)common interrupt handler for PS/2 devices}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMJhjYhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhMTubeh}(h]h ](jafunctioneh"]h$]h&]jfjajgjtjhjtjijjjkuh1hhhhjhNhNubjm)}(hX**Parameters** ``struct serio *serio`` serio port for the device ``u8 data`` a data byte received from the device ``unsigned int flags`` flags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transfer **Description** ps2_interrupt() invokes pre-receive handler, optionally handles command acknowledgement and response from the device, and finally passes the data to the main protocol handler for future processing.h](jH)}(h**Parameters**h]jw)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj|ubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMNhjxubj)}(hhh](j)}(h2``struct serio *serio`` serio port for the device h](j)}(h``struct serio *serio``h]j)}(hjh]hstruct serio *serio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMKhjubj)}(hhh]jH)}(hserio port for the deviceh]hserio port for the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMKhjubj)}(h1``u8 data`` a data byte received from the device h](j)}(h ``u8 data``h]j)}(hj֨h]hu8 data}(hjبhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԨubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMLhjШubj)}(hhh]jH)}(h$a data byte received from the deviceh]h$a data byte received from the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjШubeh}(h]h ]h"]h$]h&]uh1jhjhMLhjubj)}(hq``unsigned int flags`` flags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transfer h](j)}(h``unsigned int flags``h]j)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMNhj ubj)}(hhh]jH)}(hYflags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transferh](hflags such as }(hj(hhhNhNubj)}(h``SERIO_PARITY``h]h SERIO_PARITY}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh or }(hj(hhhNhNubj)}(h``SERIO_TIMEOUT``h]h SERIO_TIMEOUT}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh& indicating state of the data transfer}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMMhj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$hMNhjubeh}(h]h ]h"]h$]h&]uh1jhjxubjH)}(h**Description**h]jw)}(hjoh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjmubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMPhjxubjH)}(hps2_interrupt() invokes pre-receive handler, optionally handles command acknowledgement and response from the device, and finally passes the data to the main protocol handler for future processing.h]hps2_interrupt() invokes pre-receive handler, optionally handles command acknowledgement and response from the device, and finally passes the data to the main protocol handler for future processing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jGh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMPhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jlhjhhhNhNubeh}(h]ps-2-protocol-supportah ]h"]ps/2 protocol supportah$]h&]uh1hhhhhhhhK,ubeh}(h]input-subsystemah ]h"]input subsystemah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjΩerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjbjbja{j^{j|j|j j jju nametypes}(jjbja{j|j juh}(jhjbhhhjjjjjSjXjjjjjjjjj!j!j\#ja#j&j&j7(j<(j)j)j9+j>+j,j,j5/j:/j_1jd1j3j3j%5j*5j6j6j8j8j~:j:j<j<j1>j6>j@j@j#Cj(CjDjDj4Fj9FjGjGj6Ij;IjLjLjMNjRNjOjOj=RjBRjSjSjJVjOVjXjXj[j[j]j]j]_jb_j^{jbjbjbjgdjldjfjfjhj hjjjjj-lj2ljnjnjpjpjrjrj/tj4tjujujjyjoyj|jd{j{j{j j|j}j }jjjjj_jdjEjJjɋj΋jjj,j1j|jjpjuj jjjjjjMjRjjjjjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.