€•xŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ$/translations/zh_CN/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/zh_TW/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/it_IT/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ja_JP/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ko_KR/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/pt_BR/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/sp_SP/driver-api/input”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒInput Subsystem”h]”hŒInput Subsystem”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ>/var/lib/git/docbuild/linux/Documentation/driver-api/input.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Input core”h]”hŒ Input core”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œinput_value (C struct)”Œ c.input_value”hNt”auh1hÜhhËh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ input_value”h]”hŒdesc_signature_line”“”)�”}”(hŒstruct input_value”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1hÿhhûh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jhhûh²hh³jh´KubhŒ desc_name”“”)�”}”(hŒ input_value”h]”hŒ desc_sig_name”“”)�”}”(hh÷h]”hŒ input_value”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j(hj$ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j"hhûh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j@jAŒ add_permalink”ˆuh1hùŒsphinx_line_type”Œ declarator”hhõh²hh³jh´Kubah}”(h]”hëah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1hóh³jh´Khhðh²hubhŒ desc_content”“”)�”}”(hhh]”hŒ paragraph”“”)�”}”(hŒinput value representation”h]”hŒinput value representation”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KhjXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhhðh²hh³jh´Kubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”juŒobjtype”jvŒdesctype”jvŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1hîh²hhhËh³híh´NubhŒ 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 value”h]”(j\)�”}”(hŒ**Definition**::”h]”(hŒstrong”“”)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj†ubhŒ:”…”�”}”(hj†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Khj‚ubhŒ literal_block”“”)�”}”(hŒHstruct input_value { __u16 type; __u16 code; __s32 value; };”h]”hŒHstruct input_value { __u16 type; __u16 code; __s32 value; };”…”�”}”hj§sbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K!hj‚ubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hj¸h]”hŒMembers”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K'hj‚ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ-``type`` type of value (EV_KEY, EV_ABS, etc) ”h]”(hŒterm”“”)�”}”(hŒ``type``”h]”hŒliteral”“”)�”}”(hjÝh]”hŒtype”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KhjÕubhŒ definition”“”)�”}”(hhh]”j\)�”}”(hŒ#type of value (EV_KEY, EV_ABS, etc)”h]”hŒ#type of value (EV_KEY, EV_ABS, etc)”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jôh´Khj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jôh´KhjÐubjÔ)�”}”(hŒ``code`` the value code ”h]”(jÚ)�”}”(hŒ``code``”h]”jà)�”}”(hjh]”hŒcode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Khjubjö)�”}”(hhh]”j\)�”}”(hŒthe value code”h]”hŒthe value code”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j/h´Khj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j/h´KhjÐubjÔ)�”}”(hŒ``value`` the value”h]”(jÚ)�”}”(hŒ ``value``”h]”jà)�”}”(hjSh]”hŒvalue”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KhjMubjö)�”}”(hhh]”j\)�”}”(hŒ the value”h]”hŒ the value”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Khjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jhh´KhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³híh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_dev (C struct)”Œ c.input_dev”hNt”auh1hÜhhËh²hh³híh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ input_dev”h]”hú)�”}”(hŒstruct input_dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj©h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K%ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©h²hh³jºh´K%ubj#)�”}”(hŒ input_dev”h]”j))�”}”(hj§h]”hŒ input_dev”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÉubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj©h²hh³jºh´K%ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj¥h²hh³jºh´K%ubah}”(h]”j ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jºh´K%hj¢h²hubjW)�”}”(hhh]”j\)�”}”(hŒrepresents an input device”h]”hŒrepresents an input device”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K.hjìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¢h²hh³jºh´K%ubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{jj|jj}‰j~‰j‰uh1hîh²hhhËh³híh´Nubj�)�”}”(hXh**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 *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; bool ready; }; **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() and input_inhibit/uninhibit_device() to 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. ``ready`` indicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K2hj ubj¦)�”}”(hX—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 *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; bool ready; };”h]”hX—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 *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; bool ready; };”…”�”}”hj,sbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K4hj ubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hj=h]”hŒMembers”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kihj ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ``name`` name of the device ”h]”(jÚ)�”}”(hŒ``name``”h]”jà)�”}”(hj\h]”hŒname”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K0hjVubjö)�”}”(hhh]”j\)�”}”(hŒname of the device”h]”hŒname of the device”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jqh´K0hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jqh´K0hjSubjÔ)�”}”(hŒ=``phys`` physical path to the device in the system hierarchy ”h]”(jÚ)�”}”(hŒ``phys``”h]”jà)�”}”(hj•h]”hŒphys”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K1hj�ubjö)�”}”(hhh]”j\)�”}”(hŒ3physical path to the device in the system hierarchy”h]”hŒ3physical path to the device in the system hierarchy”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jªh´K1hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jªh´K1hjSubjÔ)�”}”(hŒF``uniq`` unique identification code for the device (if device has it) ”h]”(jÚ)�”}”(hŒ``uniq``”h]”jà)�”}”(hjÎh]”hŒuniq”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K2hjÈubjö)�”}”(hhh]”j\)�”}”(hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K4hj:ubjö)�”}”(hhh]”j\)�”}”(hŒ&bitmap of device properties and quirks”h]”hŒ&bitmap of device properties and quirks”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jUh´K4hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jUh´K4hjSubjÔ)�”}”(hŒS``evbit`` bitmap of types of events supported by the device (EV_KEY, EV_REL, etc.) ”h]”(jÚ)�”}”(hŒ ``evbit``”h]”jà)�”}”(hjyh]”hŒevbit”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K6hjsubjö)�”}”(hhh]”j\)�”}”(hŒHbitmap of types of events supported by the device (EV_KEY, EV_REL, etc.)”h]”hŒHbitmap of types of events supported by the device (EV_KEY, EV_REL, etc.)”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K5hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jŽh´K6hjSubjÔ)�”}”(hŒ2``keybit`` bitmap of keys/buttons this device has ”h]”(jÚ)�”}”(hŒ ``keybit``”h]”jà)�”}”(hj³h]”hŒkeybit”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K7hj­ubjö)�”}”(hhh]”j\)�”}”(hŒ&bitmap of keys/buttons this device has”h]”hŒ&bitmap of keys/buttons this device has”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÈh´K7hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÈh´K7hjSubjÔ)�”}”(hŒ2``relbit`` bitmap of relative axes for the device ”h]”(jÚ)�”}”(hŒ ``relbit``”h]”jà)�”}”(hjìh]”hŒrelbit”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K8hjæubjö)�”}”(hhh]”j\)�”}”(hŒ&bitmap of relative axes for the device”h]”hŒ&bitmap of relative axes for the device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jh´K8hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jh´K8hjSubjÔ)�”}”(hŒ2``absbit`` bitmap of absolute axes for the device ”h]”(jÚ)�”}”(hŒ ``absbit``”h]”jà)�”}”(hj%h]”hŒabsbit”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K9hjubjö)�”}”(hhh]”j\)�”}”(hŒ&bitmap of absolute axes for the device”h]”hŒ&bitmap of absolute axes for the device”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j:h´K9hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j:h´K9hjSubjÔ)�”}”(hŒB``mscbit`` bitmap of miscellaneous events supported by the device ”h]”(jÚ)�”}”(hŒ ``mscbit``”h]”jà)�”}”(hj^h]”hŒmscbit”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K:hjXubjö)�”}”(hhh]”j\)�”}”(hŒ6bitmap of miscellaneous events supported by the device”h]”hŒ6bitmap of miscellaneous events supported by the device”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jsh´K:hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jsh´K:hjSubjÔ)�”}”(hŒ0``ledbit`` bitmap of leds present on the device ”h]”(jÚ)�”}”(hŒ ``ledbit``”h]”jà)�”}”(hj—h]”hŒledbit”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K;hj‘ubjö)�”}”(hhh]”j\)�”}”(hŒ$bitmap of leds present on the device”h]”hŒ$bitmap of leds present on the device”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¬h´K;hj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¬h´K;hjSubjÔ)�”}”(hŒ;``sndbit`` bitmap of sound effects supported by the device ”h]”(jÚ)�”}”(hŒ ``sndbit``”h]”jà)�”}”(hjÐh]”hŒsndbit”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Khj<ubjö)�”}”(hhh]”j\)�”}”(hŒ(bitmap of switches present on the device”h]”hŒ(bitmap of switches present on the device”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jWh´K>hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jWh´K>hjSubjÔ)�”}”(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à)�”}”(hj{h]”hŒhint_events_per_packet”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KBhjuubjö)�”}”(hhh]”j\)�”}”(hŒ­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]”hŒ­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.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K?hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j�h´KBhjSubjÔ)�”}”(hŒ%``keycodemax`` size of keycode table ”h]”(jÚ)�”}”(hŒ``keycodemax``”h]”jà)�”}”(hjµh]”hŒ keycodemax”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KChj¯ubjö)�”}”(hhh]”j\)�”}”(hŒsize of keycode table”h]”hŒsize of keycode table”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÊh´KChjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÊh´KChjSubjÔ)�”}”(hŒ2``keycodesize`` size of elements in keycode table ”h]”(jÚ)�”}”(hŒ``keycodesize``”h]”jà)�”}”(hjîh]”hŒ keycodesize”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KDhjèubjö)�”}”(hhh]”j\)�”}”(hŒ!size of elements in keycode table”h]”hŒ!size of elements in keycode table”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jh´KDhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jh´KDhjSubjÔ)�”}”(hŒ9``keycode`` map of scancodes to keycodes for this device ”h]”(jÚ)�”}”(hŒ ``keycode``”h]”jà)�”}”(hj'h]”hŒkeycode”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KEhj!ubjö)�”}”(hhh]”j\)�”}”(hŒ,map of scancodes to keycodes for this device”h]”hŒ,map of scancodes to keycodes for this device”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j<h´KEhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j<h´KEhjSubjÔ)�”}”(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à)�”}”(hj`h]”hŒ setkeycode”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KJhjZubjö)�”}”(hhh]”j\)�”}”(hŒÆ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]”hŒÆ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”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KGhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³juh´KJhjSubjÔ)�”}”(hŒB``getkeycode`` optional legacy method to retrieve current keymap. ”h]”(jÚ)�”}”(hŒ``getkeycode``”h]”jà)�”}”(hjšh]”hŒ getkeycode”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KFhj”ubjö)�”}”(hhh]”j\)�”}”(hŒ2optional legacy method to retrieve current keymap.”h]”hŒ2optional legacy method to retrieve current keymap.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¯h´KFhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¯h´KFhjSubjÔ)�”}”(hŒe``ff`` force feedback structure associated with the device if device supports force feedback effects ”h]”(jÚ)�”}”(hŒ``ff``”h]”jà)�”}”(hjÓh]”hŒff”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KLhjÍubjö)�”}”(hhh]”j\)�”}”(hŒ]force feedback structure associated with the device if device supports force feedback effects”h]”hŒ]force feedback structure associated with the device if device supports force feedback effects”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KKhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jèh´KLhjSubjÔ)�”}”(hŒ_``poller`` poller structure associated with the device if device is set up to use polling mode ”h]”(jÚ)�”}”(hŒ ``poller``”h]”jà)�”}”(hj h]”hŒpoller”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KNhjubjö)�”}”(hhh]”j\)�”}”(hŒSpoller structure associated with the device if device is set up to use polling mode”h]”hŒSpoller structure associated with the device if device is set up to use polling mode”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KMhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j"h´KNhjSubjÔ)�”}”(hŒ^``repeat_key`` stores key code of the last key pressed; used to implement software autorepeat ”h]”(jÚ)�”}”(hŒ``repeat_key``”h]”jà)�”}”(hjGh]”hŒ repeat_key”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KPhjAubjö)�”}”(hhh]”j\)�”}”(hŒNstores key code of the last key pressed; used to implement software autorepeat”h]”hŒNstores key code of the last key pressed; used to implement software autorepeat”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KOhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j\h´KPhjSubjÔ)�”}”(hŒ(``timer`` timer for software autorepeat ”h]”(jÚ)�”}”(hŒ ``timer``”h]”jà)�”}”(hj�h]”hŒtimer”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KQhj{ubjö)�”}”(hhh]”j\)�”}”(hŒtimer for software autorepeat”h]”hŒtimer for software autorepeat”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j–h´KQhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j–h´KQhjSubjÔ)�”}”(hŒ?``rep`` current values for autorepeat parameters (delay, rate) ”h]”(jÚ)�”}”(hŒ``rep``”h]”jà)�”}”(hjºh]”hŒrep”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KRhj´ubjö)�”}”(hhh]”j\)�”}”(hŒ6current values for autorepeat parameters (delay, rate)”h]”hŒ6current values for autorepeat parameters (delay, rate)”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÏh´KRhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÏh´KRhjSubjÔ)�”}”(hŒ#``mt`` pointer to multitouch state ”h]”(jÚ)�”}”(hŒ``mt``”h]”jà)�”}”(hjóh]”hŒmt”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KShjíubjö)�”}”(hhh]”j\)�”}”(hŒpointer to multitouch state”h]”hŒpointer to multitouch state”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j h´KShj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j h´KShjSubjÔ)�”}”(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]”hŒabsinfo”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KVhj& ubjö)�”}”(hhh]”j\)�”}”(hŒšarray of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)”h]”(hŒ array of ”…”�”}”(hjE h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct input_absinfo `”h]”jà)�”}”(hjO h]”hŒstruct input_absinfo”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”(Œxref”juŒc-type”eh"]”h$]”h&]”uh1jßhjM ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/input”Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbŒ reftarget”Œ input_absinfo”uh1hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KThjE ubhŒc elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)”…”�”}”(hjE h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jw h´KThjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj& ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jA h´KVhjSubjÔ)�”}”(hŒ8``key`` reflects current state of device's keys/buttons ”h]”(jÚ)�”}”(hŒ``key``”h]”jà)�”}”(hj” h]”hŒkey”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KWhjŽ ubjö)�”}”(hhh]”j\)�”}”(hŒ/reflects current state of device's keys/buttons”h]”hŒ1reflects current state of device’s keys/buttons”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j© h´KWhjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j© h´KWhjSubjÔ)�”}”(hŒ0``led`` reflects current state of device's LEDs ”h]”(jÚ)�”}”(hŒ``led``”h]”jà)�”}”(hjÍ h]”hŒled”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjË ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KXhjÇ ubjö)�”}”(hhh]”j\)�”}”(hŒ'reflects current state of device's LEDs”h]”hŒ)reflects current state of device’s LEDs”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jâ h´KXhjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jâ h´KXhjSubjÔ)�”}”(hŒ0``snd`` reflects current state of sound effects ”h]”(jÚ)�”}”(hŒ``snd``”h]”jà)�”}”(hj h]”hŒsnd”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KYhj ubjö)�”}”(hhh]”j\)�”}”(hŒ'reflects current state of sound effects”h]”hŒ'reflects current state of sound effects”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j h´KYhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j h´KYhjSubjÔ)�”}”(hŒ3``sw`` reflects current state of device's switches ”h]”(jÚ)�”}”(hŒ``sw``”h]”jà)�”}”(hj? h]”hŒsw”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KZhj9 ubjö)�”}”(hhh]”j\)�”}”(hŒ+reflects current state of device's switches”h]”hŒ-reflects current state of device’s switches”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jT h´KZhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jT h´KZhjSubjÔ)�”}”(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à)�”}”(hjx h]”hŒopen”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K_hjr ubjö)�”}”(hhh]”j\)�”}”(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‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K[hjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j� h´K_hjSubjÔ)�”}”(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]”hŒclose”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kbhj¬ ubjö)�”}”(hhh]”j\)�”}”(hŒ�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]”hŒ�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.”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K`hjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¬ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÇ h´KbhjSubjÔ)�”}”(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]”hŒflush”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjê ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kehjæ ubjö)�”}”(hhh]”j\)�”}”(hŒ|purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it”h]”hŒ|purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kchj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjæ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j h´KehjSubjÔ)�”}”(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]”hŒevent”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj$ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kihj ubjö)�”}”(hhh]”j\)�”}”(hŒÛ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]”(hŒº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 ”…”�”}”(hj? h²hh³Nh´Nubj‹)�”}”(hŒ**event_lock**”h]”hŒ event_lock”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj? ubhŒ and must not sleep”…”�”}”(hj? h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kfhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j; h´KihjSubjÔ)�”}”(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à)�”}”(hjr h]”hŒgrab”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Klhjl ubjö)�”}”(hhh]”j\)�”}”(hŒ¬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]”hŒ¬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”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kjhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjl ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j‡ h´KlhjSubjÔ)�”}”(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® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kqhj¦ ubjö)�”}”(hhh]”j\)�”}”(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Å h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kmhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¦ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÁ h´KqhjSubjÔ)�”}”(hŒB``mutex`` serializes calls to open(), close() and flush() methods ”h]”(jÚ)�”}”(hŒ ``mutex``”h]”jà)�”}”(hjæ h]”hŒmutex”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjä ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Krhjà ubjö)�”}”(hhh]”j\)�”}”(hŒ7serializes calls to open(), close() and flush() methods”h]”hŒ7serializes calls to open(), close() and flush() methods”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jû h´Krhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jû h´KrhjSubjÔ)�”}”(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]”hŒusers”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kwhj ubjö)�”}”(hhh]”j\)�”}”(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”h]”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”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kshj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j4 h´KwhjSubjÔ)�”}”(hŒ�``going_away`` marks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to fail with -ENODEV. ”h]”(jÚ)�”}”(hŒ``going_away``”h]”jà)�”}”(hjY h]”hŒ going_away”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KzhjS ubjö)�”}”(hhh]”j\)�”}”(hŒ�marks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to fail with -ENODEV.”h]”hŒ�marks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to fail with -ENODEV.”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kxhjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjS ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jn h´KzhjSubjÔ)�”}”(hŒ+``dev`` driver model's view of this device ”h]”(jÚ)�”}”(hŒ``dev``”h]”jà)�”}”(hj“ h]”hŒdev”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K{hj� ubjö)�”}”(hhh]”j\)�”}”(hŒ"driver model's view of this device”h]”hŒ$driver model’s view of this device”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¨ h´K{hj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¨ h´K{hjSubjÔ)�”}”(hŒm``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]”hŒh_list”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K}hjÆ ubjö)�”}”(hhh]”j\)�”}”(hŒalist of input handles associated with the device. When accessing the list dev->mutex must be held”h]”hŒalist of input handles associated with the device. When accessing the list dev->mutex must be held”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K|hjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³já h´K}hjSubjÔ)�”}”(hŒ6``node`` used to place the device onto input_dev_list ”h]”(jÚ)�”}”(hŒ``node``”h]”jà)�”}”(hj h]”hŒnode”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K~hj ubjö)�”}”(hhh]”j\)�”}”(hŒ,used to place the device onto input_dev_list”h]”hŒ,used to place the device onto input_dev_list”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j h´K~hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j h´K~hjSubjÔ)�”}”(hŒ:``num_vals`` number of values queued in the current frame ”h]”(jÚ)�”}”(hŒ ``num_vals``”h]”jà)�”}”(hj? h]”hŒnum_vals”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Khj9 ubjö)�”}”(hhh]”j\)�”}”(hŒ,number of values queued in the current frame”h]”hŒ,number of values queued in the current frame”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jT h´KhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jT h´KhjSubjÔ)�”}”(hŒ8``max_vals`` maximum number of values queued in a frame ”h]”(jÚ)�”}”(hŒ ``max_vals``”h]”jà)�”}”(hjx h]”hŒmax_vals”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K€hjr ubjö)�”}”(hhh]”j\)�”}”(hŒ*maximum number of values queued in a frame”h]”hŒ*maximum number of values queued in a frame”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j� h´K€hjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j� h´K€hjSubjÔ)�”}”(hŒ5``vals`` array of values queued in the current frame ”h]”(jÚ)�”}”(hŒ``vals``”h]”jà)�”}”(hj± h]”hŒvals”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¯ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K�hj« ubjö)�”}”(hhh]”j\)�”}”(hŒ+array of values queued in the current frame”h]”hŒ+array of values queued in the current frame”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÆ h´K�hjÇ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj« ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÆ h´K�hjSubjÔ)�”}”(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]”hŒdevres_managed”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Kƒhjä ubjö)�”}”(hhh]”j\)�”}”(hŒjindicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.”h]”hŒjindicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K‚hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjä ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÿ h´KƒhjSubjÔ)�”}”(hŒT``timestamp`` storage for a timestamp set by input_set_timestamp called by a driver ”h]”(jÚ)�”}”(hŒ ``timestamp``”h]”jà)�”}”(hj$h]”hŒ timestamp”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K…hjubjö)�”}”(hhh]”j\)�”}”(hŒEstorage for a timestamp set by input_set_timestamp called by a driver”h]”hŒEstorage for a timestamp set by input_set_timestamp called by a driver”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K„hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j9h´K…hjSubjÔ)�”}”(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à)�”}”(hj^h]”hŒ inhibited”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K‰hjXubjö)�”}”(hhh]”j\)�”}”(hŒê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]”hŒì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.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K†hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jsh´K‰hjSubjÔ)�”}”(hŒ’``ready`` indicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.”h]”(jÚ)�”}”(hŒ ``ready``”h]”jà)�”}”(hj˜h]”hŒready”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K‹hj’ubjö)�”}”(hhh]”j\)�”}”(hŒˆindicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.”h]”hŒˆindicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´KŠhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j­h´K‹hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³híh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_handler (C struct)”Œc.input_handler”hNt”auh1hÜhhËh²hh³híh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ input_handler”h]”hú)�”}”(hŒstruct input_handler”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjîh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´K’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîh²hh³jÿh´K’ubj#)�”}”(hŒ input_handler”h]”j))�”}”(hjìh]”hŒ input_handler”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjîh²hh³jÿh´K’ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjêh²hh³jÿh´K’ubah}”(h]”jåah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jÿh´K’hjçh²hubjW)�”}”(hhh]”j\)�”}”(hŒ.implements one of interfaces for input devices”h]”hŒ.implements one of interfaces for input devices”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjçh²hh³jÿh´K’ubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{jLj|jLj}‰j~‰j‰uh1hîh²hhhËh³híh´Nubj�)�”}”(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 when device is open and ready to process events, and also when device is uninhibited or 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_list”•h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjTubhŒ:”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MhjPubj¦)�”}”(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; };”…”�”}”hjqsbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MhjPubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hj‚h]”hŒMembers”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M,hjPubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ!``private`` driver-specific data ”h]”(jÚ)�”}”(hŒ ``private``”h]”jà)�”}”(hj¡h]”hŒprivate”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhj›ubjö)�”}”(hhh]”j\)�”}”(hŒdriver-specific data”h]”hŒdriver-specific data”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¶h´Mhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¶h´Mhj˜ubjÔ)�”}”(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à)�”}”(hjÚh]”hŒevent”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MhjÔubjö)�”}”(hhh]”j\)�”}”(hŒ‹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]”hŒ‹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”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jïh´Mhj˜ubjÔ)�”}”(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]”hŒevents”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhjubjö)�”}”(hhh]”j\)�”}”(hŒË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]”hŒË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.”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j)h´Mhj˜ubjÔ)�”}”(hŒQ``filter`` similar to **event**; separates normal event handlers from "filters". ”h]”(jÚ)�”}”(hŒ ``filter``”h]”jà)�”}”(hjNh]”hŒfilter”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MhjHubjö)�”}”(hhh]”j\)�”}”(hŒEsimilar to **event**; separates normal event handlers from "filters".”h]”(hŒ similar to ”…”�”}”(hjgh²hh³Nh´Nubj‹)�”}”(hŒ **event**”h]”hŒevent”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjgubhŒ5; separates normal event handlers from “filtersâ€�.”…”�”}”(hjgh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jch´Mhj˜ubjÔ)�”}”(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à)�”}”(hjšh]”hŒmatch”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M!hj”ubjö)�”}”(hhh]”j\)�”}”(hŒvcalled after comparing device's id with handler's id_table to perform fine-grained matching between device and handler”h]”hŒzcalled after comparing device’s id with handler’s id_table to perform fine-grained matching between device and handler”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¯h´M!hj˜ubjÔ)�”}”(hŒ?``connect`` called when attaching a handler to an input device ”h]”(jÚ)�”}”(hŒ ``connect``”h]”jà)�”}”(hjÔh]”hŒconnect”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M"hjÎubjö)�”}”(hhh]”j\)�”}”(hŒ2called when attaching a handler to an input device”h]”hŒ2called when attaching a handler to an input device”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jéh´M"hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jéh´M"hj˜ubjÔ)�”}”(hŒ7``disconnect`` disconnects a handler from input device ”h]”(jÚ)�”}”(hŒ``disconnect``”h]”jà)�”}”(hj h]”hŒ disconnect”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M#hjubjö)�”}”(hhh]”j\)�”}”(hŒ'disconnects a handler from input device”h]”hŒ'disconnects a handler from input device”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j"h´M#hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j"h´M#hj˜ubjÔ)�”}”(hŒÜ``start`` starts handler for given handle. This function is called by input core when device is open and ready to process events, and also when device is uninhibited or when a process that "grabbed" a device releases it ”h]”(jÚ)�”}”(hŒ ``start``”h]”jà)�”}”(hjFh]”hŒstart”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M'hj@ubjö)�”}”(hhh]”j\)�”}”(hŒÑstarts handler for given handle. This function is called by input core when device is open and ready to process events, and also when device is uninhibited or when a process that "grabbed" a device releases it”h]”hŒÕstarts handler for given handle. This function is called by input core when device is open and ready to process events, and also when device is uninhibited or when a process that “grabbedâ€� a device releases it”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M$hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j[h´M'hj˜ubjÔ)�”}”(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à)�”}”(hj€h]”hŒpassive_observer”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M+hjzubjö)�”}”(hhh]”j\)�”}”(hŒë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]”(hŒset to ”…”�”}”(hj™h²hh³Nh´Nubjà)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj™ubhŒÜ 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”…”�”}”(hj™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M(hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j•h´M+hj˜ubjÔ)�”}”(hŒG``legacy_minors`` set to ``true`` by drivers using legacy minor ranges ”h]”(jÚ)�”}”(hŒ``legacy_minors``”h]”jà)�”}”(hjÌh]”hŒ legacy_minors”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M,hjÆubjö)�”}”(hhh]”j\)�”}”(hŒ4set to ``true`` by drivers using legacy minor ranges”h]”(hŒset to ”…”�”}”(hjåh²hh³Nh´Nubjà)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjåubhŒ% by drivers using legacy minor ranges”…”�”}”(hjåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jáh´M,hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jáh´M,hj˜ubjÔ)�”}”(hŒU``minor`` beginning of range of 32 legacy minors for devices this driver can provide ”h]”(jÚ)�”}”(hŒ ``minor``”h]”jà)�”}”(hjh]”hŒminor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M.hjubjö)�”}”(hhh]”j\)�”}”(hŒJbeginning of range of 32 legacy minors for devices this driver can provide”h]”hŒJbeginning of range of 32 legacy minors for devices this driver can provide”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M-hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j,h´M.hj˜ubjÔ)�”}”(hŒF``name`` name of the handler, to be shown in /proc/bus/input/handlers ”h]”(jÚ)�”}”(hŒ``name``”h]”jà)�”}”(hjQh]”hŒname”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M/hjKubjö)�”}”(hhh]”j\)�”}”(hŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M6hhËh²hubj\)�”}”(hŒßInput 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]”hŒßInput 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.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M3hhËh²hubj\)�”}”(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]”(hŒÞThe 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 ”…”�”}”(hjeh²hh³Nh´Nubjà)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjeubhŒ from their filter() method).”…”�”}”(hjeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M8hhËh²hubj\)�”}”(hŒLNote that input core serializes calls to connect() and disconnect() methods.”h]”hŒLNote that input core serializes calls to connect() and disconnect() methods.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M=hhËh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_handle (C struct)”Œc.input_handle”hNt”auh1hÜhhËh²hh³híh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ input_handle”h]”hú)�”}”(hŒstruct input_handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjªh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MCubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªh²hh³j»h´MCubj#)�”}”(hŒ input_handle”h]”j))�”}”(hj¨h]”hŒ input_handle”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÊubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjªh²hh³j»h´MCubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj¦h²hh³j»h´MCubah}”(h]”j¡ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j»h´MChj£h²hubjW)�”}”(hhh]”j\)�”}”(hŒ(links input device with an input handler”h]”hŒ(links input device with an input handler”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MZhjíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj£h²hh³j»h´MCubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{jj|jj}‰j~‰j‰uh1hîh²hhhËh³híh´Nubj�)�”}”(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 events”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M^hj ubj¦)�”}”(hXCstruct 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]”hXCstruct 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; };”…”�”}”hj-sbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M`hj ubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hj>h]”hŒMembers”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mkhj ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ"``private`` handler-specific data ”h]”(jÚ)�”}”(hŒ ``private``”h]”jà)�”}”(hj]h]”hŒprivate”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M\hjWubjö)�”}”(hhh]”j\)�”}”(hŒhandler-specific data”h]”hŒhandler-specific data”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jrh´M\hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jrh´M\hjTubjÔ)�”}”(hŒb``open`` counter showing whether the handle is 'open', i.e. should deliver events from its device ”h]”(jÚ)�”}”(hŒ``open``”h]”jà)�”}”(hj–h]”hŒopen”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M^hj�ubjö)�”}”(hhh]”j\)�”}”(hŒXcounter showing whether the handle is 'open', i.e. should deliver events from its device”h]”hŒ\counter showing whether the handle is ‘open’, i.e. should deliver events from its device”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M]hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j«h´M^hjTubjÔ)�”}”(hŒ=``name`` name given to the handle by handler that created it ”h]”(jÚ)�”}”(hŒ``name``”h]”jà)�”}”(hjÐh]”hŒname”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M_hjÊubjö)�”}”(hhh]”j\)�”}”(hŒ3name given to the handle by handler that created it”h]”hŒ3name given to the handle by handler that created it”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jåh´M_hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jåh´M_hjTubjÔ)�”}”(hŒ/``dev`` input device the handle is attached to ”h]”(jÚ)�”}”(hŒ``dev``”h]”jà)�”}”(hj h]”hŒdev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M`hjubjö)�”}”(hhh]”j\)�”}”(hŒ&input device the handle is attached to”h]”hŒ&input device the handle is attached to”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jh´M`hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jh´M`hjTubjÔ)�”}”(hŒC``handler`` handler that works with the device through this handle ”h]”(jÚ)�”}”(hŒ ``handler``”h]”jà)�”}”(hjBh]”hŒhandler”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mahj<ubjö)�”}”(hhh]”j\)�”}”(hŒ6handler that works with the device through this handle”h]”hŒ6handler that works with the device through this handle”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jWh´MahjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jWh´MahjTubjÔ)�”}”(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}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mfhjuubjö)�”}”(hhh]”j\)�”}”(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]”(hŒkevent sequence handler. It is set up by the input core according to event handling method specified in the ”…”�”}”(hj”h²hh³Nh´Nubj‹)�”}”(hŒ **handler**”h]”hŒhandler”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj”ubhŒ«. 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.”…”�”}”(hj”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mbhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j�h´MfhjTubjÔ)�”}”(hŒG``d_node`` used to put the handle on device's list of attached handles ”h]”(jÚ)�”}”(hŒ ``d_node``”h]”jà)�”}”(hjÇh]”hŒd_node”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MghjÁubjö)�”}”(hhh]”j\)�”}”(hŒ;used to put the handle on device's list of attached handles”h]”hŒ=used to put the handle on device’s list of attached handles”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÜh´MghjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÜh´MghjTubjÔ)�”}”(hŒX``h_node`` used to put the handle on handler's list of handles from which it gets events”h]”(jÚ)�”}”(hŒ ``h_node``”h]”jà)�”}”(hjh]”hŒh_node”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mhhjúubjö)�”}”(hhh]”j\)�”}”(hŒMused to put the handle on handler's list of handles from which it gets events”h]”hŒOused to put the handle on handler’s list of handles from which it gets events”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jh´Mhhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jh´MhhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³híh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(input_set_events_per_packet (C function)”Œc.input_set_events_per_packet”hNt”auh1hÜhhËh²hh³híh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒFvoid input_set_events_per_packet (struct input_dev *dev, int n_events)”h]”hú)�”}”(hŒEvoid input_set_events_per_packet(struct input_dev *dev, int n_events)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jYhjUh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Máubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUh²hh³jjh´Máubj#)�”}”(hŒinput_set_events_per_packet”h]”j))�”}”(hŒinput_set_events_per_packet”h]”hŒinput_set_events_per_packet”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjyubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjUh²hh³jjh´MáubhŒdesc_parameterlist”“”)�”}”(hŒ%(struct input_dev *dev, int n_events)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”Œ identifier”Œ reftarget”j½Œmodname”NŒ classname”Njm jp )�”}”js ]”jn Œ ASTIdentifier”“”)�”}”jÑjsbŒc.input_set_events_per_packet”†”asbuh1hhj™ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jìhj™ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj“ubj˜)�”}”(hŒ int n_events”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubj))�”}”(hŒn_events”h]”hŒn_events”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj“ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjUh²hh³jjh´Máubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjQh²hh³jjh´Máubah}”(h]”jLah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jjh´MáhjNh²hubjW)�”}”(hhh]”j\)�”}”(hŒ)tell handlers about the driver event rate”h]”hŒ)tell handlers about the driver event rate”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MáhjYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjNh²hh³jjh´Máubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jtj|jtj}‰j~‰j‰uh1hîh²hhhËh³híh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj~h]”hŒ Parameters”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MåhjxubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ>``struct input_dev *dev`` the input device used by the driver ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj�h]”hŒstruct input_dev *dev”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mâhj—ubjö)�”}”(hhh]”j\)�”}”(hŒ#the input device used by the driver”h]”hŒ#the input device used by the driver”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j²h´Mâhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j²h´Mâhj”ubjÔ)�”}”(hŒL``int n_events`` the average number of events between calls to input_sync() ”h]”(jÚ)�”}”(hŒ``int n_events``”h]”jà)�”}”(hjÖh]”hŒ int n_events”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´MãhjÐubjö)�”}”(hhh]”j\)�”}”(hŒ:the average number of events between calls to input_sync()”h]”hŒ:the average number of events between calls to input_sync()”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jëh´Mãhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jëh´Mãhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjxubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Måhjxubj\)�”}”(hŒå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]”hŒå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.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mähjxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³híh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒff_device (C struct)”Œ c.ff_device”hNt”auh1hÜhhËh²hh³híh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ ff_device”h]”hú)�”}”(hŒstruct ff_device”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjRh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´Mìubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRh²hh³jch´Mìubj#)�”}”(hŒ ff_device”h]”j))�”}”(hjPh]”hŒ ff_device”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjrubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjRh²hh³jch´Mìubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjNh²hh³jch´Mìubah}”(h]”jIah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jch´MìhjKh²hubjW)�”}”(hhh]”j\)�”}”(hŒ&force-feedback part of an input device”h]”hŒ&force-feedback part of an input device”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M hj•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjKh²hh³jch´Mìubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{j°j|j°j}‰j~‰j‰uh1hîh²hhhËh³híh´Nubj�)�”}”(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 (*stop)(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 ``stop`` called by input core when parent input device is being unregistered ``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 erased”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¸ubhŒ:”…”�”}”(hj¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M$hj´ubj¦)�”}”(hXgstruct 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 (*stop)(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]”hXgstruct 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 (*stop)(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[]; };”…”�”}”hjÕsbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M&hj´ubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hjæh]”hŒMembers”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M6hj´ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ6``upload`` Called to upload an new effect into device ”h]”(jÚ)�”}”(hŒ ``upload``”h]”jà)�”}”(hjh]”hŒupload”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M"hjÿubjö)�”}”(hhh]”j\)�”}”(hŒ*Called to upload an new effect into device”h]”hŒ*Called to upload an new effect into device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jh´M"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jh´M"hjüubjÔ)�”}”(hŒ0``erase`` Called to erase an effect from device ”h]”(jÚ)�”}”(hŒ ``erase``”h]”jà)�”}”(hj>h]”hŒerase”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M#hj8ubjö)�”}”(hhh]”j\)�”}”(hŒ%Called to erase an effect from device”h]”hŒ%Called to erase an effect from device”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jSh´M#hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jSh´M#hjüubjÔ)�”}”(hŒH``playback`` Called to request device to start playing specified effect ”h]”(jÚ)�”}”(hŒ ``playback``”h]”jà)�”}”(hjwh]”hŒplayback”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M$hjqubjö)�”}”(hhh]”j\)�”}”(hŒ:Called to request device to start playing specified effect”h]”hŒ:Called to request device to start playing specified effect”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jŒh´M$hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jŒh´M$hjüubjÔ)�”}”(hŒ*``set_gain`` Called to set specified gain ”h]”(jÚ)�”}”(hŒ ``set_gain``”h]”jà)�”}”(hj°h]”hŒset_gain”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M%hjªubjö)�”}”(hhh]”j\)�”}”(hŒCalled to set specified gain”h]”hŒCalled to set specified gain”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÅh´M%hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÅh´M%hjüubjÔ)�”}”(hŒ0``set_autocenter`` Called to auto-center device ”h]”(jÚ)�”}”(hŒ``set_autocenter``”h]”jà)�”}”(hjéh]”hŒset_autocenter”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M&hjãubjö)�”}”(hhh]”j\)�”}”(hŒCalled to auto-center device”h]”hŒCalled to auto-center device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jþh´M&hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jþh´M&hjüubjÔ)�”}”(hŒM``destroy`` called by input core when parent input device is being destroyed ”h]”(jÚ)�”}”(hŒ ``destroy``”h]”jà)�”}”(hj"h]”hŒdestroy”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M(hjubjö)�”}”(hhh]”j\)�”}”(hŒ@called by input core when parent input device is being destroyed”h]”hŒ@called by input core when parent input device is being destroyed”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M'hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j7h´M(hjüubjÔ)�”}”(hŒM``stop`` called by input core when parent input device is being unregistered ”h]”(jÚ)�”}”(hŒ``stop``”h]”jà)�”}”(hj\h]”hŒstop”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M*hjVubjö)�”}”(hhh]”j\)�”}”(hŒCcalled by input core when parent input device is being unregistered”h]”hŒCcalled by input core when parent input device is being unregistered”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M)hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jqh´M*hjüubjÔ)�”}”(hŒ>``private`` driver-specific data, will be freed automatically ”h]”(jÚ)�”}”(hŒ ``private``”h]”jà)�”}”(hj–h]”hŒprivate”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M+hj�ubjö)�”}”(hhh]”j\)�”}”(hŒ1driver-specific data, will be freed automatically”h]”hŒ1driver-specific data, will be freed automatically”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j«h´M+hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j«h´M+hjüubjÔ)�”}”(hŒw``ffbit`` bitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit) ”h]”(jÚ)�”}”(hŒ ``ffbit``”h]”jà)�”}”(hjÏh]”hŒffbit”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M-hjÉubjö)�”}”(hhh]”j\)�”}”(hŒlbitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit)”h]”hŒlbitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit)”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M,hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jäh´M-hjüubjÔ)�”}”(hŒ5``mutex`` mutex for serializing access to the device ”h]”(jÚ)�”}”(hŒ ``mutex``”h]”jà)�”}”(hj h]”hŒmutex”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M.hjubjö)�”}”(hhh]”j\)�”}”(hŒ*mutex for serializing access to the device”h]”hŒ*mutex for serializing access to the device”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jh´M.hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jh´M.hjüubjÔ)�”}”(hŒ>``max_effects`` maximum number of effects supported by device ”h]”(jÚ)�”}”(hŒ``max_effects``”h]”jà)�”}”(hjBh]”hŒ max_effects”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M/hj<ubjö)�”}”(hhh]”j\)�”}”(hŒ-maximum number of effects supported by device”h]”hŒ-maximum number of effects supported by device”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jWh´M/hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jWh´M/hjüubjÔ)�”}”(hŒH``effects`` pointer to an array of effects currently loaded into device ”h]”(jÚ)�”}”(hŒ ``effects``”h]”jà)�”}”(hj{h]”hŒeffects”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M0hjuubjö)�”}”(hhh]”j\)�”}”(hŒ;pointer to an array of effects currently loaded into device”h]”hŒ;pointer to an array of effects currently loaded into device”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j�h´M0hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j�h´M0hjüubjÔ)�”}”(hŒz``effect_owners`` array of effect owners; when file handle owning an effect gets closed the effect is automatically erased”h]”(jÚ)�”}”(hŒ``effect_owners``”h]”jà)�”}”(hj´h]”hŒ effect_owners”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M1hj®ubjö)�”}”(hhh]”j\)�”}”(hŒharray of effect owners; when file handle owning an effect gets closed the effect is automatically erased”h]”hŒharray of effect owners; when file handle owning an effect gets closed the effect is automatically erased”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÉh´M1hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÉh´M1hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³híh´Nubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjöh]”hŒ Description”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M5hhËh²hubj\)�”}”(hŒËEvery 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]”hŒËEvery 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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M2hhËh²hubj\)�”}”(hŒŽNote that playback(), set_gain() and set_autocenter() are called with dev->event_lock spinlock held and interrupts off and thus may not sleep.”h]”hŒŽNote that playback(), set_gain() and set_autocenter() are called with dev->event_lock spinlock held and interrupts off and thus may not sleep.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.h”h´M7hhËh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_event (C function)”Œ c.input_event”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒYvoid input_event (struct input_dev *dev, unsigned int type, unsigned int code, int value)”h]”hú)�”}”(hŒXvoid input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj?h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mwubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?h²hh³jQh´Mwubj#)�”}”(hŒ input_event”h]”j))�”}”(hŒ input_event”h]”hŒ input_event”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj`ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj?h²hh³jQh´Mwubj’)�”}”(hŒH(struct input_dev *dev, unsigned int type, unsigned int code, int value)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj|ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjfsbŒ c.input_event”†”asbuh1hhj|ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj|ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjxubj˜)�”}”(hŒunsigned int type”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjîubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjîubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîubj))�”}”(hŒtype”h]”hŒtype”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjxubj˜)�”}”(hŒunsigned int code”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj?ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj?ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubj))�”}”(hŒcode”h]”hŒcode”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjxubj˜)�”}”(hŒ int value”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubj))�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjxubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj?h²hh³jQh´Mwubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj;h²hh³jQh´Mwubah}”(h]”j6ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jQh´Mwhj8h²hubjW)�”}”(hhh]”j\)�”}”(hŒreport new input event”h]”hŒreport new input event”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mwhj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj8h²hh³jQh´Mwubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jòj|jòj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M{hjöubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ:``struct input_dev *dev`` device that generated the event ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjh]”hŒstruct input_dev *dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mxhjubjö)�”}”(hhh]”j\)�”}”(hŒdevice that generated the event”h]”hŒdevice that generated the event”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j0h´Mxhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j0h´MxhjubjÔ)�”}”(hŒ(``unsigned int type`` type of the event ”h]”(jÚ)�”}”(hŒ``unsigned int type``”h]”jà)�”}”(hjTh]”hŒunsigned int type”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MyhjNubjö)�”}”(hhh]”j\)�”}”(hŒtype of the event”h]”hŒtype of the event”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jih´Myhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jih´MyhjubjÔ)�”}”(hŒ!``unsigned int code`` event code ”h]”(jÚ)�”}”(hŒ``unsigned int code``”h]”jà)�”}”(hj�h]”hŒunsigned int code”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mzhj‡ubjö)�”}”(hhh]”j\)�”}”(hŒ event code”h]”hŒ event code”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¢h´Mzhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¢h´MzhjubjÔ)�”}”(hŒ!``int value`` value of the event ”h]”(jÚ)�”}”(hŒ ``int value``”h]”jà)�”}”(hjÆh]”hŒ int value”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M{hjÀubjö)�”}”(hhh]”j\)�”}”(hŒvalue of the event”h]”hŒvalue of the event”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÛh´M{hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÛh´M{hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjöubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M}hjöubj\)�”}”(hŒ�This function should be used by drivers implementing various input devices to report input events. See also input_inject_event().”h]”hŒ�This function should be used by drivers implementing various input devices to report input events. See also input_inject_event().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M|hjöubj\)�”}”(hŒ**NOTE**”h]”j‹)�”}”(hj(h]”hŒNOTE”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhjöubj\)�”}”(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.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M€hjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_inject_event (C function)”Œc.input_inject_event”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒfvoid input_inject_event (struct input_handle *handle, unsigned int type, unsigned int code, int value)”h]”hú)�”}”(hŒevoid input_inject_event(struct input_handle *handle, unsigned int type, unsigned int code, int value)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjih²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M’ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjih²hh³j{h´M’ubj#)�”}”(hŒinput_inject_event”h]”j))�”}”(hŒinput_inject_event”h]”hŒinput_inject_event”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjŠubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjih²hh³j{h´M’ubj’)�”}”(hŒN(struct input_handle *handle, unsigned int type, unsigned int code, int value)”h]”(j˜)�”}”(hŒstruct input_handle *handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¦ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÊŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj�sbŒc.input_inject_event”†”asbuh1hhj¦ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj¦ubj))�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¢ubj˜)�”}”(hŒunsigned int type”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubj))�”}”(hŒtype”h]”hŒtype”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¢ubj˜)�”}”(hŒunsigned int code”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhji ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhji ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji ubj))�”}”(hŒcode”h]”hŒcode”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hji ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¢ubj˜)�”}”(hŒ int value”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjº ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº ubj))�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjº ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjih²hh³j{h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjeh²hh³j{h´M’ubah}”(h]”j`ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j{h´M’hjbh²hubjW)�”}”(hhh]”j\)�”}”(hŒ#send input event from input handler”h]”hŒ#send input event from input handler”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M’hj!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjbh²hh³j{h´M’ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j!j|j!j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj&!h]”hŒ Parameters”…”�”}”(hj(!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj$!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M–hj !ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒC``struct input_handle *handle`` input handle to send event through ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hjE!h]”hŒstruct input_handle *handle”…”�”}”(hjG!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjC!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M“hj?!ubjö)�”}”(hhh]”j\)�”}”(hŒ"input handle to send event through”h]”hŒ"input handle to send event through”…”�”}”(hj^!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jZ!h´M“hj[!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj?!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jZ!h´M“hj'ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jY'h´Mhj@'h²hubjW)�”}”(hhh]”j\)�”}”(hŒgrabs device for exclusive use”h]”hŒgrabs device for exclusive use”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj@'h²hh³jY'h´Mubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j#(j|j#(j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj-(h]”hŒ Parameters”…”�”}”(hj/(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj+(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj'(ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒJ``struct input_handle *handle`` input handle that wants to own the device ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hjL(h]”hŒstruct input_handle *handle”…”�”}”(hjN(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjJ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MhjF(ubjö)�”}”(hhh]”j\)�”}”(hŒ)input handle that wants to own the device”h]”hŒ)input handle that wants to own the device”…”�”}”(hje(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ja(h´Mhjb(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjF(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³ja(h´MhjC(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj'(ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj‡(h]”hŒ Description”…”�”}”(hj‰(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj…(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj'(ubj\)�”}”(hŒÂ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]”hŒÂ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.”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj'(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!input_release_device (C function)”Œc.input_release_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ7void input_release_device (struct input_handle *handle)”h]”hú)�”}”(hŒ6void input_release_device(struct input_handle *handle)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÌ(h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÈ(h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ(h²hh³jÚ(h´M*ubj#)�”}”(hŒinput_release_device”h]”j))�”}”(hŒinput_release_device”h]”hŒinput_release_device”…”�”}”(hjí(h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjé(ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjÈ(h²hh³jÚ(h´M*ubj’)�”}”(hŒ(struct input_handle *handle)”h]”j˜)�”}”(hŒstruct input_handle *handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj)ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)ubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hj')h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj$)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j))Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjï(sbŒc.input_release_device”†”asbuh1hhj)ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjU)h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj)ubj))�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjb)h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj)ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjÈ(h²hh³jÚ(h´M*ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÄ(h²hh³jÚ(h´M*ubah}”(h]”j¿(ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jÚ(h´M*hjÁ(h²hubjW)�”}”(hhh]”j\)�”}”(hŒ!release previously grabbed device”h]”hŒ!release previously grabbed device”…”�”}”(hjŒ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M*hj‰)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÁ(h²hh³jÚ(h´M*ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j¤)j|j¤)j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj®)h]”hŒ Parameters”…”�”}”(hj°)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¬)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M.hj¨)ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒB``struct input_handle *handle`` input handle that owns the device ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hjÍ)h]”hŒstruct input_handle *handle”…”�”}”(hjÏ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjË)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M+hjÇ)ubjö)�”}”(hhh]”j\)�”}”(hŒ!input handle that owns the device”h]”hŒ!input handle that owns the device”…”�”}”(hjæ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jâ)h´M+hjã)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÇ)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jâ)h´M+hjÄ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj¨)ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj*h]”hŒ Description”…”�”}”(hj *h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M-hj¨)ubj\)�”}”(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*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M,hj¨)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_open_device (C function)”Œc.input_open_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ3int input_open_device (struct input_handle *handle)”h]”hú)�”}”(hŒ2int input_open_device(struct input_handle *handle)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjM*h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjI*h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI*h²hh³j[*h´M�ubj#)�”}”(hŒinput_open_device”h]”j))�”}”(hŒinput_open_device”h]”hŒinput_open_device”…”�”}”(hjn*h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjj*ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjI*h²hh³j[*h´M�ubj’)�”}”(hŒ(struct input_handle *handle)”h]”j˜)�”}”(hŒstruct input_handle *handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjŠ*h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj†*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†*ubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hj¨*h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¥*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jª*Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjp*sbŒc.input_open_device”†”asbuh1hhj†*ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†*ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÖ*h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj†*ubj))�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjã*h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj†*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj‚*ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjI*h²hh³j[*h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjE*h²hh³j[*h´M�ubah}”(h]”j@*ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j[*h´M�hjB*h²hubjW)�”}”(hhh]”j\)�”}”(hŒopen input device”h]”hŒopen input device”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M�hj +h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjB*h²hh³j[*h´M�ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j%+j|j%+j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj/+h]”hŒ Parameters”…”�”}”(hj1+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj-+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M…hj)+ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒN``struct input_handle *handle`` handle through which device is being accessed ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hjN+h]”hŒstruct input_handle *handle”…”�”}”(hjP+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjL+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M‚hjH+ubjö)�”}”(hhh]”j\)�”}”(hŒ-handle through which device is being accessed”h]”hŒ-handle through which device is being accessed”…”�”}”(hjg+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jc+h´M‚hjd+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjH+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jc+h´M‚hjE+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj)+ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj‰+h]”hŒ Description”…”�”}”(hj‹+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‡+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M„hj)+ubj\)�”}”(hŒpThis function should be called by input handlers when they want to start receive events from given input device.”h]”hŒpThis function should be called by input handlers when they want to start receive events from given input device.”…”�”}”(hjŸ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mƒhj)+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_close_device (C function)”Œc.input_close_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ5void input_close_device (struct input_handle *handle)”h]”hú)�”}”(hŒ4void input_close_device(struct input_handle *handle)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÎ+h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÊ+h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mµubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊ+h²hh³jÜ+h´Mµubj#)�”}”(hŒinput_close_device”h]”j))�”}”(hŒinput_close_device”h]”hŒinput_close_device”…”�”}”(hjï+h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjë+ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjÊ+h²hh³jÜ+h´Mµubj’)�”}”(hŒ(struct input_handle *handle)”h]”j˜)�”}”(hŒstruct input_handle *handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj,ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,ubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hj),h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj&,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j+,Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjñ+sbŒc.input_close_device”†”asbuh1hhj,ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjW,h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj,ubj))�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjd,h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj,ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjÊ+h²hh³jÜ+h´Mµubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÆ+h²hh³jÜ+h´Mµubah}”(h]”jÁ+ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jÜ+h´MµhjÃ+h²hubjW)�”}”(hhh]”j\)�”}”(hŒclose input device”h]”hŒclose input device”…”�”}”(hjŽ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mµhj‹,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÃ+h²hh³jÜ+h´Mµubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j¦,j|j¦,j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj°,h]”hŒ Parameters”…”�”}”(hj²,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj®,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¹hjª,ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒN``struct input_handle *handle`` handle through which device is being accessed ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hjÏ,h]”hŒstruct input_handle *handle”…”�”}”(hjÑ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÍ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¶hjÉ,ubjö)�”}”(hhh]”j\)�”}”(hŒ-handle through which device is being accessed”h]”hŒ-handle through which device is being accessed”…”�”}”(hjè,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jä,h´M¶hjå,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÉ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jä,h´M¶hjÆ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjª,ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj -h]”hŒ Description”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¸hjª,ubj\)�”}”(hŒoThis function should be called by input handlers when they want to stop receive events from given input device.”h]”hŒoThis function should be called by input handlers when they want to stop receive events from given input device.”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M·hjª,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%input_scancode_to_scalar (C function)”Œc.input_scancode_to_scalar”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒZint input_scancode_to_scalar (const struct input_keymap_entry *ke, unsigned int *scancode)”h]”hú)�”}”(hŒYint input_scancode_to_scalar(const struct input_keymap_entry *ke, unsigned int *scancode)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjO-h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjK-h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK-h²hh³j]-h´Mubj#)�”}”(hŒinput_scancode_to_scalar”h]”j))�”}”(hŒinput_scancode_to_scalar”h]”hŒinput_scancode_to_scalar”…”�”}”(hjp-h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjl-ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjK-h²hh³j]-h´Mubj’)�”}”(hŒ=(const struct input_keymap_entry *ke, unsigned int *scancode)”h]”(j˜)�”}”(hŒ#const struct input_keymap_entry *ke”h]”(j)�”}”(hjó$h]”hŒconst”…”�”}”(hjŒ-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjˆ-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ-ubj)�”}”(hjh]”hŒstruct”…”�”}”(hj§-h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjˆ-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ-ubh)�”}”(hhh]”j))�”}”(hŒinput_keymap_entry”h]”hŒinput_keymap_entry”…”�”}”(hjÅ-h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÂ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÇ-Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjr-sbŒc.input_scancode_to_scalar”†”asbuh1hhjˆ-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ-ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjó-h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjˆ-ubj))�”}”(hŒke”h]”hŒke”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjˆ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj„-ubj˜)�”}”(hŒunsigned int *scancode”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj5.h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj.ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjQ.h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj.ubj))�”}”(hŒscancode”h]”hŒscancode”…”�”}”(hj^.h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj„-ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjK-h²hh³j]-h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjG-h²hh³j]-h´Mubah}”(h]”jB-ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j]-h´MhjD-h²hubjW)�”}”(hhh]”j\)�”}”(hŒMconverts scancode in :c:type:`struct input_keymap_entry `”h]”(hŒconverts scancode in ”…”�”}”(hjˆ.h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct input_keymap_entry `”h]”jà)�”}”(hj’.h]”hŒstruct input_keymap_entry”…”�”}”(hj”.h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhj�.ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jp )�”}”js ]”já-Œc.input_scancode_to_scalar”†”asbju Œinput_keymap_entry”uh1hh³jQh´Mwhjˆ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj….h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjD-h²hh³j]-h´Mubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jÄ.j|jÄ.j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjÎ.h]”hŒ Parameters”…”�”}”(hjÐ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÌ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MhjÈ.ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒZ``const struct input_keymap_entry *ke`` keymap entry containing scancode to be converted. ”h]”(jÚ)�”}”(hŒ'``const struct input_keymap_entry *ke``”h]”jà)�”}”(hjí.h]”hŒ#const struct input_keymap_entry *ke”…”�”}”(hjï.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjë.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhjç.ubjö)�”}”(hhh]”j\)�”}”(hŒ1keymap entry containing scancode to be converted.”h]”hŒ1keymap entry containing scancode to be converted.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j/h´Mhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjç.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j/h´Mhjä.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]”hŒunsigned int *scancode”…”�”}”(hj(/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj$/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj /ubjö)�”}”(hhh]”j\)�”}”(hŒBpointer to the location where converted scancode should be stored.”h]”hŒBpointer to the location where converted scancode should be stored.”…”�”}”(hj?/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj` into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as 'unsigned int'.”h]”(hŒ4This function is used to convert scancode stored in ”…”�”}”(hjx/h²hh³Nh´Nubh)�”}”(hŒ,:c:type:`struct keymap_entry `”h]”jà)�”}”(hj‚/h]”hŒstruct keymap_entry”…”�”}”(hj„/h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhj€/ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œ keymap_entry”uh1hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhjx/ubhŒ‡ into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as ‘unsigned int’.”…”�”}”(hjx/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jŸ/h´MhjÈ.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%input_default_setkeycode (C function)”Œc.input_default_setkeycode”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒtint input_default_setkeycode (struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)”h]”hú)�”}”(hŒsint input_default_setkeycode(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊ/h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÆ/h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆ/h²hh³jØ/h´Mcubj#)�”}”(hŒinput_default_setkeycode”h]”j))�”}”(hŒinput_default_setkeycode”h]”hŒinput_default_setkeycode”…”�”}”(hjë/h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjç/ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjÆ/h²hh³jØ/h´Mcubj’)�”}”(hŒW(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj%0h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj"0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j'0Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjí/sbŒc.input_default_setkeycode”†”asbuh1hhj0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjS0h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj0ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj`0h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÿ/ubj˜)�”}”(hŒ#const struct input_keymap_entry *ke”h]”(j)�”}”(hjó$h]”hŒconst”…”�”}”(hjy0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhju0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju0ubj)�”}”(hjh]”hŒstruct”…”�”}”(hj”0h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhju0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju0ubh)�”}”(hhh]”j))�”}”(hŒinput_keymap_entry”h]”hŒinput_keymap_entry”…”�”}”(hj²0h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¯0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j´0Œmodname”NŒ classname”Njm jp )�”}”js ]”jA0Œc.input_default_setkeycode”†”asbuh1hhju0ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju0ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÞ0h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhju0ubj))�”}”(hŒke”h]”hŒke”…”�”}”(hjë0h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hju0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÿ/ubj˜)�”}”(hŒunsigned int *old_keycode”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj<1h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj1ubj))�”}”(hŒ old_keycode”h]”hŒ old_keycode”…”�”}”(hjI1h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÿ/ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjÆ/h²hh³jØ/h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÂ/h²hh³jØ/h´Mcubah}”(h]”j½/ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jØ/h´Mchj¿/h²hubjW)�”}”(hhh]”j\)�”}”(hŒdefault setkeycode method”h]”hŒdefault setkeycode method”…”�”}”(hjs1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mchjp1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¿/h²hh³jØ/h´Mcubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j‹1j|j‹1j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(hXz**Parameters** ``struct input_dev *dev`` input device which keymap is being updated. ``const struct input_keymap_entry *ke`` new keymap entry. ``unsigned int *old_keycode`` pointer to the location where old keycode should be stored. **Description** This function is the default implementation of :c:type:`input_dev.setkeycode\(\) ` method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it. The function must be called with :c:type:`input_dev.event_lock ` held. **Return** 0 on success, or a negative error code on failure.”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj•1h]”hŒ Parameters”…”�”}”(hj—1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj“1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mghj�1ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒF``struct input_dev *dev`` input device which keymap is being updated. ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj´1h]”hŒstruct input_dev *dev”…”�”}”(hj¶1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj²1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mdhj®1ubjö)�”}”(hhh]”j\)�”}”(hŒ+input device which keymap is being updated.”h]”hŒ+input device which keymap is being updated.”…”�”}”(hjÍ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÉ1h´MdhjÊ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj®1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÉ1h´Mdhj«1ubjÔ)�”}”(hŒ:``const struct input_keymap_entry *ke`` new keymap entry. ”h]”(jÚ)�”}”(hŒ'``const struct input_keymap_entry *ke``”h]”jà)�”}”(hjí1h]”hŒ#const struct input_keymap_entry *ke”…”�”}”(hjï1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjë1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mehjç1ubjö)�”}”(hhh]”j\)�”}”(hŒnew keymap entry.”h]”hŒnew keymap entry.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j2h´Mehj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjç1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j2h´Mehj«1ubjÔ)�”}”(hŒZ``unsigned int *old_keycode`` pointer to the location where old keycode should be stored. ”h]”(jÚ)�”}”(hŒ``unsigned int *old_keycode``”h]”jà)�”}”(hj&2h]”hŒunsigned int *old_keycode”…”�”}”(hj(2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj$2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mfhj 2ubjö)�”}”(hhh]”j\)�”}”(hŒ;pointer to the location where old keycode should be stored.”h]”hŒ;pointer to the location where old keycode should be stored.”…”�”}”(hj?2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j;2h´Mfhj<2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj 2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j;2h´Mfhj«1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj�1ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hja2h]”hŒ Description”…”�”}”(hjc2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj_2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhhj�1ubj\)�”}”(hŒãThis function is the default implementation of :c:type:`input_dev.setkeycode\(\) ` method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it.”h]”(hŒ/This function is the default implementation of ”…”�”}”(hjw2h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`input_dev.setkeycode\(\) `”h]”jà)�”}”(hj�2h]”hŒinput_dev.setkeycode()”…”�”}”(hjƒ2h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhj2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œ input_dev”uh1hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mghjw2ubhŒ† method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it.”…”�”}”(hjw2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jž2h´Mghj�1ubj\)�”}”(hŒQThe function must be called with :c:type:`input_dev.event_lock ` held.”h]”(hŒ!The function must be called with ”…”�”}”(hj©2h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`input_dev.event_lock `”h]”jà)�”}”(hj³2h]”hŒinput_dev.event_lock”…”�”}”(hjµ2h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhj±2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œ input_dev”uh1hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mkhj©2ubhŒ held.”…”�”}”(hj©2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÐ2h´Mkhj�1ubj\)�”}”(hŒ **Return**”h]”j‹)�”}”(hjÝ2h]”hŒReturn”…”�”}”(hjß2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÛ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mmhj�1ubj\)�”}”(hŒ20 on success, or a negative error code on failure.”h]”hŒ20 on success, or a negative error code on failure.”…”�”}”(hjó2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mnhj�1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_get_keycode (C function)”Œc.input_get_keycode”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒLint input_get_keycode (struct input_dev *dev, struct input_keymap_entry *ke)”h]”hú)�”}”(hŒKint input_get_keycode(struct input_dev *dev, struct input_keymap_entry *ke)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj3h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M²ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj13h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3h²hh³j03h´M²ubj#)�”}”(hŒinput_get_keycode”h]”j))�”}”(hŒinput_get_keycode”h]”hŒinput_get_keycode”…”�”}”(hjC3h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj?3ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj3h²hh³j03h´M²ubj’)�”}”(hŒ6(struct input_dev *dev, struct input_keymap_entry *ke)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj_3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj[3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[3ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj}3h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjz3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j3Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjE3sbŒc.input_get_keycode”†”asbuh1hhj[3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[3ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj«3h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj[3ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¸3h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj[3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjW3ubj˜)�”}”(hŒstruct input_keymap_entry *ke”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÑ3h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÍ3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍ3ubh)�”}”(hhh]”j))�”}”(hŒinput_keymap_entry”h]”hŒinput_keymap_entry”…”�”}”(hjï3h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjì3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jñ3Œmodname”NŒ classname”Njm jp )�”}”js ]”j™3Œc.input_get_keycode”†”asbuh1hhjÍ3ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍ3ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjÍ3ubj))�”}”(hŒke”h]”hŒke”…”�”}”(hj(4h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÍ3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjW3ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj3h²hh³j03h´M²ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj3h²hh³j03h´M²ubah}”(h]”j3ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j03h´M²hj3h²hubjW)�”}”(hhh]”j\)�”}”(hŒ5retrieve keycode currently mapped to a given scancode”h]”hŒ5retrieve keycode currently mapped to a given scancode”…”�”}”(hjR4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M²hjO4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj3h²hh³j03h´M²ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jj4j|jj4j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjt4h]”hŒ Parameters”…”�”}”(hjv4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjr4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¶hjn4ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒE``struct input_dev *dev`` input device which keymap is being queried ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj“4h]”hŒstruct input_dev *dev”…”�”}”(hj•4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj‘4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M³hj�4ubjö)�”}”(hhh]”j\)�”}”(hŒ*input device which keymap is being queried”h]”hŒ*input device which keymap is being queried”…”�”}”(hj¬4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¨4h´M³hj©4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj�4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¨4h´M³hjŠ4ubjÔ)�”}”(hŒ/``struct input_keymap_entry *ke`` keymap entry ”h]”(jÚ)�”}”(hŒ!``struct input_keymap_entry *ke``”h]”jà)�”}”(hjÌ4h]”hŒstruct input_keymap_entry *ke”…”�”}”(hjÎ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÊ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M´hjÆ4ubjö)�”}”(hhh]”j\)�”}”(hŒ keymap entry”h]”hŒ keymap entry”…”�”}”(hjå4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³já4h´M´hjâ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÆ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³já4h´M´hjŠ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjn4ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj5h]”hŒ Description”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¶hjn4ubj\)�”}”(hŒrThis function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.”h]”hŒrThis function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mµhjn4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_set_keycode (C function)”Œc.input_set_keycode”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒRint input_set_keycode (struct input_dev *dev, const struct input_keymap_entry *ke)”h]”hú)�”}”(hŒQint input_set_keycode(struct input_dev *dev, const struct input_keymap_entry *ke)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjL5h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjH5h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÂubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH5h²hh³jZ5h´MÂubj#)�”}”(hŒinput_set_keycode”h]”j))�”}”(hŒinput_set_keycode”h]”hŒinput_set_keycode”…”�”}”(hjm5h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hji5ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjH5h²hh³jZ5h´MÂubj’)�”}”(hŒ<(struct input_dev *dev, const struct input_keymap_entry *ke)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj‰5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj…5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…5ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj§5h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¤5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j©5Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjo5sbŒc.input_set_keycode”†”asbuh1hhj…5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…5ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÕ5h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj…5ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjâ5h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj…5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj�5ubj˜)�”}”(hŒ#const struct input_keymap_entry *ke”h]”(j)�”}”(hjó$h]”hŒconst”…”�”}”(hjû5h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj÷5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷5ubj)�”}”(hjh]”hŒstruct”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj÷5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷5ubh)�”}”(hhh]”j))�”}”(hŒinput_keymap_entry”h]”hŒinput_keymap_entry”…”�”}”(hj46h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj16ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j66Œmodname”NŒ classname”Njm jp )�”}”js ]”jÃ5Œc.input_set_keycode”†”asbuh1hhj÷5ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷5ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj`6h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj÷5ubj))�”}”(hŒke”h]”hŒke”…”�”}”(hjm6h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj÷5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj�5ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjH5h²hh³jZ5h´MÂubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjD5h²hh³jZ5h´MÂubah}”(h]”j?5ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jZ5h´MÂhjA5h²hubjW)�”}”(hhh]”j\)�”}”(hŒ'attribute a keycode to a given scancode”•h]”hŒ'attribute a keycode to a given scancode”…”�”}”(hj—6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÂhj”6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjA5h²hh³jZ5h´MÂubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j¯6j|j¯6j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj¹6h]”hŒ Parameters”…”�”}”(hj»6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj·6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÆhj³6ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒE``struct input_dev *dev`` input device which keymap is being updated ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjØ6h]”hŒstruct input_dev *dev”…”�”}”(hjÚ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÖ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÃhjÒ6ubjö)�”}”(hhh]”j\)�”}”(hŒ*input device which keymap is being updated”h]”hŒ*input device which keymap is being updated”…”�”}”(hjñ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jí6h´MÃhjî6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÒ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jí6h´MÃhjÏ6ubjÔ)�”}”(hŒ9``const struct input_keymap_entry *ke`` new keymap entry ”h]”(jÚ)�”}”(hŒ'``const struct input_keymap_entry *ke``”h]”jà)�”}”(hj7h]”hŒ#const struct input_keymap_entry *ke”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÄhj 7ubjö)�”}”(hhh]”j\)�”}”(hŒnew keymap entry”h]”hŒnew keymap entry”…”�”}”(hj*7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j&7h´MÄhj'7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj 7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j&7h´MÄhjÏ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj³6ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjL7h]”hŒ Description”…”�”}”(hjN7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjJ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÆhj³6ubj\)�”}”(hŒxThis function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.”h]”hŒxThis function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.”…”�”}”(hjb7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÅhj³6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_reset_device (C function)”Œc.input_reset_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ/void input_reset_device (struct input_dev *dev)”h]”hú)�”}”(hŒ.void input_reset_device(struct input_dev *dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‘7h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj�7h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Méubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�7h²hh³jŸ7h´Méubj#)�”}”(hŒinput_reset_device”h]”j))�”}”(hŒinput_reset_device”h]”hŒinput_reset_device”…”�”}”(hj²7h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj®7ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj�7h²hh³jŸ7h´Méubj’)�”}”(hŒ(struct input_dev *dev)”h]”j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÎ7h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÊ7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊ7ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjì7h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjé7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jî7Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj´7sbŒc.input_reset_device”†”asbuh1hhjÊ7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊ7ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjÊ7ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj'8h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÊ7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÆ7ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj�7h²hh³jŸ7h´Méubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj‰7h²hh³jŸ7h´Méubah}”(h]”j„7ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jŸ7h´Méhj†7h²hubjW)�”}”(hhh]”j\)�”}”(hŒ'reset/restore the state of input device”h]”hŒ'reset/restore the state of input device”…”�”}”(hjQ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MéhjN8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj†7h²hh³jŸ7h´Méubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{ji8j|ji8j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjs8h]”hŒ Parameters”…”�”}”(hju8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjq8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Míhjm8ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒE``struct input_dev *dev`` input device whose state needs to be reset ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj’8h]”hŒstruct input_dev *dev”…”�”}”(hj”8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj�8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MêhjŒ8ubjö)�”}”(hhh]”j\)�”}”(hŒ*input device whose state needs to be reset”h]”hŒ*input device whose state needs to be reset”…”�”}”(hj«8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j§8h´Mêhj¨8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjŒ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j§8h´Mêhj‰8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjm8ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjÍ8h]”hŒ Description”…”�”}”(hjÏ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjË8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mìhjm8ubj\)�”}”(hŒÏ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]”hŒÏ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.”…”�”}”(hjã8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mëhjm8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"input_allocate_device (C function)”Œc.input_allocate_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ/struct input_dev * input_allocate_device (void)”h]”hú)�”}”(hŒ-struct input_dev *input_allocate_device(void)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj9h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9h²hh³j9h´M›ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj19h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj.9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j39Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑŒinput_allocate_device”sbŒc.input_allocate_device”†”asbuh1hhj9h²hh³j9h´M›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9h²hh³j9h´M›ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj`9h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj9h²hh³j9h´M›ubj#)�”}”(hŒinput_allocate_device”h]”j))�”}”(hjO9h]”hŒinput_allocate_device”…”�”}”(hjq9h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjm9ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj9h²hh³j9h´M›ubj’)�”}”(hŒ(void)”h]”j˜)�”}”(hŒvoid”h]”jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŒ9h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjˆ9ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj„9ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj9h²hh³j9h´M›ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj 9h²hh³j9h´M›ubah}”(h]”j9ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j9h´M›hj9h²hubjW)�”}”(hhh]”j\)�”}”(hŒ$allocate memory for new input device”h]”hŒ$allocate memory for new input device”…”�”}”(hj¶9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M›hj³9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj9h²hh³j9h´M›ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jÎ9j|jÎ9j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjØ9h]”hŒ Parameters”…”�”}”(hjÚ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÖ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MŸhjÒ9ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ``void`` no arguments ”h]”(jÚ)�”}”(hŒ``void``”h]”jà)�”}”(hj÷9h]”hŒvoid”…”�”}”(hjù9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjõ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Khjñ9ubjö)�”}”(hhh]”j\)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j :h´Khj :ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjñ9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j :h´Khjî9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÒ9ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj2:h]”hŒ Description”…”�”}”(hj4:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj0:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´KhjÒ9ubj\)�”}”(hŒ.Returns prepared struct input_dev or ``NULL``.”h]”(hŒ%Returns prepared struct input_dev or ”…”�”}”(hjH:h²hh³Nh´Nubjà)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjP:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjH:ubhŒ.”…”�”}”(hjH:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MœhjÒ9ubj\)�”}”(hŒ**NOTE**”h]”j‹)�”}”(hjk:h]”hŒNOTE”…”�”}”(hjm:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhji:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MžhjÒ9ubj\)�”}”(hŒ�Use input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.”h]”hŒ�Use input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MŸhjÒ9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'devm_input_allocate_device (C function)”Œc.devm_input_allocate_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒBstruct input_dev * devm_input_allocate_device (struct device *dev)”h]”hú)�”}”(hŒ@struct input_dev *devm_input_allocate_device(struct device *dev)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj°:h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¬:h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mæubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬:h²hh³j½:h´Mæubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjÏ:h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÌ:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÑ:Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑŒdevm_input_allocate_device”sbŒc.devm_input_allocate_device”†”asbuh1hhj¬:h²hh³j½:h´Mæubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬:h²hh³j½:h´Mæubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjþ:h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj¬:h²hh³j½:h´Mæubj#)�”}”(hŒdevm_input_allocate_device”h]”j))�”}”(hjí:h]”hŒdevm_input_allocate_device”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj ;ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj¬:h²hh³j½:h´Mæubj’)�”}”(hŒ(struct device *dev)”h]”j˜)�”}”(hŒstruct device *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj*;h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj&;ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&;ubh)�”}”(hhh]”j))�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjH;h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjE;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jJ;Œmodname”NŒ classname”Njm jp )�”}”js ]”jë:Œc.devm_input_allocate_device”†”asbuh1hhj&;ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&;ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjt;h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj&;ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj�;h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj&;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj";ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj¬:h²hh³j½:h´Mæubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj¨:h²hh³j½:h´Mæubah}”(h]”j£:ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j½:h´Mæhj¥:h²hubjW)�”}”(hhh]”j\)�”}”(hŒallocate managed input device”h]”hŒallocate managed input device”…”�”}”(hj«;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mæhj¨;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¥:h²hh³j½:h´Mæubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jÃ;j|jÃ;j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjÍ;h]”hŒ Parameters”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjË;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MêhjÇ;ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒD``struct device *dev`` device owning the input device being created ”h]”(jÚ)�”}”(hŒ``struct device *dev``”h]”jà)�”}”(hjì;h]”hŒstruct device *dev”…”�”}”(hjî;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjê;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mçhjæ;ubjö)�”}”(hhh]”j\)�”}”(hŒ,device owning the input device being created”h]”hŒ,device owning the input device being created”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j<h´Mçhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjæ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j<h´Mçhjã;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÇ;ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj'<h]”hŒ Description”…”�”}”(hj)<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj%<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MéhjÇ;ubj\)�”}”(hŒ.Returns prepared struct input_dev or ``NULL``.”h]”(hŒ%Returns prepared struct input_dev or ”…”�”}”(hj=<h²hh³Nh´Nubjà)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjE<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj=<ubhŒ.”…”�”}”(hj=<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MèhjÇ;ubj\)�”}”(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^<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MêhjÇ;ubj\)�”}”(hŒ**NOTE**”h]”j‹)�”}”(hjo<h]”hŒNOTE”…”�”}”(hjq<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjm<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MóhjÇ;ubj\)�”}”(hŒVthe owner device is set up as parent of input device and users should not override it.”h]”hŒVthe owner device is set up as parent of input device and users should not override it.”…”�”}”(hj…<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MôhjÇ;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_free_device (C function)”Œc.input_free_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ.void input_free_device (struct input_dev *dev)”h]”hú)�”}”(hŒ-void input_free_device(struct input_dev *dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj´<h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj°<h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°<h²hh³jÂ<h´Mubj#)�”}”(hŒinput_free_device”h]”j))�”}”(hŒinput_free_device”h]”hŒinput_free_device”…”�”}”(hjÕ<h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÑ<ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj°<h²hh³jÂ<h´Mubj’)�”}”(hŒ(struct input_dev *dev)”h]”j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjñ<h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjí<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí<ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj =ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j=Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj×<sbŒc.input_free_device”†”asbuh1hhjí<ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí<ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj==h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjí<ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjJ=h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjí<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjé<ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj°<h²hh³jÂ<h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj¬<h²hh³jÂ<h´Mubah}”(h]”j§<ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jÂ<h´Mhj©<h²hubjW)�”}”(hhh]”j\)�”}”(hŒ+free memory occupied by input_dev structure”h]”hŒ+free memory occupied by input_dev structure”…”�”}”(hjt=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhjq=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj©<h²hh³jÂ<h´Mubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jŒ=j|jŒ=j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj–=h]”hŒ Parameters”…”�”}”(hj˜=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj”=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj�=ubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ/``struct input_dev *dev`` input device to free ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjµ=h]”hŒstruct input_dev *dev”…”�”}”(hj·=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj³=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj¯=ubjö)�”}”(hhh]”j\)�”}”(hŒinput device to free”h]”hŒinput device to free”…”�”}”(hjÎ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÊ=h´MhjË=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¯=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÊ=h´Mhj¬=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj�=ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjð=h]”hŒ Description”…”�”}”(hjò=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjî=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj�=ubj\)�”}”(hŒà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.”h]”hŒà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.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj�=ubj\)�”}”(hŒ6Device should be allocated by input_allocate_device().”h]”hŒ6Device should be allocated by input_allocate_device().”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj�=ubj\)�”}”(hŒ**NOTE**”h]”j‹)�”}”(hj&>h]”hŒNOTE”…”�”}”(hj(>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj$>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj�=ubj\)�”}”(hŒjIf there are references to the input device then memory will not be freed until last reference is dropped.”h]”hŒjIf there are references to the input device then memory will not be freed until last reference is dropped.”…”�”}”(hj<>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mhj�=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ input_set_timestamp (C function)”Œc.input_set_timestamp”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒCvoid input_set_timestamp (struct input_dev *dev, ktime_t timestamp)”h]”hú)�”}”(hŒBvoid input_set_timestamp(struct input_dev *dev, ktime_t timestamp)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjk>h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjg>h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M-ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg>h²hh³jy>h´M-ubj#)�”}”(hŒinput_set_timestamp”h]”j))�”}”(hŒinput_set_timestamp”h]”hŒinput_set_timestamp”…”�”}”(hjŒ>h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjˆ>ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjg>h²hh³jy>h´M-ubj’)�”}”(hŒ*(struct input_dev *dev, ktime_t timestamp)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¨>h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¤>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤>ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjÆ>h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÃ>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÈ>Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjŽ>sbŒc.input_set_timestamp”†”asbuh1hhj¤>ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤>ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjô>h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj¤>ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¤>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj >ubj˜)�”}”(hŒktime_t timestamp”h]”(h)�”}”(hhh]”j))�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j?Œmodname”NŒ classname”Njm jp )�”}”js ]”jâ>Œc.input_set_timestamp”†”asbuh1hhj?ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubj))�”}”(hŒ timestamp”h]”hŒ timestamp”…”�”}”(hjI?h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj >ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjg>h²hh³jy>h´M-ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjc>h²hh³jy>h´M-ubah}”(h]”j^>ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jy>h´M-hj`>h²hubjW)�”}”(hhh]”j\)�”}”(hŒset timestamp for input events”h]”hŒset timestamp for input events”…”�”}”(hjs?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M-hjp?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj`>h²hh³jy>h´M-ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j‹?j|j‹?j}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj•?h]”hŒ Parameters”…”�”}”(hj—?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj“?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M1hj�?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]”hŒstruct input_dev *dev”…”�”}”(hj¶?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj²?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M.hj®?ubjö)�”}”(hhh]”j\)�”}”(hŒ!input device to set timestamp for”h]”hŒ!input device to set timestamp for”…”�”}”(hjÍ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÉ?h´M.hjÊ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj®?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÉ?h´M.hj«?ubjÔ)�”}”(hŒR``ktime_t timestamp`` the time at which the event has occurred in CLOCK_MONOTONIC ”h]”(jÚ)�”}”(hŒ``ktime_t timestamp``”h]”jà)�”}”(hjí?h]”hŒktime_t timestamp”…”�”}”(hjï?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjë?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M0hjç?ubjö)�”}”(hhh]”j\)�”}”(hŒ;the time at which the event has occurred in CLOCK_MONOTONIC”h]”hŒ;the time at which the event has occurred in CLOCK_MONOTONIC”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M/hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjç?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j@h´M0hj«?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj�?ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj)@h]”hŒ Description”…”�”}”(hj+@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj'@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M2hj�?ubj\)�”}”(hŒÿ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.”h]”hŒÿ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.”…”�”}”(hj?@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M1hj�?ubj\)�”}”(hŒ…The system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.”h]”hŒ…The system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.”…”�”}”(hjN@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M6hj�?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ input_get_timestamp (C function)”Œc.input_get_timestamp”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ5ktime_t * input_get_timestamp (struct input_dev *dev)”h]”hú)�”}”(hŒ3ktime_t *input_get_timestamp(struct input_dev *dev)”h]”(h)�”}”(hhh]”j))�”}”(hŒktime_t”h]”hŒktime_t”…”�”}”(hj€@h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj}@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j‚@Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑŒinput_get_timestamp”sbŒc.input_get_timestamp”†”asbuh1hhjy@h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy@h²hh³j¡@h´MDubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj°@h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjy@h²hh³j¡@h´MDubj#)�”}”(hŒinput_get_timestamp”h]”j))�”}”(hjž@h]”hŒinput_get_timestamp”…”�”}”(hjÁ@h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj½@ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjy@h²hh³j¡@h´MDubj’)�”}”(hŒ(struct input_dev *dev)”h]”j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÜ@h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjØ@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØ@ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjú@h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj÷@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jü@Œmodname”NŒ classname”Njm jp )�”}”js ]”jœ@Œc.input_get_timestamp”†”asbuh1hhjØ@ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØ@ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj&Ah²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjØ@ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj3Ah²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjØ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÔ@ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjy@h²hh³j¡@h´MDubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhju@h²hh³j¡@h´MDubah}”(h]”jp@ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j¡@h´MDhjr@h²hubjW)�”}”(hhh]”j\)�”}”(hŒget timestamp for input events”h]”hŒget timestamp for input events”…”�”}”(hj]Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MDhjZAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjr@h²hh³j¡@h´MDubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{juAj|juAj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(hŒ”**Parameters** ``struct input_dev *dev`` input device to get timestamp from **Description** A valid timestamp is a timestamp of non-zero value.”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjAh]”hŒ Parameters”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj}Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MHhjyAubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ=``struct input_dev *dev`` input device to get timestamp from ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjžAh]”hŒstruct input_dev *dev”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjœAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MEhj˜Aubjö)�”}”(hhh]”j\)�”}”(hŒ"input device to get timestamp from”h]”hŒ"input device to get timestamp from”…”�”}”(hj·Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j³Ah´MEhj´Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj˜Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j³Ah´MEhj•Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjyAubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjÙAh]”hŒ Description”…”�”}”(hjÛAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj×Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MGhjyAubj\)�”}”(hŒ3A valid timestamp is a timestamp of non-zero value.”h]”hŒ3A valid timestamp is a timestamp of non-zero value.”…”�”}”(hjïAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MFhjyAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!input_set_capability (C function)”Œc.input_set_capability”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒWvoid input_set_capability (struct input_dev *dev, unsigned int type, unsigned int code)”h]”hú)�”}”(hŒVvoid input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjBh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MUubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBh²hh³j,Bh´MUubj#)�”}”(hŒinput_set_capability”h]”j))�”}”(hŒinput_set_capability”h]”hŒinput_set_capability”…”�”}”(hj?Bh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj;Bubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjBh²hh³j,Bh´MUubj’)�”}”(hŒ=(struct input_dev *dev, unsigned int type, unsigned int code)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj[Bh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjWBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWBubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjyBh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjvBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j{BŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjABsbŒc.input_set_capability”†”asbuh1hhjWBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWBubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj§Bh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjWBubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj´Bh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjWBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjSBubj˜)�”}”(hŒunsigned int type”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÍBh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÉBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉBubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjéBh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÉBubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉBubj))�”}”(hŒtype”h]”hŒtype”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÉBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjSBubj˜)�”}”(hŒunsigned int code”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjCubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj:Ch²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjCubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubj))�”}”(hŒcode”h]”hŒcode”…”�”}”(hjVCh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjSBubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjBh²hh³j,Bh´MUubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjBh²hh³j,Bh´MUubah}”(h]”jBah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j,Bh´MUhjBh²hubjW)�”}”(hhh]”j\)�”}”(hŒ)mark device as capable of a certain event”h]”hŒ)mark device as capable of a certain event”…”�”}”(hj€Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MUhj}Ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjBh²hh³j,Bh´MUubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j˜Cj|j˜Cj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj¢Ch]”hŒ Parameters”…”�”}”(hj¤Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MYhjœCubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒP``struct input_dev *dev`` device that is capable of emitting or accepting event ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjÁCh]”hŒstruct input_dev *dev”…”�”}”(hjÃCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¿Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MVhj»Cubjö)�”}”(hhh]”j\)�”}”(hŒ5device that is capable of emitting or accepting event”h]”hŒ5device that is capable of emitting or accepting event”…”�”}”(hjÚCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÖCh´MVhj×Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj»Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÖCh´MVhj¸CubjÔ)�”}”(hŒA``unsigned int type`` type of the event (EV_KEY, EV_REL, etc...) ”h]”(jÚ)�”}”(hŒ``unsigned int type``”h]”jà)�”}”(hjúCh]”hŒunsigned int type”…”�”}”(hjüCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjøCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MWhjôCubjö)�”}”(hhh]”j\)�”}”(hŒ*type of the event (EV_KEY, EV_REL, etc...)”h]”hŒ*type of the event (EV_KEY, EV_REL, etc...)”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jDh´MWhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjôCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jDh´MWhj¸CubjÔ)�”}”(hŒ!``unsigned int code`` event code ”h]”(jÚ)�”}”(hŒ``unsigned int code``”h]”jà)�”}”(hj3Dh]”hŒunsigned int code”…”�”}”(hj5Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj1Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MXhj-Dubjö)�”}”(hhh]”j\)�”}”(hŒ event code”h]”hŒ event code”…”�”}”(hjLDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jHDh´MXhjIDubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj-Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jHDh´MXhj¸Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjœCubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjnDh]”hŒ Description”…”�”}”(hjpDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjlDubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MZhjœCubj\)�”}”(hŒrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.”h]”hŒrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.”…”�”}”(hj„Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MYhjœCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$input_enable_softrepeat (C function)”Œc.input_enable_softrepeat”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒKvoid input_enable_softrepeat (struct input_dev *dev, int delay, int period)”h]”hú)�”}”(hŒJvoid input_enable_softrepeat(struct input_dev *dev, int delay, int period)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³Dh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj¯Dh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯Dh²hh³jÁDh´M ubj#)�”}”(hŒinput_enable_softrepeat”h]”j))�”}”(hŒinput_enable_softrepeat”h]”hŒinput_enable_softrepeat”…”�”}”(hjÔDh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÐDubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj¯Dh²hh³jÁDh´M ubj’)�”}”(hŒ.(struct input_dev *dev, int delay, int period)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjðDh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjìDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìDubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jEŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjÖDsbŒc.input_enable_softrepeat”†”asbuh1hhjìDubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìDubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj hjìGubj\)�”}”(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]”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.”…”�”}”(hjbHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M= hjìGubj\)�”}”(hXˆ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]”hXˆ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.”…”�”}”(hjqHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´ME hjìGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$input_unregister_device (C function)”Œc.input_unregister_device”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ4void input_unregister_device (struct input_dev *dev)”h]”hú)�”}”(hŒ3void input_unregister_device(struct input_dev *dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjœHh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¨ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœHh²hh³j®Hh´M¨ ubj#)�”}”(hŒinput_unregister_device”h]”j))�”}”(hŒinput_unregister_device”h]”hŒinput_unregister_device”…”�”}”(hjÁHh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj½Hubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjœHh²hh³j®Hh´M¨ ubj’)�”}”(hŒ(struct input_dev *dev)”h]”j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÝHh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÙHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙHubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjûHh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjøHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jýHŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjÃHsbŒc.input_unregister_device”†”asbuh1hhjÙHubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙHubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj)Ih²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjÙHubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj6Ih²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÙHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÕHubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjœHh²hh³j®Hh´M¨ ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj˜Hh²hh³j®Hh´M¨ ubah}”(h]”j“Hah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j®Hh´M¨ hj•Hh²hubjW)�”}”(hhh]”j\)�”}”(hŒ'unregister previously registered device”h]”hŒ'unregister previously registered device”…”�”}”(hj`Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¨ hj]Ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj•Hh²hh³j®Hh´M¨ ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jxIj|jxIj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj‚Ih]”hŒ Parameters”…”�”}”(hj„Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj€Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¬ hj|IubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ4``struct input_dev *dev`` device to be unregistered ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj¡Ih]”hŒstruct input_dev *dev”…”�”}”(hj£Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjŸIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M© hj›Iubjö)�”}”(hhh]”j\)�”}”(hŒdevice to be unregistered”h]”hŒdevice to be unregistered”…”�”}”(hjºIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¶Ih´M© hj·Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj›Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¶Ih´M© hj˜Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj|Iubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjÜIh]”hŒ Description”…”�”}”(hjÞIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÚIubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M« hj|Iubj\)�”}”(hŒ�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]”hŒ�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.”…”�”}”(hjòIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mª hj|Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#input_register_handler (C function)”Œc.input_register_handler”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ:int input_register_handler (struct input_handler *handler)”h]”hú)�”}”(hŒ9int input_register_handler(struct input_handler *handler)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj!Jh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjJh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÖ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJh²hh³j/Jh´MÖ ubj#)�”}”(hŒinput_register_handler”h]”j))�”}”(hŒinput_register_handler”h]”hŒinput_register_handler”…”�”}”(hjBJh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj>Jubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjJh²hh³j/Jh´MÖ ubj’)�”}”(hŒ(struct input_handler *handler)”•Xh]”j˜)�”}”(hŒstruct input_handler *handler”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj^Jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjZJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZJubh)�”}”(hhh]”j))�”}”(hŒ input_handler”h]”hŒ input_handler”…”�”}”(hj|Jh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjyJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j~JŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjDJsbŒc.input_register_handler”†”asbuh1hhjZJubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZJubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjªJh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjZJubj))�”}”(hŒhandler”h]”hŒhandler”…”�”}”(hj·Jh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjZJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjVJubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjJh²hh³j/Jh´MÖ ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjJh²hh³j/Jh´MÖ ubah}”(h]”jJah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j/Jh´MÖ hjJh²hubjW)�”}”(hhh]”j\)�”}”(hŒregister a new input handler”h]”hŒregister a new input handler”…”�”}”(hjáJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÖ hjÞJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjJh²hh³j/Jh´MÖ ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jùJj|jùJj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjKh]”hŒ Parameters”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÚ hjýJubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ;``struct input_handler *handler`` handler to be registered ”h]”(jÚ)�”}”(hŒ!``struct input_handler *handler``”h]”jà)�”}”(hj"Kh]”hŒstruct input_handler *handler”…”�”}”(hj$Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M× hjKubjö)�”}”(hhh]”j\)�”}”(hŒhandler to be registered”h]”hŒhandler to be registered”…”�”}”(hj;Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j7Kh´M× hj8Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j7Kh´M× hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjýJubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj]Kh]”hŒ Description”…”�”}”(hj_Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj[Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MÙ hjýJubj\)�”}”(hŒ¢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]”hŒ¢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.”…”�”}”(hjsKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MØ hjýJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%input_unregister_handler (C function)”Œc.input_unregister_handler”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ=void input_unregister_handler (struct input_handler *handler)”h]”hú)�”}”(hŒNh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubj))�”}”(hŒfn”h]”hŒfn”…”�”}”(hjKNh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjNubjí)�”}”(hŒ)”h]”hŒ)”…”�”}”(hjYNh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubjí)�”}”(hj2Nh]”hŒ(”…”�”}”(hjgNh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubj)�”}”(hjh]”hŒstruct”…”�”}”(hjtNh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjNubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hj’Nh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj�Nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j”NŒmodname”NŒ classname”Njm jp )�”}”js ]”jšMŒc.input_handler_for_each_handle”†”asbuh1hhjNubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj°Nh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubjí)�”}”(hŒ,”h]”hŒ,”…”�”}”(hj½Nh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubjZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÙNh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjNubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjçNh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubjí)�”}”(hj[Nh]”hŒ)”…”�”}”(hjôNh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjXMubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjMh²hh³j1Mh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjMh²hh³j1Mh´M ubah}”(h]”jMah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j1Mh´M hjMh²hubjW)�”}”(hhh]”j\)�”}”(hŒhandle iterator”h]”hŒhandle iterator”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hjOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjMh²hh³j1Mh´M ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j5Oj|j5Oj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(hX**Parameters** ``struct input_handler *handler`` input handler to iterate ``void *data`` data for the callback ``int (*fn)(struct input_handle *, void *)`` function to be called for each handle **Description** Iterate over **bus**'s list of devices, and call **fn** for each, passing it **data** and stop when **fn** returns a non-zero value. The function is using RCU to traverse the list and therefore may be using in atomic contexts. The **fn** callback is invoked from RCU critical section and thus must not sleep.”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj?Oh]”hŒ Parameters”…”�”}”(hjAOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj=Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hj9OubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ;``struct input_handler *handler`` input handler to iterate ”h]”(jÚ)�”}”(hŒ!``struct input_handler *handler``”h]”jà)�”}”(hj^Oh]”hŒstruct input_handler *handler”…”�”}”(hj`Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj\Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hjXOubjö)�”}”(hhh]”j\)�”}”(hŒinput handler to iterate”h]”hŒinput handler to iterate”…”�”}”(hjwOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jsOh´M hjtOubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjXOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jsOh´M hjUOubjÔ)�”}”(hŒ%``void *data`` data for the callback ”h]”(jÚ)�”}”(hŒ``void *data``”h]”jà)�”}”(hj—Oh]”hŒ void *data”…”�”}”(hj™Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj•Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hj‘Oubjö)�”}”(hhh]”j\)�”}”(hŒdata for the callback”h]”hŒdata for the callback”…”�”}”(hj°Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¬Oh´M hj­Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj‘Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¬Oh´M hjUOubjÔ)�”}”(hŒS``int (*fn)(struct input_handle *, void *)`` function to be called for each handle ”h]”(jÚ)�”}”(hŒ,``int (*fn)(struct input_handle *, void *)``”h]”jà)�”}”(hjÐOh]”hŒ(int (*fn)(struct input_handle *, void *)”…”�”}”(hjÒOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÎOubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hjÊOubjö)�”}”(hhh]”j\)�”}”(hŒ%function to be called for each handle”h]”hŒ%function to be called for each handle”…”�”}”(hjéOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jåOh´M hjæOubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÊOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jåOh´M hjUOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj9Oubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj Ph]”hŒ Description”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hj9Oubj\)�”}”(hX4Iterate over **bus**'s list of devices, and call **fn** for each, passing it **data** and stop when **fn** returns a non-zero value. The function is using RCU to traverse the list and therefore may be using in atomic contexts. The **fn** callback is invoked from RCU critical section and thus must not sleep.”h]”(hŒ Iterate over ”…”�”}”(hj!Ph²hh³Nh´Nubj‹)�”}”(hŒ**bus**”h]”hŒbus”…”�”}”(hj)Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!PubhŒ’s list of devices, and call ”…”�”}”(hj!Ph²hh³Nh´Nubj‹)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj;Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!PubhŒ for each, passing it ”…”�”}”(hj!Ph²hh³Nh´Nubj‹)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hjMPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!PubhŒ and stop when ”…”�”}”(hj!Ph²hh³Nh´Nubj‹)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj_Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!PubhŒ} returns a non-zero value. The function is using RCU to traverse the list and therefore may be using in atomic contexts. The ”…”�”}”(hj!Ph²hh³Nh´Nubj‹)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hjqPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj!PubhŒG callback is invoked from RCU critical section and thus must not sleep.”…”�”}”(hj!Ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M hj9Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"input_register_handle (C function)”Œc.input_register_handle”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ7int input_register_handle (struct input_handle *handle)”h]”hú)�”}”(hŒ6int input_register_handle(struct input_handle *handle)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjªPh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj¦Ph²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mp ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦Ph²hh³j¸Ph´Mp ubj#)�”}”(hŒinput_register_handle”h]”j))�”}”(hŒinput_register_handle”h]”hŒinput_register_handle”…”�”}”(hjËPh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÇPubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj¦Ph²hh³j¸Ph´Mp ubj’)�”}”(hŒ(struct input_handle *handle)”h]”j˜)�”}”(hŒstruct input_handle *handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjçPh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjãPubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãPubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jQŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjÍPsbŒc.input_register_handle”†”asbuh1hhjãPubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãPubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj3Qh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjãPubj))�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj@Qh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjãPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjßPubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj¦Ph²hh³j¸Ph´Mp ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj¢Ph²hh³j¸Ph´Mp ubah}”(h]”j�Pah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j¸Ph´Mp hjŸPh²hubjW)�”}”(hhh]”j\)�”}”(hŒregister a new input handle”h]”hŒregister a new input handle”…”�”}”(hjjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mp hjgQh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŸPh²hh³j¸Ph´Mp ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j‚Qj|j‚Qj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(hX7**Parameters** ``struct input_handle *handle`` handle to register **Description** This function puts a new input handle onto device's and handler's lists so that events can flow through it once it is opened using input_open_device(). This function is supposed to be called from handler's connect() method.”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjŒQh]”hŒ Parameters”…”�”}”(hjŽQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjŠQubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mt hj†QubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ3``struct input_handle *handle`` handle to register ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hj«Qh]”hŒstruct input_handle *handle”…”�”}”(hj­Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj©Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mq hj¥Qubjö)�”}”(hhh]”j\)�”}”(hŒhandle to register”h]”hŒhandle to register”…”�”}”(hjÄQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÀQh´Mq hjÁQubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¥Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÀQh´Mq hj¢Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj†Qubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjæQh]”hŒ Description”…”�”}”(hjèQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjäQubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Ms hj†Qubj\)�”}”(hŒ—This function puts a new input handle onto device's and handler's lists so that events can flow through it once it is opened using input_open_device().”h]”hŒ›This function puts a new input handle onto device’s and handler’s lists so that events can flow through it once it is opened using input_open_device().”…”�”}”(hjüQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mr hj†Qubj\)�”}”(hŒGThis function is supposed to be called from handler's connect() method.”h]”hŒIThis function is supposed to be called from handler’s connect() method.”…”�”}”(hj Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mv hj†Qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$input_unregister_handle (C function)”Œc.input_unregister_handle”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ:void input_unregister_handle (struct input_handle *handle)”h]”hú)�”}”(hŒ9void input_unregister_handle(struct input_handle *handle)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj:Rh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj6Rh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mœ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6Rh²hh³jHRh´Mœ ubj#)�”}”(hŒinput_unregister_handle”h]”j))�”}”(hŒinput_unregister_handle”h]”hŒinput_unregister_handle”…”�”}”(hj[Rh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjWRubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj6Rh²hh³jHRh´Mœ ubj’)�”}”(hŒ(struct input_handle *handle)”h]”j˜)�”}”(hŒstruct input_handle *handle”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjwRh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjsRubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsRubh)�”}”(hhh]”j))�”}”(hŒ input_handle”h]”hŒ input_handle”…”�”}”(hj•Rh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj’Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j—RŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj]RsbŒc.input_unregister_handle”†”asbuh1hhjsRubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsRubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÃRh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjsRubj))�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjÐRh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjsRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjoRubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj6Rh²hh³jHRh´Mœ ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj2Rh²hh³jHRh´Mœ ubah}”(h]”j-Rah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jHRh´Mœ hj/Rh²hubjW)�”}”(hhh]”j\)�”}”(hŒunregister an input handle”h]”hŒunregister an input handle”…”�”}”(hjúRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mœ hj÷Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj/Rh²hh³jHRh´Mœ ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jSj|jSj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(hŒê**Parameters** ``struct input_handle *handle`` handle to unregister **Description** This function removes input handle from device's and handler's lists. This function is supposed to be called from handler's disconnect() method.”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjSh]”hŒ Parameters”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M  hjSubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ5``struct input_handle *handle`` handle to unregister ”h]”(jÚ)�”}”(hŒ``struct input_handle *handle``”h]”jà)�”}”(hj;Sh]”hŒstruct input_handle *handle”…”�”}”(hj=Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj9Subah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M� hj5Subjö)�”}”(hhh]”j\)�”}”(hŒhandle to unregister”h]”hŒhandle to unregister”…”�”}”(hjTSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jPSh´M� hjQSubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj5Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jPSh´M� hj2Subah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjSubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjvSh]”hŒ Description”…”�”}”(hjxSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjtSubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´MŸ hjSubj\)�”}”(hŒEThis function removes input handle from device's and handler's lists.”h]”hŒIThis function removes input handle from device’s and handler’s lists.”…”�”}”(hjŒSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´Mž hjSubj\)�”}”(hŒJThis function is supposed to be called from handler's disconnect() method.”h]”hŒLThis function is supposed to be called from handler’s disconnect() method.”…”�”}”(hj›Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¡ hjSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ input_get_new_minor (C function)”Œc.input_get_new_minor”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒVint input_get_new_minor (int legacy_base, unsigned int legacy_num, bool allow_dynamic)”h]”hú)�”}”(hŒUint input_get_new_minor(int legacy_base, unsigned int legacy_num, bool allow_dynamic)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊSh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÆSh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.c”h´M¶ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆSh²hh³jØSh´M¶ ubj#)�”}”(hŒinput_get_new_minor”h]”j))�”}”(hŒinput_get_new_minor”h]”hŒinput_get_new_minor”…”�”}”(hjëSh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjçSubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjÆSh²hh³jØSh´M¶ ubj’)�”}”(hŒ>(int legacy_base, unsigned int legacy_num, bool allow_dynamic)”h]”(j˜)�”}”(hŒint legacy_base”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjTubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubj))�”}”(hŒ legacy_base”h]”hŒ legacy_base”…”�”}”(hj#Th²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÿSubj˜)�”}”(hŒunsigned int legacy_num”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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 device”•h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjß`h]”hŒ Parameters”…”�”}”(hjá`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÝ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MhjÙ`ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒA``struct input_dev *dev`` input device supporting force-feedback ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjþ`h]”hŒstruct input_dev *dev”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjü`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´Mhjø`ubjö)�”}”(hhh]”j\)�”}”(hŒ&input device supporting force-feedback”h]”hŒ&input device supporting force-feedback”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jah´Mhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjø`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jah´Mhjõ`ubjÔ)�”}”(hŒO``unsigned int max_effects`` maximum number of effects supported by the device ”h]”(jÚ)�”}”(hŒ``unsigned int max_effects``”h]”jà)�”}”(hj7ah]”hŒunsigned int max_effects”…”�”}”(hj9ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj5aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´Mhj1aubjö)�”}”(hhh]”j\)�”}”(hŒ1maximum number of effects supported by the device”h]”hŒ1maximum number of effects supported by the device”…”�”}”(hjPah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jLah´MhjMaubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj1aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jLah´Mhjõ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÙ`ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjrah]”hŒ Description”…”�”}”(hjtah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjpaubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MhjÙ`ubj\)�”}”(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 device”h]”(hŒ€This function allocates all necessary memory for a force feedback portion of an input device and installs all default handlers. ”…”�”}”(hjˆah²hh³Nh´Nubj‹)�”}”(hŒ**dev->ffbit**”h]”hŒ dev->ffbit”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjˆaubhŒ² 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ˆah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MhjÙ`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_ff_destroy (C function)”Œc.input_ff_destroy”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ-void input_ff_destroy (struct input_dev *dev)”h]”hú)�”}”(hŒ,void input_ff_destroy(struct input_dev *dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÉah²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÅah²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MPubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅah²hh³j×ah´MPubj#)�”}”(hŒinput_ff_destroy”h]”j))�”}”(hŒinput_ff_destroy”h]”hŒinput_ff_destroy”…”�”}”(hjêah²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjæaubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjÅah²hh³j×ah´MPubj’)�”}”(hŒ(struct input_dev *dev)”h]”j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj$bh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj!bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j&bŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjìasbŒc.input_ff_destroy”†”asbuh1hhjbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjRbh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjbubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj_bh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjþaubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjÅah²hh³j×ah´MPubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÁah²hh³j×ah´MPubah}”(h]”j¼aah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j×ah´MPhj¾ah²hubjW)�”}”(hhh]”j\)�”}”(hŒ,frees force feedback portion of input device”h]”hŒ,frees force feedback portion of input device”…”�”}”(hj‰bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MPhj†bh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¾ah²hh³j×ah´MPubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j¡bj|j¡bj}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj«bh]”hŒ Parameters”…”�”}”(hj­bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj©bubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MThj¥bubjÏ)�”}”(hhh]”jÔ)�”}”(hŒA``struct input_dev *dev`` input device supporting force feedback ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjÊbh]”hŒstruct input_dev *dev”…”�”}”(hjÌbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÈbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MQhjÄbubjö)�”}”(hhh]”j\)�”}”(hŒ&input device supporting force feedback”h]”hŒ&input device supporting force feedback”…”�”}”(hjãbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jßbh´MQhjàbubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÄbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jßbh´MQhjÁbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj¥bubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjch]”hŒ Description”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MShj¥bubj\)�”}”(hŒ„This function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.”h]”hŒ„This function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.c”h´MRhj¥bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$input_ff_create_memless (C function)”Œc.input_ff_create_memless”hNt”auh1hÜhhËh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒƒint input_ff_create_memless (struct input_dev *dev, void *data, int (*play_effect)(struct input_dev *, void *, struct ff_effect *))”h]”hú)�”}”(hŒint input_ff_create_memless(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjJch²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjFch²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFch²hh³jXch´Mubj#)�”}”(hŒinput_ff_create_memless”h]”j))�”}”(hŒinput_ff_create_memless”h]”hŒinput_ff_create_memless”…”�”}”(hjkch²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjgcubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjFch²hh³jXch´Mubj’)�”}”(hŒd(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj‡ch²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjƒcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒcubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj¥ch²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¢cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j§cŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjmcsbŒc.input_ff_create_memless”†”asbuh1hhjƒcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒcubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÓch²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjƒcubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjàch²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjƒcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjcubj˜)�”}”(hŒ void *data”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjùch²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjõcubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõcubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjõcubj))�”}”(hŒdata”h]”hŒdata”…”�”}”(hj"dh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjõcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjcubj˜)�”}”(hŒ?int (*play_effect)(struct input_dev*, void*, struct ff_effect*)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj;dh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj7dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7dubjí)�”}”(hj2Nh]”hŒ(”…”�”}”(hjWdh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjddh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubj))�”}”(hŒ play_effect”h]”hŒ play_effect”…”�”}”(hjqdh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj7dubjí)�”}”(hj[Nh]”hŒ)”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubjí)�”}”(hj2Nh]”hŒ(”…”�”}”(hjŒdh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubj)�”}”(hjh]”hŒstruct”…”�”}”(hj™dh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj7dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7dubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj·dh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj´dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j¹dŒmodname”NŒ classname”Njm jp )�”}”js ]”jÁcŒc.input_ff_create_memless”†”asbuh1hhj7dubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÕdh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubjí)�”}”(hj¿Nh]”hŒ,”…”�”}”(hjâdh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7dubjZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjýdh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj7dubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubjí)�”}”(hj¿Nh]”hŒ,”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7dubj)�”}”(hjh]”hŒstruct”…”�”}”(hj3eh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj7dubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7dubh)�”}”(hhh]”j))�”}”(hŒ ff_effect”h]”hŒ ff_effect”…”�”}”(hjQeh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjNeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jSeŒmodname”NŒ classname”Njm jp )�”}”js ]”jÁcŒc.input_ff_create_memless”†”asbuh1hhj7dubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjoeh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubjí)�”}”(hj[Nh]”hŒ)”…”�”}”(hj|eh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj7dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjcubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjFch²hh³jXch´Mubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjBch²hh³jXch´Mubah}”(h]”j=cah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jXch´Mhj?ch²hubjW)�”}”(hhh]”j\)�”}”(hŒ'create memoryless force-feedback device”h]”hŒ'create memoryless force-feedback device”…”�”}”(hj¥eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´Mhj¢eh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj?ch²hh³jXch´Mubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j½ej|j½ej}‰j~‰j‰uh1hîh²hhhËh³Nh´Nubj�)�”}”(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 effect”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjÇeh]”hŒ Parameters”…”�”}”(hjÉeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÅeubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´MhjÁeubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒA``struct input_dev *dev`` input device supporting force-feedback ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjæeh]”hŒstruct input_dev *dev”…”�”}”(hjèeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjäeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´Mhjàeubjö)�”}”(hhh]”j\)�”}”(hŒ&input device supporting force-feedback”h]”hŒ&input device supporting force-feedback”…”�”}”(hjÿeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jûeh´Mhjüeubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjàeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jûeh´MhjÝeubjÔ)�”}”(hŒF``void *data`` driver-specific data to be passed into **play_effect** ”h]”(jÚ)�”}”(hŒ``void *data``”h]”jà)�”}”(hjfh]”hŒ void *data”…”�”}”(hj!fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´Mhjfubjö)�”}”(hhh]”j\)�”}”(hŒ6driver-specific data to be passed into **play_effect**”h]”(hŒ'driver-specific data to be passed into ”…”�”}”(hj8fh²hh³Nh´Nubj‹)�”}”(hŒ**play_effect**”h]”hŒ play_effect”…”�”}”(hj@fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj8fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j4fh´Mhj5fubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j4fh´MhjÝeubjÔ)�”}”(hŒs``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)`` driver-specific method for playing FF effect”h]”(jÚ)�”}”(hŒF``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)``”h]”jà)�”}”(hjffh]”hŒBint (*play_effect)(struct input_dev *, void *, struct ff_effect *)”…”�”}”(hjhfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjdfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´Mhj`fubjö)�”}”(hhh]”j\)�”}”(hŒ,driver-specific method for playing FF effect”h]”hŒ,driver-specific method for playing FF effect”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.c”h´Mhj|fubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj`fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j{fh´MhjÝeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÁeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hhËh²hh³Nh´Nubeh}”(h]”Œ input-core”ah ]”h"]”Œ input core”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒMultitouch Library”h]”hŒMultitouch Library”…”�”}”(hj²fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¯fh²hh³hÊh´KubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_mt_slot (C struct)”Œc.input_mt_slot”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ input_mt_slot”h]”hú)�”}”(hŒstruct input_mt_slot”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÙfh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÕfh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕfh²hh³jæfh´Kubj#)�”}”(hŒ input_mt_slot”h]”j))�”}”(hjÓfh]”hŒ input_mt_slot”…”�”}”(hjùfh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjõfubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjÕfh²hh³jæfh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÑfh²hh³jæfh´Kubah}”(h]”jÌfah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jæfh´KhjÎfh²hubjW)�”}”(hhh]”j\)�”}”(hŒ(represents the state of an input MT slot”h]”hŒ(represents the state of an input MT slot”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khjgh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÎfh²hh³jæfh´Kubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{j3gj|j3gj}‰j~‰j‰uh1hîh²hhj¯fh³Nh´Nubj�)�”}”(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 slot”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj?gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj;gubhŒ:”…”�”}”(hj;gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khj7gubj¦)�”}”(hŒtstruct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; };”h]”hŒtstruct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; };”…”�”}”hjXgsbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khj7gubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hjigh]”hŒMembers”…”�”}”(hjkgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjggubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K#hj7gubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ:``abs`` holds current values of ABS_MT axes for this slot ”h]”(jÚ)�”}”(hŒ``abs``”h]”jà)�”}”(hjˆgh]”hŒabs”…”�”}”(hjŠgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj†gubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khj‚gubjö)�”}”(hhh]”j\)�”}”(hŒ1holds current values of ABS_MT axes for this slot”h]”hŒ1holds current values of ABS_MT axes for this slot”…”�”}”(hj¡gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j�gh´Khjžgubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj‚gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j�gh´KhjgubjÔ)�”}”(hŒF``frame`` last frame at which input_mt_report_slot_state() was called ”h]”(jÚ)�”}”(hŒ ``frame``”h]”jà)�”}”(hjÁgh]”hŒframe”…”�”}”(hjÃgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¿gubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khj»gubjö)�”}”(hhh]”j\)�”}”(hŒ;last frame at which input_mt_report_slot_state() was called”h]”hŒ;last frame at which input_mt_report_slot_state() was called”…”�”}”(hjÚgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÖgh´Khj×gubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj»gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÖgh´KhjgubjÔ)�”}”(hŒ0``key`` optional driver designation of this slot”h]”(jÚ)�”}”(hŒ``key``”h]”jà)�”}”(hjúgh]”hŒkey”…”�”}”(hjügh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjøgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khjôgubjö)�”}”(hhh]”j\)�”}”(hŒ(optional driver designation of this slot”h]”hŒ(optional driver designation of this slot”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Khjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjôgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jhh´Khjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj7gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hj¯fh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_mt (C struct)”Œ c.input_mt”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒinput_mt”h]”hú)�”}”(hŒstruct input_mt”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjThh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjPhh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K!ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPhh²hh³jahh´K!ubj#)�”}”(hŒinput_mt”h]”j))�”}”(hjNhh]”hŒinput_mt”…”�”}”(hjthh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjphubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjPhh²hh³jahh´K!ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjLhh²hh³jahh´K!ubah}”(h]”jGhah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jahh´K!hjIhh²hubjW)�”}”(hhh]”j\)�”}”(hŒstate of tracked contacts”h]”hŒstate of tracked contacts”…”�”}”(hj–hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K#hj“hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjIhh²hh³jahh´K!ubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{j®hj|j®hj}‰j~‰j‰uh1hîh²hhj¯fh³Nh´Nubj�)�”}”(hXV**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 contacts”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjºhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¶hubhŒ:”…”�”}”(hj¶hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K'hj²hubj¦)�”}”(hŒ¤struct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[]; };”h]”hŒ¤struct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[]; };”…”�”}”hjÓhsbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K)hj²hubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hjähh]”hŒMembers”…”�”}”(hjæhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjâhubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K3hj²hubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ5``trkid`` stores MT tracking ID for the next contact ”h]”(jÚ)�”}”(hŒ ``trkid``”h]”jà)�”}”(hjih]”hŒtrkid”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K%hjýhubjö)�”}”(hhh]”j\)�”}”(hŒ*stores MT tracking ID for the next contact”h]”hŒ*stores MT tracking ID for the next contact”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jih´K%hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjýhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jih´K%hjúhubjÔ)�”}”(hŒ1``num_slots`` number of MT slots the device uses ”h]”(jÚ)�”}”(hŒ ``num_slots``”h]”jà)�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj:iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K&hj6iubjö)�”}”(hhh]”j\)�”}”(hŒ"number of MT slots the device uses”h]”hŒ"number of MT slots the device uses”…”�”}”(hjUih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jQih´K&hjRiubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj6iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jQih´K&hjúhubjÔ)�”}”(hŒ-``slot`` MT slot currently being transmitted ”h]”(jÚ)�”}”(hŒ``slot``”h]”jà)�”}”(hjuih]”hŒslot”…”�”}”(hjwih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjsiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K'hjoiubjö)�”}”(hhh]”j\)�”}”(hŒ#MT slot currently being transmitted”h]”hŒ#MT slot currently being transmitted”…”�”}”(hjŽih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jŠih´K'hj‹iubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjoiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jŠih´K'hjúhubjÔ)�”}”(hŒ#``flags`` input_mt operation flags ”h]”(jÚ)�”}”(hŒ ``flags``”h]”jà)�”}”(hj®ih]”hŒflags”…”�”}”(hj°ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¬iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K(hj¨iubjö)�”}”(hhh]”j\)�”}”(hŒinput_mt operation flags”h]”hŒinput_mt operation flags”…”�”}”(hjÇih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÃih´K(hjÄiubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¨iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÃih´K(hjúhubjÔ)�”}”(hŒ?``frame`` increases every time input_mt_sync_frame() is called ”h]”(jÚ)�”}”(hŒ ``frame``”h]”jà)�”}”(hjçih]”hŒframe”…”�”}”(hjéih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjåiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K)hjáiubjö)�”}”(hhh]”j\)�”}”(hŒ4increases every time input_mt_sync_frame() is called”h]”hŒ4increases every time input_mt_sync_frame() is called”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jüih´K)hjýiubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjáiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jüih´K)hjúhubjÔ)�”}”(hŒ3``red`` reduced cost matrix for in-kernel tracking ”h]”(jÚ)�”}”(hŒ``red``”h]”jà)�”}”(hj jh]”hŒred”…”�”}”(hj"jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K*hjjubjö)�”}”(hhh]”j\)�”}”(hŒ*reduced cost matrix for in-kernel tracking”h]”hŒ*reduced cost matrix for in-kernel tracking”…”�”}”(hj9jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j5jh´K*hj6jubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j5jh´K*hjúhubjÔ)�”}”(hŒC``slots`` array of slots holding current values of tracked contacts”h]”(jÚ)�”}”(hŒ ``slots``”h]”jà)�”}”(hjYjh]”hŒslots”…”�”}”(hj[jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjWjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K*hjSjubjö)�”}”(hhh]”j\)�”}”(hŒ9array of slots holding current values of tracked contacts”h]”hŒ9array of slots holding current values of tracked contacts”…”�”}”(hjrjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K+hjojubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjSjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jnjh´K*hjúhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj²hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hj¯fh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinput_mt_pos (C struct)”Œc.input_mt_pos”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ input_mt_pos”h]”hú)�”}”(hŒstruct input_mt_pos”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj³jh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¯jh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K1ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯jh²hh³jÀjh´K1ubj#)�”}”(hŒ input_mt_pos”h]”j))�”}”(hj­jh]”hŒ input_mt_pos”…”�”}”(hjÓjh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÏjubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj¯jh²hh³jÀjh´K1ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj«jh²hh³jÀjh´K1ubah}”(h]”j¦jah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jÀjh´K1hj¨jh²hubjW)�”}”(hhh]”j\)�”}”(hŒcontact position”h]”hŒcontact position”…”�”}”(hjõjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kthjòjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj¨jh²hh³jÀjh´K1ubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{j kj|j kj}‰j~‰j‰uh1hîh²hhj¯fh³Nh´Nubj�)�”}”(hŒ‡**Definition**:: struct input_mt_pos { s16 x, y; }; **Members** ``x`` horizontal coordinate ``y`` vertical coordinate”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjkubhŒ:”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kxhjkubj¦)�”}”(hŒ&struct input_mt_pos { s16 x, y; };”h]”hŒ&struct input_mt_pos { s16 x, y; };”…”�”}”hj2ksbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kzhjkubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hjCkh]”hŒMembers”…”�”}”(hjEkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjAkubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´K~hjkubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ``x`` horizontal coordinate ”h]”(jÚ)�”}”(hŒ``x``”h]”jà)�”}”(hjbkh]”hŒx”…”�”}”(hjdkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj`kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kvhj\kubjö)�”}”(hhh]”j\)�”}”(hŒhorizontal coordinate”h]”hŒhorizontal coordinate”…”�”}”(hj{kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jwkh´Kvhjxkubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj\kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jwkh´KvhjYkubjÔ)�”}”(hŒ``y`` vertical coordinate”h]”(jÚ)�”}”(hŒ``y``”h]”jà)�”}”(hj›kh]”hŒy”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj™kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kvhj•kubjö)�”}”(hhh]”j\)�”}”(hŒvertical coordinate”h]”hŒvertical coordinate”…”�”}”(hj´kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.h”h´Kwhj±kubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj•kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j°kh´KvhjYkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hj¯fh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ input_mt_init_slots (C function)”Œc.input_mt_init_slots”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ[int input_mt_init_slots (struct input_dev *dev, unsigned int num_slots, unsigned int flags)”h]”hú)�”}”(hŒZint input_mt_init_slots(struct input_dev *dev, unsigned int num_slots, unsigned int flags)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjõkh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjñkh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Kubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñkh²hh³jlh´Kubj#)�”}”(hŒinput_mt_init_slots”h]”j))�”}”(hŒinput_mt_init_slots”h]”hŒinput_mt_init_slots”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjlubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjñkh²hh³jlh´Kubj’)�”}”(hŒC(struct input_dev *dev, unsigned int num_slots, unsigned int flags)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj2lh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj.lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.lubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjPlh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjMlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jRlŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjlsbŒc.input_mt_init_slots”†”asbuh1hhj.lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjplh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.lubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj~lh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj.lubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj‹lh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj.lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj*lubj˜)�”}”(hŒunsigned int num_slots”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¤lh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj lubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀlh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj lubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj lubj))�”}”(hŒ num_slots”h]”hŒ num_slots”…”�”}”(hjÜlh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj*lubj˜)�”}”(hŒunsigned int flags”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjõlh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjñlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñlubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjñlubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñlubj))�”}”(hŒflags”h]”hŒflags”…”�”}”(hj-mh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjñlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj*lubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjñkh²hh³jlh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjíkh²hh³jlh´Kubah}”(h]”jèkah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jlh´Khjêkh²hubjW)�”}”(hhh]”j\)�”}”(hŒinitialize MT input slots”h]”hŒinitialize MT input slots”…”�”}”(hjWmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´KhjTmh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjêkh²hh³jlh´Kubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jomj|jomj}‰j~‰j‰uh1hîh²hhj¯fh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjymh]”hŒ Parameters”…”�”}”(hj{mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjwmubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´KhjsmubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒP``struct input_dev *dev`` input device supporting MT events and finger tracking ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj˜mh]”hŒstruct input_dev *dev”…”�”}”(hjšmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj–mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Khj’mubjö)�”}”(hhh]”j\)�”}”(hŒ5input device supporting MT events and finger tracking”h]”hŒ5input device supporting MT events and finger tracking”…”�”}”(hj±mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j­mh´Khj®mubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj’mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j­mh´Khj�mubjÔ)�”}”(hŒ>``unsigned int num_slots`` number of slots used by the device ”h]”(jÚ)�”}”(hŒ``unsigned int num_slots``”h]”jà)�”}”(hjÑmh]”hŒunsigned int num_slots”…”�”}”(hjÓmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÏmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´KhjËmubjö)�”}”(hhh]”j\)�”}”(hŒ"number of slots used by the device”h]”hŒ"number of slots used by the device”…”�”}”(hjêmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jæmh´Khjçmubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjËmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jæmh´Khj�mubjÔ)�”}”(hŒ2``unsigned int flags`` mt tasks to handle in core ”h]”(jÚ)�”}”(hŒ``unsigned int flags``”h]”jà)�”}”(hj nh]”hŒunsigned int flags”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Khjnubjö)�”}”(hhh]”j\)�”}”(hŒmt tasks to handle in core”h]”hŒmt tasks to handle in core”…”�”}”(hj#nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jnh´Khj nubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jnh´Khj�mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjsmubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjEnh]”hŒ Description”…”�”}”(hjGnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjCnubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Khjsmubj\)�”}”(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[nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Khjsmubj\)�”}”(hŒiMay be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.”h]”hŒiMay be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.”…”�”}”(hjjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´K#hjsmubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hj¯fh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#input_mt_destroy_slots (C function)”Œc.input_mt_destroy_slots”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ3void input_mt_destroy_slots (struct input_dev *dev)”h]”hú)�”}”(hŒ2void input_mt_destroy_slots(struct input_dev *dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj™nh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj•nh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Kiubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•nh²hh³j§nh´Kiubj#)�”}”(hŒinput_mt_destroy_slots”h]”j))�”}”(hŒinput_mt_destroy_slots”h]”hŒinput_mt_destroy_slots”…”�”}”(hjºnh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¶nubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj•nh²hh³j§nh´Kiubj’)�”}”(hŒ(struct input_dev *dev)”h]”j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÖnh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÒnubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒnubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjônh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjñnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jönŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj¼nsbŒc.input_mt_destroy_slots”†”asbuh1hhjÒnubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒnubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj"oh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjÒnubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj/oh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÒnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÎnubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj•nh²hh³j§nh´Kiubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj‘nh²hh³j§nh´Kiubah}”(h]”jŒnah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j§nh´KihjŽnh²hubjW)�”}”(hhh]”j\)�”}”(hŒ&frees the MT slots of the input device”h]”hŒ&frees the MT slots of the input device”…”�”}”(hjYoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´KihjVoh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŽnh²hh³j§nh´Kiubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jqoj|jqoj}‰j~‰j‰uh1hîh²hhj¯fh³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj{oh]”hŒ Parameters”…”�”}”(hj}oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjyoubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´KmhjuoubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ?``struct input_dev *dev`` input device with allocated MT slots ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjšoh]”hŒstruct input_dev *dev”…”�”}”(hjœoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj˜oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Kjhj”oubjö)�”}”(hhh]”j\)�”}”(hŒ$input device with allocated MT slots”h]”hŒ$input device with allocated MT slots”…”�”}”(hj³oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¯oh´Kjhj°oubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj”oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¯oh´Kjhj‘oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjuoubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjÕoh]”hŒ Description”…”�”}”(hj×oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÓoubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Klhjuoubj\)�”}”(hŒThis function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.”h]”hŒThis function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.”…”�”}”(hjëoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Kkhjuoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hj¯fh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'input_mt_report_slot_state (C function)”Œc.input_mt_report_slot_state”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(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]”(jZ)�”}”(hj�Th]”hŒbool”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjph²hh³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´Kzubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjph²hh³j'ph´Kzubj#)�”}”(hŒinput_mt_report_slot_state”h]”j))�”}”(hŒinput_mt_report_slot_state”h]”hŒinput_mt_report_slot_state”…”�”}”(hj:ph²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj6pubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjph²hh³j'ph´Kzubj’)�”}”(hŒ<(struct input_dev *dev, unsigned int tool_type, bool active)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjVph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjRpubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRpubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjtph²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjqpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jvpŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjReturns zero on success, or negative error in case of failure.”h]”hŒ>Returns zero on success, or negative error in case of failure.”…”�”}”(hj(}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.c”h´MÜhj°{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hj¯fh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%input_mt_get_slot_by_key (C function)”Œc.input_mt_get_slot_by_key”hNt”auh1hÜhj¯fh²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ=int input_mt_get_slot_by_key (struct input_dev *dev, int key)”h]”hú)�”}”(hŒ``keymap_size`` number of entries (initialized) in this keymap”h]”(jÚ)�”}”(hŒ``keymap_size``”h]”jà)�”}”(hjX€h]”hŒ keymap_size”…”�”}”(hjZ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjV€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.h”h´KhjR€ubjö)�”}”(hhh]”j\)�”}”(hŒ.number of entries (initialized) in this keymap”h]”hŒ.number of entries (initialized) in this keymap”…”�”}”(hjq€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.h”h´Khjn€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjR€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jm€h´Khj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjDh²hh³jch´Nubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj›€h]”hŒ Description”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj™€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.h”h´KhjDh²hubj\)�”}”(hŒ�This structure is supposed to be used by platform code to supply keymaps to drivers that implement matrix-like keypads/keyboards.”h]”hŒ�This structure is supposed to be used by platform code to supply keymaps to drivers that implement matrix-like keypads/keyboards.”…”�”}”(hj±€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.h”h´KhjDh²hubeh}”(h]”Œmatrix-keyboards-keypads”ah ]”h"]”Œmatrix keyboards/keypads”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒSparse keymap support”h]”hŒSparse keymap support”…”�”}”(hjË€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÈ€h²hh³hÊh´K#ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkey_entry (C struct)”Œ c.key_entry”hNt”auh1hÜhjÈ€h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ key_entry”h]”hú)�”}”(hŒstruct key_entry”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjó€h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjï€h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Kubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjï€h²hh³j�h´Kubj#)�”}”(hŒ key_entry”h]”j))�”}”(hjí€h]”hŒ key_entry”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj�ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjï€h²hh³j�h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjë€h²hh³j�h´Kubah}”(h]”jå€ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j�h´Khjè€h²hubjW)�”}”(hhh]”j\)�”}”(hŒ%keymap entry for use in sparse keymap”h]”hŒ%keymap entry for use in sparse keymap”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khj2�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjè€h²hh³j�h´Kubeh}”(h]”h ]”(juŒstruct”eh"]”h$]”h&]”jzjuj{jM�j|jM�j}‰j~‰j‰uh1hîh²hhjÈ€h³jç€h´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjY�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjU�ubhŒ:”…”�”}”(hjU�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´KhjQ�ubj¦)�”}”(hŒ£struct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; };”h]”hŒ£struct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; };”…”�”}”hjr�sbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´KhjQ�ubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hjƒ�h]”hŒMembers”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´K#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]”hŒtype”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khjœ�ubjö)�”}”(hhh]”j\)�”}”(hŒ�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]”hŒ�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.”…”�”}”(hj»�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khj¸�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjœ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j·�h´Khj™�ubjÔ)�”}”(hŒ<``code`` Device-specific data identifying the button/switch ”h]”(jÚ)�”}”(hŒ``code``”h]”jà)�”}”(hjÜ�h]”hŒcode”…”�”}”(hjÞ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÚ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´KhjÖ�ubjö)�”}”(hhh]”j\)�”}”(hŒ2Device-specific data identifying the button/switch”h]”hŒ2Device-specific data identifying the button/switch”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jñ�h´Khjò�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÖ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jñ�h´Khj™�ubjÔ)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(jÚ)�”}”(hŒ``{unnamed_union}``”h]”jà)�”}”(hj‚h]”hŒ{unnamed_union}”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khj‚ubjö)�”}”(hhh]”j\)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj.‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j*‚h´Khj+‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j*‚h´Khj™�ubjÔ)�”}”(hŒ0``keycode`` KEY_* code assigned to a key/button ”h]”(jÚ)�”}”(hŒ ``keycode``”h]”jà)�”}”(hjN‚h]”hŒkeycode”…”�”}”(hjP‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjL‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´KhjH‚ubjö)�”}”(hhh]”j\)�”}”(hŒ#KEY_* code assigned to a key/button”h]”hŒ#KEY_* code assigned to a key/button”…”�”}”(hjg‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jc‚h´Khjd‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjH‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jc‚h´Khj™�ubjÔ)�”}”(hŒ7``sw`` struct with code/value used by KE_SW and KE_VSW ”h]”(jÚ)�”}”(hŒ``sw``”h]”jà)�”}”(hj‡‚h]”hŒsw”…”�”}”(hj‰‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj…‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khj�‚ubjö)�”}”(hhh]”j\)�”}”(hŒ/struct with code/value used by KE_SW and KE_VSW”h]”hŒ/struct with code/value used by KE_SW and KE_VSW”…”�”}”(hj ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jœ‚h´Khj�‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj�‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jœ‚h´Khj™�ubjÔ)�”}”(hŒ+``sw.code`` SW_* code assigned to a switch ”h]”(jÚ)�”}”(hŒ ``sw.code``”h]”jà)�”}”(hjÀ‚h]”hŒsw.code”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¾‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khjº‚ubjö)�”}”(hhh]”j\)�”}”(hŒSW_* code assigned to a switch”h]”hŒSW_* code assigned to a switch”…”�”}”(hjÙ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÕ‚h´KhjÖ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjº‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÕ‚h´Khj™�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à)�”}”(hjù‚h]”hŒsw.value”…”�”}”(hjû‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj÷‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khjó‚ubjö)�”}”(hhh]”j\)�”}”(hŒ›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]”hŒ›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.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´Khjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjó‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jƒh´Khj™�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjQ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÈ€h²hh³jç€h´Nubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj<ƒh]”hŒ Description”…”�”}”(hj>ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj:ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´KhjÈ€h²hubj\)�”}”(hŒ‰This structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.”h]”hŒ‰This structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.”…”�”}”(hjRƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.h”h´KhjÈ€h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ.sparse_keymap_entry_from_scancode (C function)”Œ#c.sparse_keymap_entry_from_scancode”hNt”auh1hÜhjÈ€h²hh³Nh´Nubhï)�”}”(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]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjzƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjvƒh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvƒh²hh³j‡ƒh´K7ubh)�”}”(hhh]”j))�”}”(hŒ key_entry”h]”hŒ key_entry”…”�”}”(hj™ƒh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj–ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j›ƒŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑŒ!sparse_keymap_entry_from_scancode”sbŒ#c.sparse_keymap_entry_from_scancode”†”asbuh1hhjvƒh²hh³j‡ƒh´K7ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvƒh²hh³j‡ƒh´K7ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjȃh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjvƒh²hh³j‡ƒh´K7ubj#)�”}”(hŒ!sparse_keymap_entry_from_scancode”h]”j))�”}”(hj·ƒh]”hŒ!sparse_keymap_entry_from_scancode”…”�”}”(hjÙƒh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÕƒubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjvƒh²hh³j‡ƒh´K7ubj’)�”}”(hŒ*(struct input_dev *dev, unsigned int code)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjôƒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjðƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðƒubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j„Œmodname”NŒ classname”Njm jp )�”}”js ]”jµƒŒ#c.sparse_keymap_entry_from_scancode”†”asbuh1hhjðƒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðƒubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj>„h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjðƒubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjK„h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjðƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjìƒubj˜)�”}”(hŒunsigned int code”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjd„h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj`„ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`„ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj€„h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj`„ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`„ubj))�”}”(hŒcode”h]”hŒcode”…”�”}”(hjœ„h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj`„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjìƒubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjvƒh²hh³j‡ƒh´K7ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjrƒh²hh³j‡ƒh´K7ubah}”(h]”jmƒah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j‡ƒh´K7hjoƒh²hubjW)�”}”(hhh]”j\)�”}”(hŒperform sparse keymap lookup”h]”hŒperform sparse keymap lookup”…”�”}”(hjÆ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K7hjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjoƒh²hh³j‡ƒh´K7ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jÞ„j|jÞ„j}‰j~‰j‰uh1hîh²hhjÈ€h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjè„h]”hŒ Parameters”…”�”}”(hjê„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjæ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K;hjâ„ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ;``struct input_dev *dev`` Input device using sparse keymap ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hj…h]”hŒstruct input_dev *dev”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K8hj…ubjö)�”}”(hhh]”j\)�”}”(hŒ Input device using sparse keymap”h]”hŒ Input device using sparse keymap”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j…h´K8hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j…h´K8hjþ„ubjÔ)�”}”(hŒ ``unsigned int code`` Scan code ”h]”(jÚ)�”}”(hŒ``unsigned int code``”h]”jà)�”}”(hj@…h]”hŒunsigned int code”…”�”}”(hjB…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj>…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K9hj:…ubjö)�”}”(hhh]”j\)�”}”(hŒ Scan code”h]”hŒ Scan code”…”�”}”(hjY…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jU…h´K9hjV…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj:…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jU…h´K9hjþ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjâ„ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj{…h]”hŒ Description”…”�”}”(hj}…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjy…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K;hjâ„ubj\)�”}”(hŒvThis 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 ”…”�”}”(hj‘…h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct key_entry `”h]”jà)�”}”(hj›…h]”hŒstruct key_entry”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhj™…ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œ key_entry”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K:hj‘…ubhŒ/ lookup in an input device using sparse keymap.”…”�”}”(hj‘…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¸…h´K:hjâ„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÈ€h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ-sparse_keymap_entry_from_keycode (C function)”Œ"c.sparse_keymap_entry_from_keycode”hNt”auh1hÜhjÈ€h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒastruct 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]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjã…h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjß…h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KLubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß…h²hh³jð…h´KLubh)�”}”(hhh]”j))�”}”(hŒ key_entry”h]”hŒ key_entry”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÿ…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j†Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑŒ sparse_keymap_entry_from_keycode”sbŒ"c.sparse_keymap_entry_from_keycode”†”asbuh1hhjß…h²hh³jð…h´KLubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß…h²hh³jð…h´KLubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj1†h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjß…h²hh³jð…h´KLubj#)�”}”(hŒ sparse_keymap_entry_from_keycode”h]”j))�”}”(hj †h]”hŒ sparse_keymap_entry_from_keycode”…”�”}”(hjB†h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj>†ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjß…h²hh³jð…h´KLubj’)�”}”(hŒ-(struct input_dev *dev, unsigned int keycode)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj]†h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjY†ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY†ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj{†h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjx†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j}†Œmodname”NŒ classname”Njm jp )�”}”js ]”j†Œ"c.sparse_keymap_entry_from_keycode”†”asbuh1hhjY†ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY†ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj§†h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjY†ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hj´†h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjY†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjU†ubj˜)�”}”(hŒunsigned int keycode”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj͆h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjɆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjɆubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjé†h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjɆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjɆubj))�”}”(hŒkeycode”h]”hŒkeycode”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjɆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjU†ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjß…h²hh³jð…h´KLubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÛ…h²hh³jð…h´KLubah}”(h]”jÖ…ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jð…h´KLhjØ…h²hubjW)�”}”(hhh]”j\)�”}”(hŒperform sparse keymap lookup”h]”hŒperform sparse keymap lookup”…”�”}”(hj/‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KLhj,‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjØ…h²hh³jð…h´KLubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jG‡j|jG‡j}‰j~‰j‰uh1hîh²hhjÈ€h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjQ‡h]”hŒ Parameters”…”�”}”(hjS‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjO‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KPhjK‡ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ;``struct input_dev *dev`` Input device using sparse keymap ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjp‡h]”hŒstruct input_dev *dev”…”�”}”(hjr‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjn‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KMhjj‡ubjö)�”}”(hhh]”j\)�”}”(hŒ Input device using sparse keymap”h]”hŒ Input device using sparse keymap”…”�”}”(hj‰‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j…‡h´KMhj†‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j…‡h´KMhjg‡ubjÔ)�”}”(hŒ"``unsigned int keycode`` Key code ”h]”(jÚ)�”}”(hŒ``unsigned int keycode``”h]”jà)�”}”(hj©‡h]”hŒunsigned int keycode”…”�”}”(hj«‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj§‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KNhj£‡ubjö)�”}”(hhh]”j\)�”}”(hŒKey code”h]”hŒKey code”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¾‡h´KNhj¿‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj£‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¾‡h´KNhjg‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjK‡ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjä‡h]”hŒ Description”…”�”}”(hjæ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjâ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KPhjK‡ubj\)�”}”(hŒvThis 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 ”…”�”}”(hjú‡h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct key_entry `”h]”jà)�”}”(hjˆh]”hŒstruct key_entry”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhjˆubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œ key_entry”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KOhjú‡ubhŒ/ lookup in an input device using sparse keymap.”…”�”}”(hjú‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j!ˆh´KOhjK‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÈ€h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ sparse_keymap_setup (C function)”Œc.sparse_keymap_setup”hNt”auh1hÜhjÈ€h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ…int sparse_keymap_setup (struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev *, struct key_entry *))”h]”hú)�”}”(hŒ‚int sparse_keymap_setup(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjLˆh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjHˆh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHˆh²hh³jZˆh´K›ubj#)�”}”(hŒsparse_keymap_setup”h]”j))�”}”(hŒsparse_keymap_setup”h]”hŒsparse_keymap_setup”…”�”}”(hjmˆh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjiˆubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjHˆh²hh³jZˆh´K›ubj’)�”}”(hŒk(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj‰ˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj…ˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–ˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…ˆubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj§ˆh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¤ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j©ˆŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjoˆsbŒc.sparse_keymap_setup”†”asbuh1hhj…ˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…ˆubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjÕˆh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj…ˆubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjâˆh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj…ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj�ˆubj˜)�”}”(hŒconst struct key_entry *keymap”h]”(j)�”}”(hjó$h]”hŒconst”…”�”}”(hjûˆh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj÷ˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷ˆubj)�”}”(hjh]”hŒstruct”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj÷ˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷ˆubh)�”}”(hhh]”j))�”}”(hŒ key_entry”h]”hŒ key_entry”…”�”}”(hj4‰h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj1‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j6‰Œmodname”NŒ classname”Njm jp )�”}”js ]”jÈŒc.sparse_keymap_setup”†”asbuh1hhj÷ˆubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷ˆubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj`‰h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj÷ˆubj))�”}”(hŒkeymap”h]”hŒkeymap”…”�”}”(hjm‰h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj÷ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj�ˆubj˜)�”}”(hŒ2int (*setup)(struct input_dev*, struct key_entry*)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj†‰h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj‚‰ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚‰ubjí)�”}”(hj2Nh]”hŒ(”…”�”}”(hj¢‰h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj¯‰h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubj))�”}”(hŒsetup”h]”hŒsetup”…”�”}”(hj¼‰h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj‚‰ubjí)�”}”(hj[Nh]”hŒ)”…”�”}”(hjʉh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubjí)�”}”(hj2Nh]”hŒ(”…”�”}”(hj׉h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubj)�”}”(hjh]”hŒstruct”…”�”}”(hjä‰h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj‚‰ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚‰ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÿ‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jŠŒmodname”NŒ classname”Njm jp )�”}”js ]”jÈŒc.sparse_keymap_setup”†”asbuh1hhj‚‰ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubjí)�”}”(hj¿Nh]”hŒ,”…”�”}”(hj-Šh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚‰ubj)�”}”(hjh]”hŒstruct”…”�”}”(hjHŠh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj‚‰ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚‰ubh)�”}”(hhh]”j))�”}”(hŒ key_entry”h]”hŒ key_entry”…”�”}”(hjfŠh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjcŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jhŠŒmodname”NŒ classname”Njm jp )�”}”js ]”jÈŒc.sparse_keymap_setup”†”asbuh1hhj‚‰ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj„Šh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubjí)�”}”(hj[Nh]”hŒ)”…”�”}”(hj‘Šh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj‚‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj�ˆubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjHˆh²hh³jZˆh´K›ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjDˆh²hh³jZˆh´K›ubah}”(h]”j?ˆah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jZˆh´K›hjAˆh²hubjW)�”}”(hhh]”j\)�”}”(hŒ(set up sparse keymap for an input device”h]”hŒ(set up sparse keymap for an input device”…”�”}”(hjºŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K›hj·Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjAˆh²hh³jZˆh´K›ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jÒŠj|jÒŠj}‰j~‰j‰uh1hîh²hhjÈ€h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjÜŠh]”hŒ Parameters”…”�”}”(hjÞŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÚŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KŸhjÖŠubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ'``struct input_dev *dev`` Input device ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjûŠh]”hŒstruct input_dev *dev”…”�”}”(hjýŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjùŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KœhjõŠubjö)�”}”(hhh]”j\)�”}”(hŒ Input device”h]”hŒ Input device”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j‹h´Kœhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjõŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j‹h´KœhjòŠubjÔ)�”}”(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à)�”}”(hj4‹h]”hŒconst struct key_entry *keymap”…”�”}”(hj6‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj2‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Kžhj.‹ubjö)�”}”(hhh]”j\)�”}”(hŒ[Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entry”h]”(hŒKeymap in form of array of ”…”�”}”(hjM‹h²hh³Nh´Nubh)�”}”(hŒ:c:type:`key_entry`”h]”jà)�”}”(hjW‹h]”hŒ key_entry”…”�”}”(hjY‹h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhjU‹ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jm jq ju Œ key_entry”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K�hjM‹ubhŒ structures ending with ”…”�”}”(hjM‹h²hh³Nh´Nubjà)�”}”(hŒ ``KE_END``”h]”hŒKE_END”…”�”}”(hjy‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjM‹ubhŒ type entry”…”�”}”(hjM‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jt‹h´K�hjJ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj.‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jI‹h´KžhjòŠubjÔ)�”}”(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Ú)�”}”(hŒ8``int (*setup)(struct input_dev *, struct key_entry *)``”h]”jà)�”}”(hj£‹h]”hŒ4int (*setup)(struct input_dev *, struct key_entry *)”…”�”}”(hj¥‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¡‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K hj�‹ubjö)�”}”(hhh]”j\)�”}”(hŒ_Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL``”h]”(hŒYFunction that can be used to adjust keymap entries depending on device’s needs, may be ”…”�”}”(hj¼‹h²hh³Nh´Nubjà)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÄ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¼‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KŸhj¹‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj�‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¸‹h´K hjòŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÖŠubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjí‹h]”hŒ Description”…”�”}”(hjï‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjë‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K¢hjÖŠubj\)�”}”(hŒÖ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]”hŒÖ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.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´K¡hjÖŠubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÈ€h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'sparse_keymap_report_entry (C function)”Œc.sparse_keymap_report_entry”hNt”auh1hÜhjÈ€h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒyvoid sparse_keymap_report_entry (struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)”h]”hú)�”}”(hŒxvoid sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj2Œh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj.Œh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Kßubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.Œh²hh³j@Œh´Kßubj#)�”}”(hŒsparse_keymap_report_entry”h]”j))�”}”(hŒsparse_keymap_report_entry”h]”hŒsparse_keymap_report_entry”…”�”}”(hjSŒh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjOŒubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj.Œh²hh³j@Œh´Kßubj’)�”}”(hŒY(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjoŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjkŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkŒubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjŠŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j�ŒŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjUŒsbŒc.sparse_keymap_report_entry”†”asbuh1hhjkŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkŒubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj»Œh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjkŒubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÈŒh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjkŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjgŒubj˜)�”}”(hŒconst struct key_entry *ke”h]”(j)�”}”(hjó$h]”hŒconst”…”�”}”(hjáŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÝŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝŒubj)�”}”(hjh]”hŒstruct”…”�”}”(hjüŒh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÝŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝŒubh)�”}”(hhh]”j))�”}”(hŒ key_entry”h]”hŒ key_entry”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j�Œmodname”NŒ classname”Njm jp )�”}”js ]”j©ŒŒc.sparse_keymap_report_entry”†”asbuh1hhjÝŒubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝŒubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjF�h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjÝŒubj))�”}”(hŒke”h]”hŒke”…”�”}”(hjS�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÝŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjgŒubj˜)�”}”(hŒunsigned int value”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjl�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjh�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh�ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjˆ�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjh�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh�ubj))�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjh�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjgŒubj˜)�”}”(hŒbool autorelease”h]”(jZ)�”}”(hj�Th]”hŒbool”…”�”}”(hj½�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj¹�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹�ubj))�”}”(hŒ autorelease”h]”hŒ autorelease”…”�”}”(hjØ�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¹�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjgŒubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj.Œh²hh³j@Œh´Kßubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj*Œh²hh³j@Œh´Kßubah}”(h]”j%Œah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j@Œh´Kßhj'Œh²hubjW)�”}”(hhh]”j\)�”}”(hŒ-report event corresponding to given key entry”h]”hŒ-report event corresponding to given key entry”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Kßhjÿ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj'Œh²hh³j@Œh´Kßubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jŽj|jŽj}‰j~‰j‰uh1hîh²hhjÈ€h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj$Žh]”hŒ Parameters”…”�”}”(hj&Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj"Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KãhjŽubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒJ``struct input_dev *dev`` Input device for which event should be reported ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjCŽh]”hŒstruct input_dev *dev”…”�”}”(hjEŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjAŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Kàhj=Žubjö)�”}”(hhh]”j\)�”}”(hŒ/Input device for which event should be reported”h]”hŒ/Input device for which event should be reported”…”�”}”(hj\Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jXŽh´KàhjYŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj=Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jXŽh´Kàhj:ŽubjÔ)�”}”(hŒ:``const struct key_entry *ke`` key entry describing event ”h]”(jÚ)�”}”(hŒ``const struct key_entry *ke``”h]”jà)�”}”(hj|Žh]”hŒconst struct key_entry *ke”…”�”}”(hj~Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjzŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´KáhjvŽubjö)�”}”(hhh]”j\)�”}”(hŒkey entry describing event”h]”hŒkey entry describing event”…”�”}”(hj•Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j‘Žh´Káhj’Žubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjvŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j‘Žh´Káhj:ŽubjÔ)�”}”(hŒT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) ”h]”(jÚ)�”}”(hŒ``unsigned int value``”h]”jà)�”}”(hjµŽh]”hŒunsigned int value”…”�”}”(hj·Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj³Žubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Kâhj¯Žubjö)�”}”(hhh]”j\)�”}”(hŒ`.”h]”(hŒ?This function is used to report input event described by given ”…”�”}”(hjd�h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct key_entry `”h]”jà)�”}”(hjn�h]”hŒstruct key_entry”…”�”}”(hjp�h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhjl�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œ key_entry”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Kæhjd�ubhŒ.”…”�”}”(hjd�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j‹�h´KæhjŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjÈ€h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'sparse_keymap_report_event (C function)”Œc.sparse_keymap_report_event”hNt”auh1hÜhjÈ€h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒpbool sparse_keymap_report_event (struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)”h]”hú)�”}”(hŒobool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)”h]”(jZ)�”}”(hj�Th]”hŒbool”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj²�h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Mubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²�h²hh³jÃ�h´Mubj#)�”}”(hŒsparse_keymap_report_event”h]”j))�”}”(hŒsparse_keymap_report_event”h]”hŒsparse_keymap_report_event”…”�”}”(hjÖ�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÒ�ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj²�h²hh³jÃ�h´Mubj’)�”}”(hŒP(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)”h]”(j˜)�”}”(hŒstruct input_dev *dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjò�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjî�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjî�ubh)�”}”(hhh]”j))�”}”(hŒ input_dev”h]”hŒ input_dev”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj �ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j�Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjØ�sbŒc.sparse_keymap_report_event”†”asbuh1hhjî�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjî�ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj>�h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjî�ubj))�”}”(hŒdev”h]”hŒdev”…”�”}”(hjK�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjî�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjê�ubj˜)�”}”(hŒunsigned int code”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjd�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj`�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`�ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj`�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`�ubj))�”}”(hŒcode”h]”hŒcode”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj`�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjê�ubj˜)�”}”(hŒunsigned int value”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjµ�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj±�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±�ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÑ�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj±�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±�ubj))�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjí�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj±�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjê�ubj˜)�”}”(hŒbool autorelease”h]”(jZ)�”}”(hj�Th]”hŒbool”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj‘ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ubj))�”}”(hŒ autorelease”h]”hŒ autorelease”…”�”}”(hj!‘h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjê�ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj²�h²hh³jÃ�h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj®�h²hh³jÃ�h´Mubah}”(h]”j©�ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jÃ�h´Mhj«�h²hubjW)�”}”(hhh]”j\)�”}”(hŒ,report event corresponding to given scancode”h]”hŒ,report event corresponding to given scancode”…”�”}”(hjK‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´MhjH‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj«�h²hh³jÃ�h´Mubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jc‘j|jc‘j}‰j~‰j‰uh1hîh²hhjÈ€h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjm‘h]”hŒ Parameters”…”�”}”(hjo‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjk‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´M hjg‘ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ;``struct input_dev *dev`` Input device using sparse keymap ”h]”(jÚ)�”}”(hŒ``struct input_dev *dev``”h]”jà)�”}”(hjŒ‘h]”hŒstruct input_dev *dev”…”�”}”(hjŽ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjŠ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Mhj†‘ubjö)�”}”(hhh]”j\)�”}”(hŒ Input device using sparse keymap”h]”hŒ Input device using sparse keymap”…”�”}”(hj¥‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¡‘h´Mhj¢‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj†‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¡‘h´Mhjƒ‘ubjÔ)�”}”(hŒ ``unsigned int code`` Scan code ”h]”(jÚ)�”}”(hŒ``unsigned int code``”h]”jà)�”}”(hjÅ‘h]”hŒunsigned int code”…”�”}”(hjÇ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Mhj¿‘ubjö)�”}”(hhh]”j\)�”}”(hŒ Scan code”h]”hŒ Scan code”…”�”}”(hjÞ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jÚ‘h´MhjÛ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¿‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jÚ‘h´Mhjƒ‘ubjÔ)�”}”(hŒT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) ”h]”(jÚ)�”}”(hŒ``unsigned int value``”h]”jà)�”}”(hjþ‘h]”hŒunsigned int value”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjü‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.c”h´Mhjø‘ubjö)�”}”(hhh]”j\)�”}”(hŒ`) of the received data byte ``receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocol”h]”(j\)�”}”(hŒ**Definition**::”h]”(j‹)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÏ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjË”ubhŒ:”…”�”}”(hjË”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K'hjÇ”ubj¦)�”}”(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; };”…”�”}”hjè”sbah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j¥h³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K)hjÇ”ubj\)�”}”(hŒ **Members**”h]”j‹)�”}”(hjù”h]”hŒMembers”…”�”}”(hjû”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj÷”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K5hjÇ”ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ/``serio`` a serio port used by the PS/2 device ”h]”(jÚ)�”}”(hŒ ``serio``”h]”jà)�”}”(hj•h]”hŒserio”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K%hj•ubjö)�”}”(hhh]”j\)�”}”(hŒ$a serio port used by the PS/2 device”h]”hŒ$a serio port used by the PS/2 device”…”�”}”(hj1•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j-•h´K%hj.•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j-•h´K%hj•ubjÔ)�”}”(hŒL``cmd_mutex`` a mutex ensuring that only one command is executing at a time ”h]”(jÚ)�”}”(hŒ ``cmd_mutex``”h]”jà)�”}”(hjQ•h]”hŒ cmd_mutex”…”�”}”(hjS•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjO•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K&hjK•ubjö)�”}”(hhh]”j\)�”}”(hŒ=a mutex ensuring that only one command is executing at a time”h]”hŒ=a mutex ensuring that only one command is executing at a time”…”�”}”(hjj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jf•h´K&hjg•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjK•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jf•h´K&hj•ubjÔ)�”}”(hŒP``wait`` a waitqueue used to signal completion from the serio interrupt handler ”h]”(jÚ)�”}”(hŒ``wait``”h]”jà)�”}”(hjŠ•h]”hŒwait”…”�”}”(hjŒ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjˆ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K'hj„•ubjö)�”}”(hhh]”j\)�”}”(hŒFa waitqueue used to signal completion from the serio interrupt handler”h]”hŒFa waitqueue used to signal completion from the serio interrupt handler”…”�”}”(hj£•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jŸ•h´K'hj •ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj„•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jŸ•h´K'hj•ubjÔ)�”}”(hŒM``flags`` various internal flags indicating stages of PS/2 command execution ”h]”(jÚ)�”}”(hŒ ``flags``”h]”jà)�”}”(hjÕh]”hŒflags”…”�”}”(hjÅ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÁ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K(hj½•ubjö)�”}”(hhh]”j\)�”}”(hŒBvarious internal flags indicating stages of PS/2 command execution”h]”hŒBvarious internal flags indicating stages of PS/2 command execution”…”�”}”(hjÜ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jØ•h´K(hjÙ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj½•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jØ•h´K(hj•ubjÔ)�”}”(hŒ+``cmdbuf`` buffer holding command response ”h]”(jÚ)�”}”(hŒ ``cmdbuf``”h]”jà)�”}”(hjü•h]”hŒcmdbuf”…”�”}”(hjþ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjú•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K)hjö•ubjö)�”}”(hhh]”j\)�”}”(hŒbuffer holding command response”h]”hŒbuffer holding command response”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j–h´K)hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjö•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j–h´K)hj•ubjÔ)�”}”(hŒ?``cmdcnt`` outstanding number of bytes of the command response ”h]”(jÚ)�”}”(hŒ ``cmdcnt``”h]”jà)�”}”(hj5–h]”hŒcmdcnt”…”�”}”(hj7–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj3–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K*hj/–ubjö)�”}”(hhh]”j\)�”}”(hŒ3outstanding number of bytes of the command response”h]”hŒ3outstanding number of bytes of the command response”…”�”}”(hjN–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jJ–h´K*hjK–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj/–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jJ–h´K*hj•ubjÔ)�”}”(hŒA``nak`` a byte transmitted by the device when it refuses command ”h]”(jÚ)�”}”(hŒ``nak``”h]”jà)�”}”(hjn–h]”hŒnak”…”�”}”(hjp–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjl–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K+hjh–ubjö)�”}”(hhh]”j\)�”}”(hŒ8a byte transmitted by the device when it refuses command”h]”hŒ8a byte transmitted by the device when it refuses command”…”�”}”(hj‡–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jƒ–h´K+hj„–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjh–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jƒ–h´K+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]”hŒpre_receive_handler”…”�”}”(hj©–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¥–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K-hj¡–ubjö)�”}”(hhh]”j\)�”}”(hŒ€checks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byte”h]”(hŒ5checks communication errors and returns disposition (”…”�”}”(hjÀ–h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`enum ps2_disposition `”h]”jà)�”}”(hjÊ–h]”hŒenum ps2_disposition”…”�”}”(hjÌ–h²hh³Nh´Nubah}”(h]”h ]”(j[ juŒc-type”eh"]”h$]”h&]”uh1jßhjÈ–ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jg Œ refdomain”juŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jm jq ju Œps2_disposition”uh1hh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K,hjÀ–ubhŒ) of the received data byte”…”�”}”(hjÀ–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jç–h´K,hj½–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¡–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¼–h´K-hj•ubjÔ)�”}”(hŒ```receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocol”h]”(jÚ)�”}”(hŒ``receive_handler``”h]”jà)�”}”(hj—h]”hŒreceive_handler”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³ŒW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.h”h´K.hjþ–ubjö)�”}”(hhh]”j\)�”}”(hŒLmain handler of particular PS/2 protocol, such as keyboard or mouse protocol”h]”hŒLmain handler of particular PS/2 protocol, such as keyboard or mouse protocol”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j—h´K.hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjþ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j—h´K.hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÇ”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_sendbyte (C function)”Œc.ps2_sendbyte”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒGint ps2_sendbyte (struct ps2dev *ps2dev, u8 byte, unsigned int timeout)”h]”hú)�”}”(hŒFint ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj]—h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjY—h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kbubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY—h²hh³jk—h´Kbubj#)�”}”(hŒ ps2_sendbyte”h]”j))�”}”(hŒ ps2_sendbyte”h]”hŒ ps2_sendbyte”…”�”}”(hj~—h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjz—ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjY—h²hh³jk—h´Kbubj’)�”}”(hŒ6(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)”h]”(j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjš—h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj–—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–—ubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hj¸—h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjµ—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jº—Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj€—sbŒc.ps2_sendbyte”†”asbuh1hhj–—ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–—ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjæ—h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj–—ubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjó—h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj–—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj’—ubj˜)�”}”(hŒu8 byte”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj ˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j˜Œmodname”NŒ classname”Njm jp )�”}”js ]”jÔ—Œc.ps2_sendbyte”†”asbuh1hhj˜ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜ubj))�”}”(hŒbyte”h]”hŒbyte”…”�”}”(hj;˜h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj’—ubj˜)�”}”(hŒunsigned int timeout”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjT˜h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjP˜ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjP˜ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjp˜h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjP˜ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjP˜ubj))�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjŒ˜h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjP˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj’—ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjY—h²hh³jk—h´Kbubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjU—h²hh³jk—h´Kbubah}”(h]”jP—ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jk—h´KbhjR—h²hubjW)�”}”(hhh]”j\)�”}”(hŒ7sends a byte to the device and wait for acknowledgement”h]”hŒ7sends a byte to the device and wait for acknowledgement”…”�”}”(hj¶˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kbhj³˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjR—h²hh³jk—h´Kbubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jΘj|jΘj}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjؘh]”hŒ Parameters”…”�”}”(hjÚ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÖ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KfhjÒ˜ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ<``struct ps2dev *ps2dev`` a PS/2 device to send the data to ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hj÷˜h]”hŒstruct ps2dev *ps2dev”…”�”}”(hjù˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjõ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kchjñ˜ubjö)�”}”(hhh]”j\)�”}”(hŒ!a PS/2 device to send the data to”h]”hŒ!a PS/2 device to send the data to”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j ™h´Kchj ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjñ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j ™h´Kchjî˜ubjÔ)�”}”(hŒ*``u8 byte`` data to be sent to the device ”h]”(jÚ)�”}”(hŒ ``u8 byte``”h]”jà)�”}”(hj0™h]”hŒu8 byte”…”�”}”(hj2™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj.™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kdhj*™ubjö)�”}”(hhh]”j\)�”}”(hŒdata to be sent to the device”h]”hŒdata to be sent to the device”…”�”}”(hjI™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jE™h´KdhjF™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj*™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jE™h´Kdhjî˜ubjÔ)�”}”(hŒS``unsigned int timeout`` timeout for sending the data and receiving an acknowledge ”h]”(jÚ)�”}”(hŒ``unsigned int timeout``”h]”jà)�”}”(hji™h]”hŒunsigned int timeout”…”�”}”(hjk™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjg™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kehjc™ubjö)�”}”(hhh]”j\)�”}”(hŒ9timeout for sending the data and receiving an acknowledge”h]”hŒ9timeout for sending the data and receiving an acknowledge”…”�”}”(hj‚™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j~™h´Kehj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjc™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j~™h´Kehjî˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÒ˜ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj¤™h]”hŒ Description”…”�”}”(hj¦™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj¢™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KghjÒ˜ubj\)�”}”(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º™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KfhjÒ˜ubj\)�”}”(hŒ9ps2_sendbyte() can only be called from a process context.”h]”hŒ9ps2_sendbyte() can only be called from a process context.”…”�”}”(hjÉ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KihjÒ˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_begin_command (C function)”Œc.ps2_begin_command”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ.void ps2_begin_command (struct ps2dev *ps2dev)”h]”hú)�”}”(hŒ-void ps2_begin_command(struct ps2dev *ps2dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjø™h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjô™h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kzubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô™h²hh³jšh´Kzubj#)�”}”(hŒps2_begin_command”h]”j))�”}”(hŒps2_begin_command”h]”hŒps2_begin_command”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjšubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjô™h²hh³jšh´Kzubj’)�”}”(hŒ(struct ps2dev *ps2dev)”h]”j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj5šh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj1šubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1šubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjSšh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjPšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jUšŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjšsbŒc.ps2_begin_command”†”asbuh1hhj1šubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1šubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj�šh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj1šubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjŽšh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj1šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj-šubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjô™h²hh³jšh´Kzubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjð™h²hh³jšh´Kzubah}”(h]”jë™ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jšh´Kzhjí™h²hubjW)�”}”(hhh]”j\)�”}”(hŒ0mark beginning of execution of a complex command”h]”hŒ0mark beginning of execution of a complex command”…”�”}”(hj¸šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kzhjµšh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjí™h²hh³jšh´Kzubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jКj|jКj}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjÚšh]”hŒ Parameters”…”�”}”(hjÜšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjØšubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K~hjÔšubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ>``struct ps2dev *ps2dev`` a PS/2 device executing the command ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hjùšh]”hŒstruct ps2dev *ps2dev”…”�”}”(hjûšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj÷šubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K{hjóšubjö)�”}”(hhh]”j\)�”}”(hŒ#a PS/2 device executing the command”h]”hŒ#a PS/2 device executing the command”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j›h´K{hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjóšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j›h´K{hjðšubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÔšubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj4›h]”hŒ Description”…”�”}”(hj6›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj2›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K}hjÔšubj\)�”}”(hŒcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.”h]”hŒcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.”…”�”}”(hjJ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K|hjÔšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_end_command (C function)”Œc.ps2_end_command”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ,void ps2_end_command (struct ps2dev *ps2dev)”h]”hú)�”}”(hŒ+void ps2_end_command(struct ps2dev *ps2dev)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjy›h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhju›h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K‰ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju›h²hh³j‡›h´K‰ubj#)�”}”(hŒps2_end_command”h]”j))�”}”(hŒps2_end_command”h]”hŒps2_end_command”…”�”}”(hjš›h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj–›ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hju›h²hh³j‡›h´K‰ubj’)�”}”(hŒ(struct ps2dev *ps2dev)”h]”j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj¶›h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj²›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²›ubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjÔ›h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÑ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÖ›Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjœ›sbŒc.ps2_end_command”†”asbuh1hhj²›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²›ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj²›ubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj²›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj®›ubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hju›h²hh³j‡›h´K‰ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjq›h²hh³j‡›h´K‰ubah}”(h]”jl›ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j‡›h´K‰hjn›h²hubjW)�”}”(hhh]”j\)�”}”(hŒ*mark end of execution of a complex command”h]”hŒ*mark end of execution of a complex command”…”�”}”(hj9œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K‰hj6œh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjn›h²hh³j‡›h´K‰ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jQœj|jQœj}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(hŒO**Parameters** ``struct ps2dev *ps2dev`` a PS/2 device executing the command”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj[œh]”hŒ Parameters”…”�”}”(hj]œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjYœubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K�hjUœubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ=``struct ps2dev *ps2dev`` a PS/2 device executing the command”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hjzœh]”hŒstruct ps2dev *ps2dev”…”�”}”(hj|œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjxœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K�hjtœubjö)�”}”(hhh]”j\)�”}”(hŒ#a PS/2 device executing the command”h]”hŒ#a PS/2 device executing the command”…”�”}”(hj“œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KŠhj�œubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjtœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j�œh´K�hjqœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjUœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_drain (C function)”Œ c.ps2_drain”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒMvoid ps2_drain (struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)”h]”hú)�”}”(hŒLvoid ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔœh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjМh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K•ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjМh²hh³jâœh´K•ubj#)�”}”(hŒ ps2_drain”h]”j))�”}”(hŒ ps2_drain”h]”hŒ ps2_drain”…”�”}”(hjõœh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjñœubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjМh²hh³jâœh´K•ubj’)�”}”(hŒ>(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)”h]”(j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj �ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj �ubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hj/�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj,�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j1�Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj÷œsbŒ c.ps2_drain”†”asbuh1hhj �ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj �ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj �ubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjj�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj �ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj �ubj˜)�”}”(hŒsize_t maxbytes”h]”(h)�”}”(hhh]”j))�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj†�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjƒ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jˆ�Œmodname”NŒ classname”Njm jp )�”}”js ]”jK�Œ c.ps2_drain”†”asbuh1hhj�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubj))�”}”(hŒmaxbytes”h]”hŒmaxbytes”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj �ubj˜)�”}”(hŒunsigned int timeout”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjË�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÇ�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ�ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjç�h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÇ�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ�ubj))�”}”(hŒtimeout”h]”hŒtimeout”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÇ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj �ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjМh²hh³jâœh´K•ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÌœh²hh³jâœh´K•ubah}”(h]”jÇœah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jâœh´K•hjÉœh²hubjW)�”}”(hhh]”j\)�”}”(hŒHwaits for device to transmit requested number of bytes and discards them”h]”hŒHwaits for device to transmit requested number of bytes and discards them”…”�”}”(hj-žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K•hj*žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjÉœh²hh³jâœh´K•ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jEžj|jEžj}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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 device”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjOžh]”hŒ Parameters”…”�”}”(hjQžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjMžubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K™hjIžubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒA``struct ps2dev *ps2dev`` the PS/2 device that should be drained ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hjnžh]”hŒstruct ps2dev *ps2dev”…”�”}”(hjpžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjlžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K—hjhžubjö)�”}”(hhh]”j\)�”}”(hŒ&the PS/2 device that should be drained”h]”hŒ&the PS/2 device that should be drained”…”�”}”(hj‡žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jƒžh´K—hj„žubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjhžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jƒžh´K—hježubjÔ)�”}”(hŒ:``size_t maxbytes`` maximum number of bytes to be drained ”h]”(jÚ)�”}”(hŒ``size_t maxbytes``”h]”jà)�”}”(hj§žh]”hŒsize_t maxbytes”…”�”}”(hj©žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¥žubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K˜hj¡žubjö)�”}”(hhh]”j\)�”}”(hŒ%maximum number of bytes to be drained”h]”hŒ%maximum number of bytes to be drained”…”�”}”(hjÀžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j¼žh´K˜hj½žubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¡žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j¼žh´K˜hježubjÔ)�”}”(hŒ1``unsigned int timeout`` time to drain the device”h]”(jÚ)�”}”(hŒ``unsigned int timeout``”h]”jà)�”}”(hjàžh]”hŒunsigned int timeout”…”�”}”(hjâžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÞžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KšhjÚžubjö)�”}”(hhh]”j\)�”}”(hŒtime to drain the device”h]”hŒtime to drain the device”…”�”}”(hjùžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K™hjöžubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjÚžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jõžh´Kšhježubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjIžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_is_keyboard_id (C function)”Œc.ps2_is_keyboard_id”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ$bool ps2_is_keyboard_id (u8 id_byte)”h]”hú)�”}”(hŒ#bool ps2_is_keyboard_id(u8 id_byte)”h]”(jZ)�”}”(hj�Th]”hŒbool”…”�”}”(hj:Ÿh²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj6Ÿh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K°ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6Ÿh²hh³jGŸh´K°ubj#)�”}”(hŒps2_is_keyboard_id”h]”j))�”}”(hŒps2_is_keyboard_id”h]”hŒps2_is_keyboard_id”…”�”}”(hjZŸh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjVŸubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj6Ÿh²hh³jGŸh´K°ubj’)�”}”(hŒ (u8 id_byte)”h]”j˜)�”}”(hŒ u8 id_byte”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjyŸh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjvŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j{ŸŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj\ŸsbŒc.ps2_is_keyboard_id”†”asbuh1hhjrŸubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrŸubj))�”}”(hŒid_byte”h]”hŒid_byte”…”�”}”(hj§Ÿh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjrŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjnŸubah}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj6Ÿh²hh³jGŸh´K°ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhj2Ÿh²hh³jGŸh´K°ubah}”(h]”j-Ÿah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jGŸh´K°hj/Ÿh²hubjW)�”}”(hhh]”j\)�”}”(hŒ>checks received ID byte against the list of known keyboard IDs”h]”hŒ>checks received ID byte against the list of known keyboard IDs”…”�”}”(hjÑŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K°hjΟh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj/Ÿh²hh³jGŸh´K°ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jéŸj|jéŸj}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(hŒA**Parameters** ``u8 id_byte`` data byte that should be checked”h]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjóŸh]”hŒ Parameters”…”�”}”(hjõŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjñŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´•×°K´hjíŸubjÏ)�”}”(hhh]”jÔ)�”}”(hŒ/``u8 id_byte`` data byte that should be checked”h]”(jÚ)�”}”(hŒ``u8 id_byte``”h]”jà)�”}”(hj h]”hŒ u8 id_byte”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K¶hj  ubjö)�”}”(hhh]”j\)�”}”(hŒ data byte that should be checked”h]”hŒ data byte that should be checked”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´K²hj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj  ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j' h´K¶hj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjíŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__ps2_command (C function)”Œc.__ps2_command”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒJint __ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)”h]”hú)�”}”(hŒIint __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjh h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kúubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh h²hh³jz h´Kúubj#)�”}”(hŒ __ps2_command”h]”j))�”}”(hŒ __ps2_command”h]”hŒ __ps2_command”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj‰ ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjh h²hh³jz h´Kúubj’)�”}”(hŒ8(struct ps2dev *ps2dev, u8 *param, unsigned int command)”h]”(j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj¥ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥ ubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÄ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÉ Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj� sbŒc.__ps2_command”†”asbuh1hhj¥ ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥ ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj¥ ubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¡ ubj˜)�”}”(hŒ u8 *param”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j ¡Œmodname”NŒ classname”Njm jp )�”}”js ]”jã Œc.__ps2_command”†”asbuh1hhj¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjJ¡h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj¡ubj))�”}”(hŒparam”h]”hŒparam”…”�”}”(hjW¡h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¡ ubj˜)�”}”(hŒunsigned int command”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjp¡h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjl¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl¡ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjŒ¡h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjl¡ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl¡ubj))�”}”(hŒcommand”h]”hŒcommand”…”�”}”(hj¨¡h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjl¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj¡ ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjh h²hh³jz h´Kúubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjd h²hh³jz h´Kúubah}”(h]”j_ ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jz h´Kúhja h²hubjW)�”}”(hhh]”j\)�”}”(hŒsend a command to PS/2 device”h]”hŒsend a command to PS/2 device”…”�”}”(hjÒ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KúhjÏ¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhja h²hh³jz h´Kúubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jê¡j|jê¡j}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hjô¡h]”hŒ Parameters”…”�”}”(hjö¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjò¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kþhjî¡ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hj¢h]”hŒstruct ps2dev *ps2dev”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kûhj ¢ubjö)�”}”(hhh]”j\)�”}”(hŒ/the PS/2 device that should execute the command”h]”hŒ/the PS/2 device that should execute the command”…”�”}”(hj,¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j(¢h´Kûhj)¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j(¢h´Kûhj ¢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à)�”}”(hjL¢h]”hŒ u8 *param”…”�”}”(hjN¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjJ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´KþhjF¢ubjö)�”}”(hhh]”j\)�”}”(hŒ�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]”hŒ�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”…”�”}”(hje¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kühjb¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjF¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³ja¢h´Kþhj ¢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à)�”}”(hj†¢h]”hŒunsigned int command”…”�”}”(hjˆ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj„¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Mhj€¢ubjö)�”}”(hhh]”j\)�”}”(hŒ«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]”hŒ«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”…”�”}”(hjŸ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Kÿhjœ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj€¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j›¢h´Mhj ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjî¡ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj¢h]”hŒ Description”…”�”}”(hjÄ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjÀ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Mhjî¡ubj\)�”}”(hŒ�Not serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.”h]”hŒ�Not serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.”…”�”}”(hjØ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Mhjî¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_command (C function)”Œ c.ps2_command”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒHint ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)”h]”hú)�”}”(hŒGint ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj£h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M�ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£h²hh³j£h´M�ubj#)�”}”(hŒ ps2_command”h]”j))�”}”(hŒ ps2_command”h]”hŒ ps2_command”…”�”}”(hj(£h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj$£ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj£h²hh³j£h´M�ubj’)�”}”(hŒ8(struct ps2dev *ps2dev, u8 *param, unsigned int command)”h]”(j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjD£h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj@£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@£ubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjb£h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj_£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jd£Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑj*£sbŒ c.ps2_command”†”asbuh1hhj@£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@£ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj�£h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj@£ubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hj�£h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj@£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj<£ubj˜)�”}”(hŒ u8 *param”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj¹£h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¶£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j»£Œmodname”NŒ classname”Njm jp )�”}”js ]”j~£Œ c.ps2_command”†”asbuh1hhj²£ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²£ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjå£h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj²£ubj))�”}”(hŒparam”h]”hŒparam”…”�”}”(hjò£h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj²£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj<£ubj˜)�”}”(hŒunsigned int command”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj ¤h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj¤ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj'¤h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj¤ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ubj))�”}”(hŒcommand”h]”hŒcommand”…”�”}”(hjC¤h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj<£ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj£h²hh³j£h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjÿ¢h²hh³j£h´M�ubah}”(h]”jú¢ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j£h´M�hjü¢h²hubjW)�”}”(hhh]”j\)�”}”(hŒsend a command to PS/2 device”h]”hŒsend a command to PS/2 device”…”�”}”(hjm¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M�hjj¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjü¢h²hh³j£h´M�ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j…¤j|j…¤j}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj�¤h]”hŒ Parameters”…”�”}”(hj‘¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj�¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M…hj‰¤ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hj®¤h]”hŒstruct ps2dev *ps2dev”…”�”}”(hj°¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¬¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M‚hj¨¤ubjö)�”}”(hhh]”j\)�”}”(hŒ/the PS/2 device that should execute the command”h]”hŒ/the PS/2 device that should execute the command”…”�”}”(hjǤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jäh´M‚hjĤubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¨¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jäh´M‚hj¥¤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à)�”}”(hjç¤h]”hŒ u8 *param”…”�”}”(hjé¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjå¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M…hjá¤ubjö)�”}”(hhh]”j\)�”}”(hŒ�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]”hŒ�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”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Mƒhjý¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjá¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jü¤h´M…hj¥¤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à)�”}”(hj!¥h]”hŒunsigned int command”…”�”}”(hj#¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Mˆhj¥ubjö)�”}”(hhh]”j\)�”}”(hŒ«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]”hŒ«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”…”�”}”(hj:¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M†hj7¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j6¥h´Mˆhj¥¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj‰¤ubj\)�”}”(hŒ**Note**”h]”j‹)�”}”(hj]¥h]”hŒNote”…”�”}”(hj_¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj[¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MŠhj‰¤ubj\)�”}”(hŒ›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]”hŒ›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.”…”�”}”(hjs¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MŠhj‰¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_sliced_command (C function)”Œc.ps2_sliced_command”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ:int ps2_sliced_command (struct ps2dev *ps2dev, u8 command)”h]”hú)�”}”(hŒ9int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)”h]”(jZ)�”}”(hŒint”h]”hŒint”…”�”}”(hj¢¥h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjž¥h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M›ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž¥h²hh³j°¥h´M›ubj#)�”}”(hŒps2_sliced_command”h]”j))�”}”(hŒps2_sliced_command”h]”hŒps2_sliced_command”…”�”}”(hjÃ¥h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¿¥ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hjž¥h²hh³j°¥h´M›ubj’)�”}”(hŒ#(struct ps2dev *ps2dev, u8 command)”h]”(j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjߥh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjÛ¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ¥ubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjý¥h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjú¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÿ¥Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjÅ¥sbŒc.ps2_sliced_command”†”asbuh1hhjÛ¥ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ¥ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj+¦h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjÛ¥ubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hj8¦h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÛ¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj×¥ubj˜)�”}”(hŒ u8 command”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hjT¦h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjQ¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jV¦Œmodname”NŒ classname”Njm jp )�”}”js ]”j¦Œc.ps2_sliced_command”†”asbuh1hhjM¦ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM¦ubj))�”}”(hŒcommand”h]”hŒcommand”…”�”}”(hj€¦h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjM¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj×¥ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hjž¥h²hh³j°¥h´M›ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjš¥h²hh³j°¥h´M›ubah}”(h]”j•¥ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j°¥h´M›hj—¥h²hubjW)�”}”(hhh]”j\)�”}”(hŒ)sends an extended PS/2 command to a mouse”h]”hŒ)sends an extended PS/2 command to a mouse”…”�”}”(hjª¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M›hj§¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj—¥h²hh³j°¥h´M›ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j¦j|j¦j}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj̦h]”hŒ Parameters”…”�”}”(hjΦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjʦubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MŸhjƦubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hjë¦h]”hŒstruct ps2dev *ps2dev”…”�”}”(hjí¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjé¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´Mœhjå¦ubjö)�”}”(hhh]”j\)�”}”(hŒ/the PS/2 device that should execute the command”h]”hŒ/the PS/2 device that should execute the command”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j§h´Mœhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjå¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j§h´Mœhjâ¦ubjÔ)�”}”(hŒ``u8 command`` command byte ”h]”(jÚ)�”}”(hŒ``u8 command``”h]”jà)�”}”(hj$§h]”hŒ u8 command”…”�”}”(hj&§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj"§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M�hj§ubjö)�”}”(hhh]”j\)�”}”(hŒ command byte”h]”hŒ command byte”…”�”}”(hj=§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j9§h´M�hj:§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j9§h´M�hjâ¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjƦubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj_§h]”hŒ Description”…”�”}”(hja§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj]§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MŸhjƦubj\)�”}”(hŒâ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]”hŒæ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.”…”�”}”(hju§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MžhjƦubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_init (C function)”Œ c.ps2_init”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒ�void ps2_init (struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)”h]”hú)�”}”(hŒ�void ps2_init(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)”h]”(jZ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¤§h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhj §h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M¾ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj §h²hh³j²§h´M¾ubj#)�”}”(hŒps2_init”h]”j))�”}”(hŒps2_init”h]”hŒps2_init”…”�”}”(hjŧh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÁ§ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj §h²hh³j²§h´M¾ubj’)�”}”(hŒ‚(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)”h]”(j˜)�”}”(hŒstruct ps2dev *ps2dev”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjá§h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjݧubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjݧubh)�”}”(hhh]”j))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hjÿ§h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjü§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j¨Œmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑjǧsbŒ c.ps2_init”†”asbuh1hhjݧubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjݧubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj-¨h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjݧubj))�”}”(hŒps2dev”h]”hŒps2dev”…”�”}”(hj:¨h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjݧubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÙ§ubj˜)�”}”(hŒstruct serio *serio”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjS¨h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhjO¨ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO¨ubh)�”}”(hhh]”j))�”}”(hŒserio”h]”hŒserio”…”�”}”(hjq¨h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjn¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”js¨Œmodname”NŒ classname”Njm jp )�”}”js ]”j¨Œ c.ps2_init”†”asbuh1hhjO¨ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO¨ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hj�¨h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhjO¨ubj))�”}”(hŒserio”h]”hŒserio”…”�”}”(hjª¨h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjO¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÙ§ubj˜)�”}”(hŒ-ps2_pre_receive_handler_t pre_receive_handler”h]”(h)�”}”(hhh]”j))�”}”(hŒps2_pre_receive_handler_t”h]”hŒps2_pre_receive_handler_t”…”�”}”(hjƨh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jȨŒmodname”NŒ classname”Njm jp )�”}”js ]”j¨Œ c.ps2_init”†”asbuh1hhj¿¨ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿¨ubj))�”}”(hŒpre_receive_handler”h]”hŒpre_receive_handler”…”�”}”(hjò¨h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj¿¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÙ§ubj˜)�”}”(hŒ%ps2_receive_handler_t receive_handler”h]”(h)�”}”(hhh]”j))�”}”(hŒps2_receive_handler_t”h]”hŒps2_receive_handler_t”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj ©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j©Œmodname”NŒ classname”Njm jp )�”}”js ]”j¨Œ c.ps2_init”†”asbuh1hhj©ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubj))�”}”(hŒreceive_handler”h]”hŒreceive_handler”…”�”}”(hj:©h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hjÙ§ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj §h²hh³j²§h´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjœ§h²hh³j²§h´M¾ubah}”(h]”j—§ah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³j²§h´M¾hj™§h²hubjW)�”}”(hhh]”j\)�”}”(hŒinitializes ps2dev structure”h]”hŒinitializes ps2dev structure”…”�”}”(hjd©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M¾hja©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhj™§h²hh³j²§h´M¾ubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{j|©j|j|©j}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj†©h]”hŒ Parameters”…”�”}”(hjˆ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj„©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MÂhj€©ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ6``struct ps2dev *ps2dev`` structure to be initialized ”h]”(jÚ)�”}”(hŒ``struct ps2dev *ps2dev``”h]”jà)�”}”(hj¥©h]”hŒstruct ps2dev *ps2dev”…”�”}”(hj§©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj£©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´M¿hjŸ©ubjö)�”}”(hhh]”j\)�”}”(hŒstructure to be initialized”h]”hŒstructure to be initialized”…”�”}”(hj¾©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jº©h´M¿hj»©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjŸ©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jº©h´M¿hjœ©ubjÔ)�”}”(hŒC``struct serio *serio`` serio port associated with the PS/2 device ”h]”(jÚ)�”}”(hŒ``struct serio *serio``”h]”jà)�”}”(hjÞ©h]”hŒstruct serio *serio”…”�”}”(hjà©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjÜ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MÀhjØ©ubjö)�”}”(hhh]”j\)�”}”(hŒ*serio port associated with the PS/2 device”h]”hŒ*serio port associated with the PS/2 device”…”�”}”(hj÷©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jó©h´MÀhjô©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjØ©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jó©h´MÀhjœ©ubjÔ)�”}”(hŒh``ps2_pre_receive_handler_t pre_receive_handler`` validation handler to check basic communication state ”h]”(jÚ)�”}”(hŒ1``ps2_pre_receive_handler_t pre_receive_handler``”h]”jà)�”}”(hjªh]”hŒ-ps2_pre_receive_handler_t pre_receive_handler”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MÁhjªubjö)�”}”(hhh]”j\)�”}”(hŒ5validation handler to check basic communication state”h]”hŒ5validation handler to check basic communication state”…”�”}”(hj0ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j,ªh´MÁhj-ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j,ªh´MÁhjœ©ubjÔ)�”}”(hŒ@``ps2_receive_handler_t receive_handler`` main protocol handler ”h]”(jÚ)�”}”(hŒ)``ps2_receive_handler_t receive_handler``”h]”jà)�”}”(hjPªh]”hŒ%ps2_receive_handler_t receive_handler”…”�”}”(hjRªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjNªubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MÂhjJªubjö)�”}”(hhh]”j\)�”}”(hŒmain protocol handler”h]”hŒmain protocol handler”…”�”}”(hjiªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jeªh´MÂhjfªubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjJªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jeªh´MÂhjœ©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj€©ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hj‹ªh]”hŒ Description”…”�”}”(hj�ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj‰ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MÄhj€©ubj\)�”}”(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.”…”�”}”(hj¡ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MÃhj€©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒps2_interrupt (C function)”Œc.ps2_interrupt”hNt”auh1hÜhjï’h²hh³Nh´Nubhï)�”}”(hhh]”(hô)�”}”(hŒLirqreturn_t ps2_interrupt (struct serio *serio, u8 data, unsigned int flags)”h]”hú)�”}”(hŒKirqreturn_t ps2_interrupt(struct serio *serio, u8 data, unsigned int flags)”h]”(h)�”}”(hhh]”j))�”}”(hŒ irqreturn_t”h]”hŒ irqreturn_t”…”�”}”(hjÓªh²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjЪubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jÕªŒmodname”NŒ classname”Njm jp )�”}”js ]”jÙ)�”}”jÑŒ ps2_interrupt”sbŒc.ps2_interrupt”†”asbuh1hhj̪h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MEubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj̪h²hh³jôªh´MEubj#)�”}”(hŒ ps2_interrupt”h]”j))�”}”(hjñªh]”hŒ ps2_interrupt”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj«ubah}”(h]”h ]”(j;j<eh"]”h$]”h&]”j@jAuh1j"hj̪h²hh³jôªh´MEubj’)�”}”(hŒ2(struct serio *serio, u8 data, unsigned int flags)”h]”(j˜)�”}”(hŒstruct serio *serio”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj"«h²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1hÿhj«ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ubh)�”}”(hhh]”j))�”}”(hŒserio”h]”hŒserio”…”�”}”(hj@«h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj=«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”jB«Œmodname”NŒ classname”Njm jp )�”}”js ]”j戴c.ps2_interrupt”†”asbuh1hhj«ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ubjí)�”}”(hjðh]”hŒ*”…”�”}”(hjl«h²hh³Nh´Nubah}”(h]”h ]”jùah"]”h$]”h&]”uh1jìhj«ubj))�”}”(hŒserio”h]”hŒserio”…”�”}”(hjy«h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj«ubj˜)�”}”(hŒu8 data”h]”(h)�”}”(hhh]”j))�”}”(hŒu8”h]”hŒu8”…”�”}”(hj•«h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hj’«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”juŒreftype”jÑŒ reftarget”j—«Œmodname”NŒ classname”Njm jp )�”}”js ]”j戴c.ps2_interrupt”†”asbuh1hhjŽ«ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽ«ubj))�”}”(hŒdata”h]”hŒdata”…”�”}”(hjÁ«h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjŽ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj«ubj˜)�”}”(hŒunsigned int flags”h]”(jZ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÚ«h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÖ«ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖ«ubjZ)�”}”(hŒint”h]”hŒint”…”�”}”(hjö«h²hh³Nh´Nubah}”(h]”h ]”jfah"]”h$]”h&]”uh1jYhjÖ«ubj)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖ«ubj))�”}”(hŒflags”h]”hŒflags”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j4ah"]”h$]”h&]”uh1j(hjÖ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj@jAuh1j—hj«ubeh}”(h]”h ]”h"]”h$]”h&]”j@jAuh1j‘hj̪h²hh³jôªh´MEubeh}”(h]”h ]”h"]”h$]”h&]”j@jAjHˆuh1hùjIjJhjȪh²hh³jôªh´MEubah}”(h]”jêah ]”(jNjOeh"]”h$]”h&]”jSˆjT)jUhuh1hóh³jôªh´MEhjŪh²hubjW)�”}”(hhh]”j\)�”}”(hŒ)common interrupt handler for PS/2 devices”h]”hŒ)common interrupt handler for PS/2 devices”…”�”}”(hj<¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MEhj9¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jVhjŪh²hh³jôªh´MEubeh}”(h]”h ]”(juŒfunction”eh"]”h$]”h&]”jzjuj{jT¬j|jT¬j}‰j~‰j‰uh1hîh²hhjï’h³Nh´Nubj�)�”}”(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]”(j\)�”}”(hŒ**Parameters**”h]”j‹)�”}”(hj^¬h]”hŒ Parameters”…”�”}”(hj`¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhj\¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MIhjX¬ubjÏ)�”}”(hhh]”(jÔ)�”}”(hŒ2``struct serio *serio`` serio port for the device ”h]”(jÚ)�”}”(hŒ``struct serio *serio``”h]”jà)�”}”(hj}¬h]”hŒstruct serio *serio”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj{¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MFhjw¬ubjö)�”}”(hhh]”j\)�”}”(hŒserio port for the device”h]”hŒserio port for the device”…”�”}”(hj–¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³j’¬h´MFhj“¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjw¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j’¬h´MFhjt¬ubjÔ)�”}”(hŒ1``u8 data`` a data byte received from the device ”h]”(jÚ)�”}”(hŒ ``u8 data``”h]”jà)�”}”(hj¶¬h]”hŒu8 data”…”�”}”(hj¸¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj´¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MGhj°¬ubjö)�”}”(hhh]”j\)�”}”(hŒ$a data byte received from the device”h]”hŒ$a data byte received from the device”…”�”}”(hjϬh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³jˬh´MGhj̬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj°¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³jˬh´MGhjt¬ubjÔ)�”}”(hŒq``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à)�”}”(hjï¬h]”hŒunsigned int flags”…”�”}”(hjñ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhjí¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙh³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MIhjé¬ubjö)�”}”(hhh]”j\)�”}”(hŒYflags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transfer”h]”(hŒflags such as ”…”�”}”(hj­h²hh³Nh´Nubjà)�”}”(hŒ``SERIO_PARITY``”h]”hŒ SERIO_PARITY”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj­ubhŒ or ”…”�”}”(hj­h²hh³Nh´Nubjà)�”}”(hŒ``SERIO_TIMEOUT``”h]”hŒ SERIO_TIMEOUT”…”�”}”(hj"­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jßhj­ubhŒ& indicating state of the data transfer”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MHhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjé¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓh³j­h´MIhjt¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjX¬ubj\)�”}”(hŒ**Description**”h]”j‹)�”}”(hjO­h]”hŒ Description”…”�”}”(hjQ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŠhjM­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MKhjX¬ubj\)�”}”(hŒÅ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]”hŒÅ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.”…”�”}”(hje­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j[h³Œ]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.c”h´MJhjX¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j€hjï’h²hh³Nh´Nubeh}”(h]”Œps-2-protocol-support”ah ]”h"]”Œps/2 protocol support”ah$]”h&]”uh1hµhh·h²hh³hÊh´K,ubeh}”(h]”Œinput-subsystem”ah ]”h"]”Œinput subsystem”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j®­Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jˆ­j…­j¬fj©fjAj>jÅ€j€jì’jé’j€­j}­uŒ nametypes”}”(jˆ­‰j¬f‰jA‰jÅ€‰jì’‰j€­‰uh}”(j…­h·j©fhËhëhõj j¥jåjêj¡j¦jLjQjIjNj6j;j`jejc"jh"jä#jé#j>'jC'j¿(jÄ(j@*jE*jÁ+jÆ+jB-jG-j½/jÂ/j3j3j?5jD5j„7j‰7j9j 9j£:j¨:j§<j¬<j^>jc>jp@ju@jBjBj¦Dj«DjGjGj“Hj˜HjJjJj•KjšKjMjMj�Pj¢Pj-Rj2Rj½SjÂSjVj"Vj}Wj‚Wj*Zj/ZjÂ\jÇ\jŸ_j¤_j¼ajÁaj=cjBcj>j¯fjÌfjÑfjGhjLhj¦jj«jjèkjíkjŒnj‘nj pjpj“rj˜rj‘tj–tjŽvj“vjxjxj�yj•yjJ}jO}j€jDjajgjé’jÈ€jå€jë€jmƒjrƒjÖ…jÛ…j?ˆjDˆj%Œj*Œj©�j®�j}­jï’j “j“j\”ja”jP—jU—jë™jð™jl›jq›jÇœjÌœj-Ÿj2Ÿj_ jd jú¢jÿ¢j•¥jš¥j—§jœ§jêjȪuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.