~sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget$/translations/zh_CN/driver-api/inputmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/zh_TW/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/it_IT/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ja_JP/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/ko_KR/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/pt_BR/driver-api/inputmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget$/translations/sp_SP/driver-api/inputmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hInput Subsystemh]hInput Subsystem}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhh>/var/lib/git/docbuild/linux/Documentation/driver-api/input.rsthKubh)}(hhh](h)}(h Input coreh]h Input core}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleinput_value (C struct) c.input_valuehNtauh1hhhhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhNubhdesc)}(hhh](hdesc_signature)}(h input_valueh]hdesc_signature_line)}(hstruct input_valueh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1hhhhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhhhhhjhKubh desc_name)}(h input_valueh]h desc_sig_name)}(hhh]h input_value}(hj*hhhNhNubah}(h]h ]nah"]h$]h&]uh1j(hj$ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j"hhhhhjhKubeh}(h]h ]h"]h$]h&]j@jA add_permalinkuh1hsphinx_line_type declaratorhhhhhjhKubah}(h]hah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1hhjhKhhhhubh desc_content)}(hhh]h paragraph)}(hinput value representationh]hinput value representation}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1jVhhhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjuobjtypejvdesctypejvnoindex noindexentrynocontentsentryuh1hhhhhhhhNubh container)}(h**Definition**:: struct input_value { __u16 type; __u16 code; __s32 value; }; **Members** ``type`` type of value (EV_KEY, EV_ABS, etc) ``code`` the value code ``value`` the valueh](j\)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubh literal_block)}(hHstruct input_value { __u16 type; __u16 code; __s32 value; };h]hHstruct input_value { __u16 type; __u16 code; __s32 value; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK!hjubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK'hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h-``type`` type of value (EV_KEY, EV_ABS, etc) h](hterm)}(h``type``h]hliteral)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubh definition)}(hhh]j\)}(h#type of value (EV_KEY, EV_ABS, etc)h]h#type of value (EV_KEY, EV_ABS, etc)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``code`` the value code h](j)}(h``code``h]j)}(hjh]hcode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubj)}(hhh]j\)}(hthe value codeh]hthe value code}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hKhjubj)}(h``value`` the valueh](j)}(h ``value``h]j)}(hjSh]hvalue}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjMubj)}(hhh]j\)}(h the valueh]h the value}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_dev (C struct) c.input_devhNtauh1hhhhhhhhNubh)}(hhh](h)}(h input_devh]h)}(hstruct input_devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK%ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK%ubj#)}(h input_devh]j))}(hjh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhK%ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhK%ubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhK%hjhhubjW)}(hhh]j\)}(hrepresents an input deviceh]hrepresents an input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK.hjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhK%ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhhhhhNubj)}(hX**Definition**:: struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle *grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; bool going_away; struct device dev; struct list_head h_list; struct list_head node; unsigned int num_vals; unsigned int max_vals; struct input_value *vals; bool devres_managed; ktime_t timestamp[INPUT_CLK_MAX]; bool inhibited; }; **Members** ``name`` name of the device ``phys`` physical path to the device in the system hierarchy ``uniq`` unique identification code for the device (if device has it) ``id`` id of the device (struct input_id) ``propbit`` bitmap of device properties and quirks ``evbit`` bitmap of types of events supported by the device (EV_KEY, EV_REL, etc.) ``keybit`` bitmap of keys/buttons this device has ``relbit`` bitmap of relative axes for the device ``absbit`` bitmap of absolute axes for the device ``mscbit`` bitmap of miscellaneous events supported by the device ``ledbit`` bitmap of leds present on the device ``sndbit`` bitmap of sound effects supported by the device ``ffbit`` bitmap of force feedback effects supported by the device ``swbit`` bitmap of switches present on the device ``hint_events_per_packet`` average number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events. ``keycodemax`` size of keycode table ``keycodesize`` size of elements in keycode table ``keycode`` map of scancodes to keycodes for this device ``setkeycode`` optional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep ``getkeycode`` optional legacy method to retrieve current keymap. ``ff`` force feedback structure associated with the device if device supports force feedback effects ``poller`` poller structure associated with the device if device is set up to use polling mode ``repeat_key`` stores key code of the last key pressed; used to implement software autorepeat ``timer`` timer for software autorepeat ``rep`` current values for autorepeat parameters (delay, rate) ``mt`` pointer to multitouch state ``absinfo`` array of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution) ``key`` reflects current state of device's keys/buttons ``led`` reflects current state of device's LEDs ``snd`` reflects current state of sound effects ``sw`` reflects current state of device's switches ``open`` this method is called when the very first user calls input_open_device(). The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.). The meaning of open() is to start providing events to the input core. ``close`` this method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core. ``flush`` purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it ``event`` event handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleep ``grab`` input handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device ``event_lock`` this spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock. ``mutex`` serializes calls to open(), close() and flush() methods ``users`` stores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device ``going_away`` marks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV. ``dev`` driver model's view of this device ``h_list`` list of input handles associated with the device. When accessing the list dev->mutex must be held ``node`` used to place the device onto input_dev_list ``num_vals`` number of values queued in the current frame ``max_vals`` maximum number of values queued in a frame ``vals`` array of values queued in the current frame ``devres_managed`` indicates that devices is managed with devres framework and needs not be explicitly unregistered or freed. ``timestamp`` storage for a timestamp set by input_set_timestamp called by a driver ``inhibited`` indicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device's close() is called when it is being inhibited and its open() is called when it is being uninhibited.h](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK2hj ubj)}(hXstruct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle *grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; bool going_away; struct device dev; struct list_head h_list; struct list_head node; unsigned int num_vals; unsigned int max_vals; struct input_value *vals; bool devres_managed; ktime_t timestamp[INPUT_CLK_MAX]; bool inhibited; };h]hXstruct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle *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; };}hj,sbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK4hj ubj\)}(h **Members**h]j)}(hj=h]hMembers}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhhj ubj)}(hhh](j)}(h``name`` name of the device h](j)}(h``name``h]j)}(hj\h]hname}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK0hjVubj)}(hhh]j\)}(hname of the deviceh]hname of the device}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjqhK0hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhK0hjSubj)}(h=``phys`` physical path to the device in the system hierarchy h](j)}(h``phys``h]j)}(hjh]hphys}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK1hjubj)}(hhh]j\)}(h3physical path to the device in the system hierarchyh]h3physical path to the device in the system hierarchy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hjSubj)}(hF``uniq`` unique identification code for the device (if device has it) h](j)}(h``uniq``h]j)}(hjh]huniq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK2hjubj)}(hhh]j\)}(hubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK4hj:ubj)}(hhh]j\)}(h&bitmap of device properties and quirksh]h&bitmap of device properties and quirks}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjUhK4hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhK4hjSubj)}(hS``evbit`` bitmap of types of events supported by the device (EV_KEY, EV_REL, etc.) h](j)}(h ``evbit``h]j)}(hjyh]hevbit}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK6hjsubj)}(hhh]j\)}(hHbitmap of types of events supported by the device (EV_KEY, EV_REL, etc.)h]hHbitmap of types of events supported by the device (EV_KEY, EV_REL, etc.)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK5hjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhK6hjSubj)}(h2``keybit`` bitmap of keys/buttons this device has h](j)}(h ``keybit``h]j)}(hjh]hkeybit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK7hjubj)}(hhh]j\)}(h&bitmap of keys/buttons this device hash]h&bitmap of keys/buttons this device has}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK7hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK7hjSubj)}(h2``relbit`` bitmap of relative axes for the device h](j)}(h ``relbit``h]j)}(hjh]hrelbit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK8hjubj)}(hhh]j\)}(h&bitmap of relative axes for the deviceh]h&bitmap of relative axes for the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjSubj)}(h2``absbit`` bitmap of absolute axes for the device h](j)}(h ``absbit``h]j)}(hj%h]habsbit}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK9hjubj)}(hhh]j\)}(h&bitmap of absolute axes for the deviceh]h&bitmap of absolute axes for the device}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj:hK9hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hK9hjSubj)}(hB``mscbit`` bitmap of miscellaneous events supported by the device h](j)}(h ``mscbit``h]j)}(hj^h]hmscbit}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK:hjXubj)}(hhh]j\)}(h6bitmap of miscellaneous events supported by the deviceh]h6bitmap of miscellaneous events supported by the device}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjshK:hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshK:hjSubj)}(h0``ledbit`` bitmap of leds present on the device h](j)}(h ``ledbit``h]j)}(hjh]hledbit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK;hjubj)}(hhh]j\)}(h$bitmap of leds present on the deviceh]h$bitmap of leds present on the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjSubj)}(h;``sndbit`` bitmap of sound effects supported by the device h](j)}(h ``sndbit``h]j)}(hjh]hsndbit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj<ubj)}(hhh]j\)}(h(bitmap of switches present on the deviceh]h(bitmap of switches present on the device}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjWhK>hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhK>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]hhint_events_per_packet}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKBhjuubj)}(hhh]j\)}(haverage number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events.h]haverage number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK?hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjSubj)}(h%``keycodemax`` size of keycode table h](j)}(h``keycodemax``h]j)}(hjh]h keycodemax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKChjubj)}(hhh]j\)}(hsize of keycode tableh]hsize of keycode table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKChjSubj)}(h2``keycodesize`` size of elements in keycode table h](j)}(h``keycodesize``h]j)}(hjh]h keycodesize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKDhjubj)}(hhh]j\)}(h!size of elements in keycode tableh]h!size of elements in keycode table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKDhjSubj)}(h9``keycode`` map of scancodes to keycodes for this device h](j)}(h ``keycode``h]j)}(hj'h]hkeycode}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKEhj!ubj)}(hhh]j\)}(h,map of scancodes to keycodes for this deviceh]h,map of scancodes to keycodes for this device}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj<hKEhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKEhjSubj)}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKJhjZubj)}(hhh]j\)}(hoptional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleeph]hoptional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKGhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKJhjSubj)}(hB``getkeycode`` optional legacy method to retrieve current keymap. h](j)}(h``getkeycode``h]j)}(hjh]h getkeycode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKFhjubj)}(hhh]j\)}(h2optional legacy method to retrieve current keymap.h]h2optional legacy method to retrieve current keymap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKFhjSubj)}(he``ff`` force feedback structure associated with the device if device supports force feedback effects h](j)}(h``ff``h]j)}(hjh]hff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKLhjubj)}(hhh]j\)}(h]force feedback structure associated with the device if device supports force feedback effectsh]h]force feedback structure associated with the device if device supports force feedback effects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKLhjSubj)}(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]hpoller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKNhjubj)}(hhh]j\)}(hSpoller structure associated with the device if device is set up to use polling modeh]hSpoller structure associated with the device if device is set up to use polling mode}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hKNhjSubj)}(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}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKPhjAubj)}(hhh]j\)}(hNstores key code of the last key pressed; used to implement software autorepeath]hNstores key code of the last key pressed; used to implement software autorepeat}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKOhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKPhjSubj)}(h(``timer`` timer for software autorepeat h](j)}(h ``timer``h]j)}(hjh]htimer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKQhj{ubj)}(hhh]j\)}(htimer for software autorepeath]htimer for software autorepeat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKQhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhKQhjSubj)}(h?``rep`` current values for autorepeat parameters (delay, rate) h](j)}(h``rep``h]j)}(hjh]hrep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKRhjubj)}(hhh]j\)}(h6current values for autorepeat parameters (delay, rate)h]h6current values for autorepeat parameters (delay, rate)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKRhjSubj)}(h#``mt`` pointer to multitouch state h](j)}(h``mt``h]j)}(hjh]hmt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKShjubj)}(hhh]j\)}(hpointer to multitouch stateh]hpointer to multitouch state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKShj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKShjSubj)}(h``absinfo`` array of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution) h](j)}(h ``absinfo``h]j)}(hj, h]habsinfo}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj* ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKVhj& ubj)}(hhh]j\)}(harray of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)h](h array of }(hjE hhhNhNubh)}(h.:c:type:`struct input_absinfo `h]j)}(hjO h]hstruct input_absinfo}(hjQ hhhNhNubah}(h]h ](xrefjuc-typeeh"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]refdocdriver-api/input refdomainjureftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftarget input_absinfouh1hhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKThjE ubhc elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution)}(hjE hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjw hKThjB ubah}(h]h ]h"]h$]h&]uh1jhj& ubeh}(h]h ]h"]h$]h&]uh1jhjA hKVhjSubj)}(h8``key`` reflects current state of device's keys/buttons h](j)}(h``key``h]j)}(hj h]hkey}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKWhj ubj)}(hhh]j\)}(h/reflects current state of device's keys/buttonsh]h1reflects current state of device’s keys/buttons}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKWhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKWhjSubj)}(h0``led`` reflects current state of device's LEDs h](j)}(h``led``h]j)}(hj h]hled}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKXhj ubj)}(hhh]j\)}(h'reflects current state of device's LEDsh]h)reflects current state of device’s LEDs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKXhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKXhjSubj)}(h0``snd`` reflects current state of sound effects h](j)}(h``snd``h]j)}(hj h]hsnd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKYhj ubj)}(hhh]j\)}(h'reflects current state of sound effectsh]h'reflects current state of sound effects}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKYhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKYhjSubj)}(h3``sw`` reflects current state of device's switches h](j)}(h``sw``h]j)}(hj? h]hsw}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKZhj9 ubj)}(hhh]j\)}(h+reflects current state of device's switchesh]h-reflects current state of device’s switches}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjT hKZhjU ubah}(h]h ]h"]h$]h&]uh1jhj9 ubeh}(h]h ]h"]h$]h&]uh1jhjT hKZhjSubj)}(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]hopen}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK_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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK[hj ubah}(h]h ]h"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]uh1jhj hK_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]hclose}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKbhj ubj)}(hhh]j\)}(hthis method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core.h]hthis method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK`hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKbhjSubj)}(h``flush`` purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it h](j)}(h ``flush``h]j)}(hj h]hflush}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKehj ubj)}(hhh]j\)}(h|purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from ith]h|purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKchj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKehjSubj)}(h``event`` event handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleep h](j)}(h ``event``h]j)}(hj& h]hevent}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKihj ubj)}(hhh]j\)}(hevent handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleeph](hevent handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by }(hj? hhhNhNubj)}(h**event_lock**h]h event_lock}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj? ubh and must not sleep}(hj? hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKfhj< ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj; hKihjSubj)}(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]hgrab}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKlhjl ubj)}(hhh]j\)}(hinput handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the deviceh]hinput handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKjhj ubah}(h]h ]h"]h$]h&]uh1jhjl ubeh}(h]h ]h"]h$]h&]uh1jhj hKlhjSubj)}(hX.``event_lock`` this spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock. h](j)}(h``event_lock``h]j)}(hj h]h event_lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKqhj ubj)}(hhh]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 hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKmhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKqhjSubj)}(hB``mutex`` serializes calls to open(), close() and flush() methods h](j)}(h ``mutex``h]j)}(hj h]hmutex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKrhj ubj)}(hhh]j\)}(h7serializes calls to open(), close() and flush() methodsh]h7serializes calls to open(), close() and flush() methods}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKrhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKrhjSubj)}(hX``users`` stores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device h](j)}(h ``users``h]j)}(hj h]husers}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKwhj ubj)}(hhh]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 deviceh]hXstores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKshj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hKwhjSubj)}(hv``going_away`` marks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV. h](j)}(h``going_away``h]j)}(hjY h]h going_away}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKyhjS ubj)}(hhh]j\)}(hfmarks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV.h]hfmarks devices that are in a middle of unregistering and causes input_open_device*() fail with -ENODEV.}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKxhjo ubah}(h]h ]h"]h$]h&]uh1jhjS ubeh}(h]h ]h"]h$]h&]uh1jhjn hKyhjSubj)}(h+``dev`` driver model's view of this device h](j)}(h``dev``h]j)}(hj h]hdev}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKzhj ubj)}(hhh]j\)}(h"driver model's view of this deviceh]h$driver model’s view of this device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKzhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKzhjSubj)}(hm``h_list`` list of input handles associated with the device. When accessing the list dev->mutex must be held h](j)}(h ``h_list``h]j)}(hj h]hh_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK|hj ubj)}(hhh]j\)}(halist of input handles associated with the device. When accessing the list dev->mutex must be heldh]halist of input handles associated with the device. When accessing the list dev->mutex must be held}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK{hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK|hjSubj)}(h6``node`` used to place the device onto input_dev_list h](j)}(h``node``h]j)}(hj h]hnode}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK}hj ubj)}(hhh]j\)}(h,used to place the device onto input_dev_listh]h,used to place the device onto input_dev_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hK}hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK}hjSubj)}(h:``num_vals`` number of values queued in the current frame h](j)}(h ``num_vals``h]j)}(hj? h]hnum_vals}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhK~hj9 ubj)}(hhh]j\)}(h,number of values queued in the current frameh]h,number of values queued in the current frame}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjT hK~hjU ubah}(h]h ]h"]h$]h&]uh1jhj9 ubeh}(h]h ]h"]h$]h&]uh1jhjT hK~hjSubj)}(h8``max_vals`` maximum number of values queued in a frame h](j)}(h ``max_vals``h]j)}(hjx h]hmax_vals}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjr ubj)}(hhh]j\)}(h*maximum number of values queued in a frameh]h*maximum number of values queued in a frame}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjr ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjSubj)}(h5``vals`` array of values queued in the current frame h](j)}(h``vals``h]j)}(hj h]hvals}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj ubj)}(hhh]j\)}(h+array of values queued in the current frameh]h+array of values queued in the current frame}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjSubj)}(h~``devres_managed`` indicates that devices is managed with devres framework and needs not be explicitly unregistered or freed. h](j)}(h``devres_managed``h]j)}(hj h]hdevres_managed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj ubj)}(hhh]j\)}(hjindicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.h]hjindicates that devices is managed with devres framework and needs not be explicitly unregistered or freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjSubj)}(hT``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&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjubj)}(hhh]j\)}(hEstorage for a timestamp set by input_set_timestamp called by a driverh]hEstorage for a timestamp set by input_set_timestamp called by a driver}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjSubj)}(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`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjXubj)}(hhh]j\)}(hindicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device's close() is called when it is being inhibited and its open() is called when it is being uninhibited.h]hindicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device’s close() is called when it is being inhibited and its open() is called when it is being uninhibited.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhjshKhjSubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_handler (C struct)c.input_handlerhNtauh1hhhhhhhhNubh)}(hhh](h)}(h input_handlerh]h)}(hstruct input_handlerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj#)}(h input_handlerh]j))}(hjh]h input_handler}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhjhhubjW)}(hhh]j\)}(h.implements one of interfaces for input devicesh]h.implements one of interfaces for input devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhhhhhNubj)}(hX **Definition**:: struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; }; **Members** ``private`` driver-specific data ``event`` event handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep ``events`` event sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it. ``filter`` similar to **event**; separates normal event handlers from "filters". ``match`` called after comparing device's id with handler's id_table to perform fine-grained matching between device and handler ``connect`` called when attaching a handler to an input device ``disconnect`` disconnects a handler from input device ``start`` starts handler for given handle. This function is called by input core right after connect() method and also when a process that "grabbed" a device releases it ``passive_observer`` set to ``true`` by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handles ``legacy_minors`` set to ``true`` by drivers using legacy minor ranges ``minor`` beginning of range of 32 legacy minors for devices this driver can provide ``name`` name of the handler, to be shown in /proc/bus/input/handlers ``id_table`` pointer to a table of input_device_ids this driver can handle ``h_list`` list of input handles associated with the handler ``node`` for placing the driver onto input_handler_listh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hX:struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; };h]hX:struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; };}hj7sbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj\)}(h **Members**h]j)}(hjHh]hMembers}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM'hjubj)}(hhh](j)}(h!``private`` driver-specific data h](j)}(h ``private``h]j)}(hjgh]hprivate}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjaubj)}(hhh]j\)}(hdriver-specific datah]hdriver-specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^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)}(hjh]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(hevent handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleeph]hevent handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^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]hevents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(hevent sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it.h]hevent sequence handler. This method is being called by input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. The method must return number of events passed to it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(hQ``filter`` similar to **event**; separates normal event handlers from "filters". h](j)}(h ``filter``h]j)}(hjh]hfilter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(hEsimilar to **event**; separates normal event handlers from "filters".h](h similar to }(hj-hhhNhNubj)}(h **event**h]hevent}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh5; separates normal event handlers from “filters”.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj^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]hmatch}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjZubj)}(hhh]j\)}(hvcalled after comparing device's id with handler's id_table to perform fine-grained matching between device and handlerh]hzcalled after comparing device’s id with handler’s id_table to perform fine-grained matching between device and handler}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhj^ubj)}(h?``connect`` called when attaching a handler to an input device h](j)}(h ``connect``h]j)}(hjh]hconnect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(h2called when attaching a handler to an input deviceh]h2called when attaching a handler to an input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(h7``disconnect`` disconnects a handler from input device h](j)}(h``disconnect``h]j)}(hjh]h disconnect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(h'disconnects a handler from input deviceh]h'disconnects a handler from input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubj)}(h``start`` starts handler for given handle. This function is called by input core right after connect() method and also when a process that "grabbed" a device releases it h](j)}(h ``start``h]j)}(hj h]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM!hjubj)}(hhh]j\)}(hstarts handler for given handle. This function is called by input core right after connect() method and also when a process that "grabbed" a device releases ith]hstarts handler for given handle. This function is called by input core right after connect() method and also when a process that “grabbed” a device releases it}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM!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)}(hjFh]hpassive_observer}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM%hj@ubj)}(hhh]j\)}(hset to ``true`` by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handlesh](hset to }(hj_hhhNhNubj)}(h``true``h]htrue}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_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_hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM"hj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hM%hj^ubj)}(hG``legacy_minors`` set to ``true`` by drivers using legacy minor ranges h](j)}(h``legacy_minors``h]j)}(hjh]h legacy_minors}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM&hjubj)}(hhh]j\)}(h4set to ``true`` by drivers using legacy minor rangesh](hset to }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh% by drivers using legacy minor ranges}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hj^ubj)}(hU``minor`` beginning of range of 32 legacy minors for devices this driver can provide h](j)}(h ``minor``h]j)}(hjh]hminor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM(hjubj)}(hhh]j\)}(hJbeginning of range of 32 legacy minors for devices this driver can provideh]hJbeginning of range of 32 legacy minors for devices this driver can provide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hj^ubj)}(hF``name`` name of the handler, to be shown in /proc/bus/input/handlers h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM)hjubj)}(hhh]j\)}(hevent_lock spinlock held and so it may not sleep. ``d_node`` used to put the handle on device's list of attached handles ``h_node`` used to put the handle on handler's list of handles from which it gets eventsh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMXhjubj)}(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; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMZhjubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMehjubj)}(hhh](j)}(h"``private`` handler-specific data h](j)}(h ``private``h]j)}(hj#h]hprivate}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMVhjubj)}(hhh]j\)}(hhandler-specific datah]hhandler-specific data}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj8hMVhj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj8hMVhjubj)}(hb``open`` counter showing whether the handle is 'open', i.e. should deliver events from its device h](j)}(h``open``h]j)}(hj\h]hopen}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMXhjVubj)}(hhh]j\)}(hXcounter showing whether the handle is 'open', i.e. should deliver events from its deviceh]h\counter showing whether the handle is ‘open’, i.e. should deliver events from its device}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMWhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMXhjubj)}(h=``name`` name given to the handle by handler that created it h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMYhjubj)}(hhh]j\)}(h3name given to the handle by handler that created ith]h3name given to the handle by handler that created it}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMYhjubj)}(h/``dev`` input device the handle is attached to h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMZhjubj)}(hhh]j\)}(h&input device the handle is attached toh]h&input device the handle is attached to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMZhjubj)}(hC``handler`` handler that works with the device through this handle h](j)}(h ``handler``h]j)}(hjh]hhandler}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM[hjubj)}(hhh]j\)}(h6handler that works with the device through this handleh]h6handler that works with the device through this handle}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM[hjubj)}(hX4``handle_events`` event sequence handler. It is set up by the input core according to event handling method specified in the **handler**. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. h](j)}(h``handle_events``h]j)}(hjAh]h handle_events}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM`hj;ubj)}(hhh]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](hkevent sequence handler. It is set up by the input core according to event handling method specified in the }(hjZhhhNhNubj)}(h **handler**h]hhandler}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh. 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.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM\hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM`hjubj)}(hG``d_node`` used to put the handle on device's list of attached handles h](j)}(h ``d_node``h]j)}(hjh]hd_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMahjubj)}(hhh]j\)}(h;used to put the handle on device's list of attached handlesh]h=used to put the handle on device’s list of attached handles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMahjubj)}(hX``h_node`` used to put the handle on handler's list of handles from which it gets eventsh](j)}(h ``h_node``h]j)}(hjh]hh_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMbhjubj)}(hhh]j\)}(hMused to put the handle on handler's list of handles from which it gets eventsh]hOused to put the handle on handler’s list of handles from which it gets events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMbhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h(input_set_events_per_packet (C function)c.input_set_events_per_packethNtauh1hhhhhhhhNubh)}(hhh](h)}(hFvoid input_set_events_per_packet (struct input_dev *dev, int n_events)h]h)}(hEvoid input_set_events_per_packet(struct input_dev *dev, int n_events)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj0hMubj#)}(hinput_set_events_per_packeth]j))}(hinput_set_events_per_packeth]hinput_set_events_per_packet}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj?ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj0hMubhdesc_parameterlist)}(h%(struct input_dev *dev, int n_events)h](hdesc_parameter)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj~ubah}(h]h ]h"]h$]h&] refdomainjureftype identifier reftargetjmodnameN classnameNjm jp )}js ]jn ASTIdentifier)}jjEsbc.input_set_events_per_packetasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhj_ubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj_ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjYubj^)}(h int n_eventsh](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hn_eventsh]hn_events}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjYubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhj0hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhj0hMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj0hMhjhhubjW)}(hhh]j\)}(h)tell handlers about the driver event rateh]h)tell handlers about the driver event rate}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj0hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j:j|j:j}j~juh1hhhhhhhhNubj)}(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)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj>ubj)}(hhh](j)}(h>``struct input_dev *dev`` the input device used by the driver h](j)}(h``struct input_dev *dev``h]j)}(hjch]hstruct input_dev *dev}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj]ubj)}(hhh]j\)}(h#the input device used by the driverh]h#the input device used by the driver}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubj)}(hL``int n_events`` the average number of events between calls to input_sync() h](j)}(h``int n_events``h]j)}(hjh]h int n_events}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(h:the average number of events between calls to input_sync()h]h:the average number of events between calls to input_sync()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj>ubj\)}(hIf the event rate sent from a device is unusually large, use this function to set the expected event rate. This will allow handlers to set up an appropriate buffer size for the event stream, in order to minimize information loss.h]hIf the event rate sent from a device is unusually large, use this function to set the expected event rate. This will allow handlers to set up an appropriate buffer size for the event stream, in order to minimize information loss.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhhhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hff_device (C struct) c.ff_devicehNtauh1hhhhhhhhNubh)}(hhh](h)}(h ff_deviceh]h)}(hstruct ff_deviceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hMubj#)}(h ff_deviceh]j))}(hjh]h ff_device}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj8ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj)hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhj)hMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj)hMhjhhubjW)}(hhh]j\)}(h&force-feedback part of an input deviceh]h&force-feedback part of an input device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj[hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj)hMubeh}(h]h ](justructeh"]h$]h&]jzjuj{jvj|jvj}j~juh1hhhhhhhhNubj)}(hX**Definition**:: struct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[]; }; **Members** ``upload`` Called to upload an new effect into device ``erase`` Called to erase an effect from device ``playback`` Called to request device to start playing specified effect ``set_gain`` Called to set specified gain ``set_autocenter`` Called to auto-center device ``destroy`` called by input core when parent input device is being destroyed ``private`` driver-specific data, will be freed automatically ``ffbit`` bitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit) ``mutex`` mutex for serializing access to the device ``max_effects`` maximum number of effects supported by device ``effects`` pointer to an array of effects currently loaded into device ``effect_owners`` array of effect owners; when file handle owning an effect gets closed the effect is automatically erasedh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh:}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjzubj)}(hXAstruct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[]; };h]hXAstruct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[]; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM hjzubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM/hjzubj)}(hhh](j)}(h6``upload`` Called to upload an new effect into device h](j)}(h ``upload``h]j)}(hjh]hupload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(h*Called to upload an new effect into deviceh]h*Called to upload an new effect into device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``erase`` Called to erase an effect from device h](j)}(h ``erase``h]j)}(hjh]herase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(h%Called to erase an effect from deviceh]h%Called to erase an effect from device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hH``playback`` Called to request device to start playing specified effect h](j)}(h ``playback``h]j)}(hj=h]hplayback}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj7ubj)}(hhh]j\)}(h:Called to request device to start playing specified effecth]h:Called to request device to start playing specified effect}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjRhMhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhMhjubj)}(h*``set_gain`` Called to set specified gain h](j)}(h ``set_gain``h]j)}(hjvh]hset_gain}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjpubj)}(hhh]j\)}(hCalled to set specified gainh]hCalled to set specified gain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``set_autocenter`` Called to auto-center device h](j)}(h``set_autocenter``h]j)}(hjh]hset_autocenter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM hjubj)}(hhh]j\)}(hCalled to auto-center deviceh]hCalled to auto-center device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hM``destroy`` called by input core when parent input device is being destroyed h](j)}(h ``destroy``h]j)}(hjh]hdestroy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM"hjubj)}(hhh]j\)}(h@called by input core when parent input device is being destroyedh]h@called by input core when parent input device is being destroyed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h>``private`` driver-specific data, will be freed automatically h](j)}(h ``private``h]j)}(hj"h]hprivate}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM#hjubj)}(hhh]j\)}(h1driver-specific data, will be freed automaticallyh]h1driver-specific data, will be freed automatically}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj7hM#hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM#hjubj)}(hw``ffbit`` bitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit) h](j)}(h ``ffbit``h]j)}(hj[h]hffbit}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM%hjUubj)}(hhh]j\)}(hlbitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit)h]hlbitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM$hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM%hjubj)}(h5``mutex`` mutex for serializing access to the device h](j)}(h ``mutex``h]j)}(hjh]hmutex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM&hjubj)}(hhh]j\)}(h*mutex for serializing access to the deviceh]h*mutex for serializing access to the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(h>``max_effects`` maximum number of effects supported by device h](j)}(h``max_effects``h]j)}(hjh]h max_effects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM'hjubj)}(hhh]j\)}(h-maximum number of effects supported by deviceh]h-maximum number of effects supported by device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubj)}(hH``effects`` pointer to an array of effects currently loaded into device h](j)}(h ``effects``h]j)}(hjh]heffects}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM(hjubj)}(hhh]j\)}(h;pointer to an array of effects currently loaded into deviceh]h;pointer to an array of effects currently loaded into device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM(hjubj)}(hz``effect_owners`` array of effect owners; when file handle owning an effect gets closed the effect is automatically erasedh](j)}(h``effect_owners``h]j)}(hj@h]h effect_owners}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM)hj:ubj)}(hhh]j\)}(hharray of effect owners; when file handle owning an effect gets closed the effect is automatically erasedh]hharray of effect owners; when file handle owning an effect gets closed the effect is automatically erased}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjUhM)hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhM)hjubeh}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhhhNubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM-hhhhubj\)}(hEvery force-feedback device must implement upload() and playback() methods; erase() is optional. set_gain() and set_autocenter() need only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER bits.h]hEvery force-feedback device must implement upload() and playback() methods; erase() is optional. set_gain() and set_autocenter() need only be implemented if driver sets up FF_GAIN and FF_AUTOCENTER bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM*hhhhubj\)}(hNote that playback(), set_gain() and set_autocenter() are called with dev->event_lock spinlock held and interrupts off and thus may not sleep.h]hNote that playback(), set_gain() and set_autocenter() are called with dev->event_lock spinlock held and interrupts off and thus may not sleep.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM/hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_event (C function) c.input_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(hYvoid input_event (struct input_dev *dev, unsigned int type, unsigned int code, int value)h]h)}(hXvoid input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMwubj#)}(h input_eventh]j))}(h input_eventh]h input_event}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMwubjX)}(hH(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj'ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj,modnameN classnameNjm jp )}js ]j)}jjsb c.input_eventasbuh1hhjubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hj~hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj))}(htypeh]htype}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(h int valueh](j )}(hinth]hint}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hvalueh]hvalue}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhMwubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMwubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMwhjhhubjW)}(hhh]j\)}(hreport new input eventh]hreport new input event}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhjchhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMwubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j~j|j~j}j~juh1hhhhhhNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{hjubj)}(hhh](j)}(h:``struct input_dev *dev`` device that generated the event h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMxhjubj)}(hhh]j\)}(hdevice that generated the eventh]hdevice that generated the event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMxhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMxhjubj)}(h(``unsigned int type`` type of the event h](j)}(h``unsigned int type``h]j)}(hjh]hunsigned int type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMyhjubj)}(hhh]j\)}(htype of the eventh]htype of the event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjh]hunsigned int code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMzhjubj)}(hhh]j\)}(h event codeh]h event code}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj.hMzhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hMzhjubj)}(h!``int value`` value of the event h](j)}(h ``int value``h]j)}(hjRh]h int value}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM{hjLubj)}(hhh]j\)}(hvalue of the eventh]hvalue of the event}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjghM{hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM{hjubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM}hjubj\)}(hThis function should be used by drivers implementing various input devices to report input events. See also input_inject_event().h]hThis function should be used by drivers implementing various input devices to report input events. See also input_inject_event().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|hjubj\)}(h**NOTE**h]j)}(hjh]hNOTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjubj\)}(hXZinput_event() may be safely used right after input device was allocated with input_allocate_device(), even before it is registered with input_register_device(), but the event will not reach any of the input handlers. Such early invocation of input_event() may be used to 'seed' initial state of a switch or initial position of absolute axis, etc.h]hX^input_event() may be safely used right after input device was allocated with input_allocate_device(), even before it is registered with input_register_device(), but the event will not reach any of the input handlers. Such early invocation of input_event() may be used to ‘seed’ initial state of a switch or initial position of absolute axis, etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_inject_event (C function)c.input_inject_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(hfvoid input_inject_event (struct input_handle *handle, unsigned int type, unsigned int code, int value)h]h)}(hevoid input_inject_event(struct input_handle *handle, unsigned int type, unsigned int code, int value)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj#)}(hinput_inject_eventh]j))}(hinput_inject_eventh]hinput_inject_event}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMubjX)}(hN(struct input_handle *handle, unsigned int type, unsigned int code, int value)h](j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j))}(h input_handleh]h input_handle}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjQubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjVmodnameN classnameNjm jp )}js ]j)}jjsbc.input_inject_eventasbuh1hhj2ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj))}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj2ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj.ubj^)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(htypeh]htype}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj.ubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcodeh]hcode}(hj1 hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj.ubj^)}(h int valueh](j )}(hinth]hint}(hjJ hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjF ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF ubj))}(hvalueh]hvalue}(hjf hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjF ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj.ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMhjhhubjW)}(hhh]j\)}(h#send input event from input handlerh]h#send input event from input handler}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j j|j j}j~juh1hhhhhhNhNubj)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubj)}(hhh](j)}(hC``struct input_handle *handle`` input handle to send event through h](j)}(h``struct input_handle *handle``h]j)}(hj h]hstruct input_handle *handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubj)}(hhh]j\)}(h"input handle to send event throughh]h"input handle to send event through}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h(``unsigned int type`` type of the event h](j)}(h``unsigned int type``h]j)}(hj !h]hunsigned int type}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj!ubj)}(hhh]j\)}(htype of the eventh]htype of the event}(hj#!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj!hMhj !ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjC!h]hunsigned int code}(hjE!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=!ubj)}(hhh]j\)}(h event codeh]h event code}(hj\!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjX!hMhjY!ubah}(h]h ]h"]h$]h&]uh1jhj=!ubeh}(h]h ]h"]h$]h&]uh1jhjX!hMhj ubj)}(h!``int value`` value of the event h](j)}(h ``int value``h]j)}(hj|!h]h int value}(hj~!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjv!ubj)}(hhh]j\)}(hvalue of the eventh]hvalue of the event}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjv!ubeh}(h]h ]h"]h$]h&]uh1jhj!hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubj\)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubj\)}(hSimilar to input_event() but will ignore event if device is "grabbed" and handle injecting event is not the one that owns the device.h]hSimilar to input_event() but will ignore event if device is “grabbed” and handle injecting event is not the one that owns the device.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_alloc_absinfo (C function)c.input_alloc_absinfohNtauh1hhhhhhNhNubh)}(hhh](h)}(h0void input_alloc_absinfo (struct input_dev *dev)h]h)}(h/void input_alloc_absinfo(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj "hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj "hMubj#)}(hinput_alloc_absinfoh]j))}(hinput_alloc_absinfoh]hinput_alloc_absinfo}(hj"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj"ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj!hhhj "hMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj9"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5"ubj)}(h h]h }(hjF"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5"ubh)}(hhh]j))}(h input_devh]h input_dev}(hjW"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjT"ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjY"modnameN classnameNjm jp )}js ]j)}jj"sbc.input_alloc_absinfoasbuh1hhj5"ubj)}(h h]h }(hjw"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5"ubj))}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5"ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj1"ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj!hhhj "hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj!hhhj "hMubah}(h]j!ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj "hMhj!hhubjW)}(hhh]j\)}(h(allocates array of input_absinfo structsh]h(allocates array of input_absinfo structs}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"hhubah}(h]h ]h"]h$]h&]uh1jVhj!hhhj "hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j"j|j"j}j~juh1hhhhhhNhNubj)}(h**Parameters** ``struct input_dev *dev`` the input device emitting absolute events **Description** If the absinfo struct the caller asked for is already allocated, this functions will not do anything.h](j\)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubj)}(hhh]j)}(hD``struct input_dev *dev`` the input device emitting absolute events h](j)}(h``struct input_dev *dev``h]j)}(hj"h]hstruct input_dev *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubj)}(hhh]j\)}(h)the input device emitting absolute eventsh]h)the input device emitting absolute events}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubj\)}(h**Description**h]j)}(hj8#h]h Description}(hj:#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6#ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubj\)}(heIf the absinfo struct the caller asked for is already allocated, this functions will not do anything.h]heIf the absinfo struct the caller asked for is already allocated, this functions will not do anything.}(hjN#hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_copy_abs (C function)c.input_copy_abshNtauh1hhhhhhNhNubh)}(hhh](h)}(hvvoid input_copy_abs (struct input_dev *dst, unsigned int dst_axis, const struct input_dev *src, unsigned int src_axis)h]h)}(huvoid input_copy_abs(struct input_dev *dst, unsigned int dst_axis, const struct input_dev *src, unsigned int src_axis)h](j )}(hvoidh]hvoid}(hj}#hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjy#hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy#hhhj#hMubj#)}(hinput_copy_absh]j))}(hinput_copy_absh]hinput_copy_abs}(hj#hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj#ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjy#hhhj#hMubjX)}(hb(struct input_dev *dst, unsigned int dst_axis, const struct input_dev *src, unsigned int src_axis)h](j^)}(hstruct input_dev *dsth](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j))}(h input_devh]h input_dev}(hj#hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj#ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj#modnameN classnameNjm jp )}js ]j)}jj#sbc.input_copy_absasbuh1hhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj))}(hdsth]hdst}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj#ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj#ubj^)}(hunsigned int dst_axish](j )}(hunsignedh]hunsigned}(hj,$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj($ubj)}(h h]h }(hj:$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj($ubj )}(hinth]hint}(hjH$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj($ubj)}(h h]h }(hjV$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj($ubj))}(hdst_axish]hdst_axis}(hjd$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj($ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj#ubj^)}(hconst struct input_dev *srch](j)}(hconsth]hconst}(hj}$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjy$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy$ubj)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjy$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy$ubh)}(hhh]j))}(h input_devh]h input_dev}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj$ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj$modnameN classnameNjm jp )}js ]j#c.input_copy_absasbuh1hhjy$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy$ubj))}(hsrch]hsrc}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjy$ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj#ubj^)}(hunsigned int src_axish](j )}(hunsignedh]hunsigned}(hj %hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj )}(hinth]hint}(hj%%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj3%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj))}(hsrc_axish]hsrc_axis}(hjA%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj%ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj#ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjy#hhhj#hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhju#hhhj#hMubah}(h]jp#ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj#hMhjr#hhubjW)}(hhh]j\)}(h*Copy absinfo from one input_dev to anotherh]h*Copy absinfo from one input_dev to another}(hjk%hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjh%hhubah}(h]h ]h"]h$]h&]uh1jVhjr#hhhj#hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j%j|j%j}j~juh1hhhhhhNhNubj)}(hX]**Parameters** ``struct input_dev *dst`` Destination input device to copy the abs settings to ``unsigned int dst_axis`` ABS_* value selecting the destination axis ``const struct input_dev *src`` Source input device to copy the abs settings from ``unsigned int src_axis`` ABS_* value selecting the source axis **Description** Set absinfo for the selected destination axis by copying it from the specified source input device's source axis. This is useful to e.g. setup a pen/stylus input-device for combined touchscreen/pen hardware where the pen uses the same coordinates as the touchscreen.h](j\)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubj)}(hhh](j)}(hO``struct input_dev *dst`` Destination input device to copy the abs settings to h](j)}(h``struct input_dev *dst``h]j)}(hj%h]hstruct input_dev *dst}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubj)}(hhh]j\)}(h4Destination input device to copy the abs settings toh]h4Destination input device to copy the abs settings to}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(hE``unsigned int dst_axis`` ABS_* value selecting the destination axis h](j)}(h``unsigned int dst_axis``h]j)}(hj%h]hunsigned int dst_axis}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubj)}(hhh]j\)}(h*ABS_* value selecting the destination axish]h*ABS_* value selecting the destination axis}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj%ubj)}(hR``const struct input_dev *src`` Source input device to copy the abs settings from h](j)}(h``const struct input_dev *src``h]j)}(hj&h]hconst struct input_dev *src}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj&ubj)}(hhh]j\)}(h1Source input device to copy the abs settings fromh]h1Source input device to copy the abs settings from}(hj7&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj3&hMhj4&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj3&hMhj%ubj)}(h@``unsigned int src_axis`` ABS_* value selecting the source axis h](j)}(h``unsigned int src_axis``h]j)}(hjW&h]hunsigned int src_axis}(hjY&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU&ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjQ&ubj)}(hhh]j\)}(h%ABS_* value selecting the source axish]h%ABS_* value selecting the source axis}(hjp&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjl&hMhjm&ubah}(h]h ]h"]h$]h&]uh1jhjQ&ubeh}(h]h ]h"]h$]h&]uh1jhjl&hMhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubj\)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubj\)}(hX Set absinfo for the selected destination axis by copying it from the specified source input device's source axis. This is useful to e.g. setup a pen/stylus input-device for combined touchscreen/pen hardware where the pen uses the same coordinates as the touchscreen.h]hX Set absinfo for the selected destination axis by copying it from the specified source input device’s source axis. This is useful to e.g. setup a pen/stylus input-device for combined touchscreen/pen hardware where the pen uses the same coordinates as the touchscreen.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_grab_device (C function)c.input_grab_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h3int input_grab_device (struct input_handle *handle)h]h)}(h2int input_grab_device(struct input_handle *handle)h](j )}(hinth]hint}(hj&hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hMubj#)}(hinput_grab_deviceh]j))}(hinput_grab_deviceh]hinput_grab_device}(hj&hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj&ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj&hhhj&hMubjX)}(h(struct input_handle *handle)h]j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj'ubj)}(h h]h }(hj!'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j))}(h input_handleh]h input_handle}(hj2'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/'ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj4'modnameN classnameNjm jp )}js ]j)}jj&sbc.input_grab_deviceasbuh1hhj'ubj)}(h h]h }(hjR'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(hjh]h*}(hj`'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj))}(hhandleh]hhandle}(hjm'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj'ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj 'ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj&hhhj&hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj&hhhj&hMubah}(h]j&ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj&hMhj&hhubjW)}(hhh]j\)}(hgrabs device for exclusive useh]hgrabs device for exclusive use}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jVhj&hhhj&hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j'j|j'j}j~juh1hhhhhhNhNubj)}(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'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubj)}(hhh]j)}(hJ``struct input_handle *handle`` input handle that wants to own the device h](j)}(h``struct input_handle *handle``h]j)}(hj'h]hstruct input_handle *handle}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubj)}(hhh]j\)}(h)input handle that wants to own the deviceh]h)input handle that wants to own the device}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubj\)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubj\)}(hWhen a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.h]hWhen a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.}(hj)(hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!input_release_device (C function)c.input_release_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h7void input_release_device (struct input_handle *handle)h]h)}(h6void input_release_device(struct input_handle *handle)h](j )}(hvoidh]hvoid}(hjX(hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjT(hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM*ubj)}(h h]h }(hjg(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT(hhhjf(hM*ubj#)}(hinput_release_deviceh]j))}(hinput_release_deviceh]hinput_release_device}(hjy(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hju(ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjT(hhhjf(hM*ubjX)}(h(struct input_handle *handle)h]j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j))}(h input_handleh]h input_handle}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj(ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj(modnameN classnameNjm jp )}js ]j)}jj{(sbc.input_release_deviceasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj))}(hhandleh]hhandle}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj(ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj(ubah}(h]h ]h"]h$]h&]j@jAuh1jWhjT(hhhjf(hM*ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjP(hhhjf(hM*ubah}(h]jK(ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjf(hM*hjM(hhubjW)}(hhh]j\)}(h!release previously grabbed deviceh]h!release previously grabbed device}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM*hj)hhubah}(h]h ]h"]h$]h&]uh1jVhjM(hhhjf(hM*ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j0)j|j0)j}j~juh1hhhhhhNhNubj)}(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<)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8)ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM.hj4)ubj)}(hhh]j)}(hB``struct input_handle *handle`` input handle that owns the device h](j)}(h``struct input_handle *handle``h]j)}(hjY)h]hstruct input_handle *handle}(hj[)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW)ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM+hjS)ubj)}(hhh]j\)}(h!input handle that owns the deviceh]h!input handle that owns the device}(hjr)hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjn)hM+hjo)ubah}(h]h ]h"]h$]h&]uh1jhjS)ubeh}(h]h ]h"]h$]h&]uh1jhjn)hM+hjP)ubah}(h]h ]h"]h$]h&]uh1jhj4)ubj\)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM-hj4)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)hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM,hj4)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_open_device (C function)c.input_open_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h3int input_open_device (struct input_handle *handle)h]h)}(h2int input_open_device(struct input_handle *handle)h](j )}(hinth]hint}(hj)hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj)hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM<ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hM<ubj#)}(hinput_open_deviceh]j))}(hinput_open_deviceh]hinput_open_device}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj)ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj)hhhj)hM<ubjX)}(h(struct input_handle *handle)h]j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj*ubj)}(h h]h }(hj#*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j))}(h input_handleh]h input_handle}(hj4*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1*ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj6*modnameN classnameNjm jp )}js ]j)}jj)sbc.input_open_deviceasbuh1hhj*ubj)}(h h]h }(hjT*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]h*}(hjb*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj))}(hhandleh]hhandle}(hjo*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj*ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj*ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj)hhhj)hM<ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj)hhhj)hM<ubah}(h]j)ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj)hM<hj)hhubjW)}(hhh]j\)}(hopen input deviceh]hopen input device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM<hj*hhubah}(h]h ]h"]h$]h&]uh1jVhj)hhhj)hM<ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j*j|j*j}j~juh1hhhhhhNhNubj)}(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}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM@hj*ubj)}(hhh]j)}(hN``struct input_handle *handle`` handle through which device is being accessed h](j)}(h``struct input_handle *handle``h]j)}(hj*h]hstruct input_handle *handle}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM=hj*ubj)}(hhh]j\)}(h-handle through which device is being accessedh]h-handle through which device is being accessed}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj*hM=hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM=hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubj\)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM?hj*ubj\)}(hpThis function should be called by input handlers when they want to start receive events from given input device.h]hpThis function should be called by input handlers when they want to start receive events from given input device.}(hj++hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM>hj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_close_device (C function)c.input_close_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h5void input_close_device (struct input_handle *handle)h]h)}(h4void input_close_device(struct input_handle *handle)h](j )}(hvoidh]hvoid}(hjZ+hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjV+hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|ubj)}(h h]h }(hji+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV+hhhjh+hM|ubj#)}(hinput_close_deviceh]j))}(hinput_close_deviceh]hinput_close_device}(hj{+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjw+ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjV+hhhjh+hM|ubjX)}(h(struct input_handle *handle)h]j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j))}(h input_handleh]h input_handle}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj+ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj+modnameN classnameNjm jp )}js ]j)}jj}+sbc.input_close_deviceasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj))}(hhandleh]hhandle}(hj+hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj+ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj+ubah}(h]h ]h"]h$]h&]j@jAuh1jWhjV+hhhjh+hM|ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjR+hhhjh+hM|ubah}(h]jM+ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjh+hM|hjO+hhubjW)}(hhh]j\)}(hclose input deviceh]hclose input device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|hj,hhubah}(h]h ]h"]h$]h&]uh1jVhjO+hhhjh+hM|ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j2,j|j2,j}j~juh1hhhhhhNhNubj)}(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>,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:,ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6,ubj)}(hhh]j)}(hN``struct input_handle *handle`` handle through which device is being accessed h](j)}(h``struct input_handle *handle``h]j)}(hj[,h]hstruct input_handle *handle}(hj],hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY,ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM}hjU,ubj)}(hhh]j\)}(h-handle through which device is being accessedh]h-handle through which device is being accessed}(hjt,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjp,hM}hjq,ubah}(h]h ]h"]h$]h&]uh1jhjU,ubeh}(h]h ]h"]h$]h&]uh1jhjp,hM}hjR,ubah}(h]h ]h"]h$]h&]uh1jhj6,ubj\)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6,ubj\)}(hoThis function should be called by input handlers when they want to stop receive events from given input device.h]hoThis function should be called by input handlers when they want to stop receive events from given input device.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM~hj6,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%input_scancode_to_scalar (C function)c.input_scancode_to_scalarhNtauh1hhhhhhNhNubh)}(hhh](h)}(hZint input_scancode_to_scalar (const struct input_keymap_entry *ke, unsigned int *scancode)h]h)}(hYint input_scancode_to_scalar(const struct input_keymap_entry *ke, unsigned int *scancode)h](j )}(hinth]hint}(hj,hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj,hMubj#)}(hinput_scancode_to_scalarh]j))}(hinput_scancode_to_scalarh]hinput_scancode_to_scalar}(hj,hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj,ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj,hhhj,hMubjX)}(h=(const struct input_keymap_entry *ke, unsigned int *scancode)h](j^)}(h#const struct input_keymap_entry *keh](j)}(hj$h]hconst}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj%-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]hstruct}(hj3-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj@-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hjQ-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjN-ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjS-modnameN classnameNjm jp )}js ]j)}jj,sbc.input_scancode_to_scalarasbuh1hhj-ubj)}(h h]h }(hjq-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj))}(hkeh]hke}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj-ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubj^)}(hunsigned int *scancodeh](j )}(hunsignedh]hunsigned}(hj-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj )}(hinth]hint}(hj-hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj))}(hscancodeh]hscancode}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj-ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj,hhhj,hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj,hhhj,hMubah}(h]j,ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj,hMhj,hhubjW)}(hhh]j\)}(hMconverts scancode in :c:type:`struct input_keymap_entry `h](hconverts scancode in }(hj.hhhNhNubh)}(h8:c:type:`struct input_keymap_entry `h]j)}(hj.h]hstruct input_keymap_entry}(hj .hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jp )}js ]jm-c.input_scancode_to_scalarasbju input_keymap_entryuh1hhjhMwhj.ubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jVhj,hhhj,hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jP.j|jP.j}j~juh1hhhhhhNhNubj)}(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)}(hjZ.h]h Parameters}(hj\.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX.ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjT.ubj)}(hhh](j)}(hZ``const struct input_keymap_entry *ke`` keymap entry containing scancode to be converted. h](j)}(h'``const struct input_keymap_entry *ke``h]j)}(hjy.h]h#const struct input_keymap_entry *ke}(hj{.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjs.ubj)}(hhh]j\)}(h1keymap entry containing scancode to be converted.h]h1keymap entry containing scancode to be converted.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjs.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjp.ubj)}(h^``unsigned int *scancode`` pointer to the location where converted scancode should be stored. h](j)}(h``unsigned int *scancode``h]j)}(hj.h]hunsigned int *scancode}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.ubj)}(hhh]j\)}(hBpointer to the location where converted scancode should be stored.h]hBpointer to the location where converted scancode should be stored.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhjp.ubeh}(h]h ]h"]h$]h&]uh1jhjT.ubj\)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjT.ubj\)}(hThis function is used to convert scancode stored in :c:type:`struct keymap_entry ` into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as 'unsigned int'.h](h4This function is used to convert scancode stored in }(hj/hhhNhNubh)}(h,:c:type:`struct keymap_entry `h]j)}(hj/h]hstruct keymap_entry}(hj/hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj /ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju keymap_entryuh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj/ubh into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as ‘unsigned int’.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj+/hMhjT.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%input_default_setkeycode (C function)c.input_default_setkeycodehNtauh1hhhhhhNhNubh)}(hhh](h)}(htint input_default_setkeycode (struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)h]h)}(hsint input_default_setkeycode(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)h](j )}(hinth]hint}(hjV/hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjR/hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$ubj)}(h h]h }(hje/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR/hhhjd/hM$ubj#)}(hinput_default_setkeycodeh]j))}(hinput_default_setkeycodeh]hinput_default_setkeycode}(hjw/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjs/ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjR/hhhjd/hM$ubjX)}(hW(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j))}(h input_devh]h input_dev}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj/modnameN classnameNjm jp )}js ]j)}jjy/sbc.input_default_setkeycodeasbuh1hhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj))}(hdevh]hdev}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj/ubj^)}(h#const struct input_keymap_entry *keh](j)}(hj$h]hconst}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hstruct}(hj 0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj-0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj>0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj;0ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj@0modnameN classnameNjm jp )}js ]j/c.input_default_setkeycodeasbuh1hhj0ubj)}(h h]h }(hj\0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hjj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj))}(hkeh]hke}(hjw0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj/ubj^)}(hunsigned int *old_keycodeh](j )}(hunsignedh]hunsigned}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj )}(hinth]hint}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj))}(h old_keycodeh]h old_keycode}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj/ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjR/hhhjd/hM$ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjN/hhhjd/hM$ubah}(h]jI/ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjd/hM$hjK/hhubjW)}(hhh]j\)}(hdefault setkeycode methodh]hdefault setkeycode method}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hj0hhubah}(h]h ]h"]h$]h&]uh1jVhjK/hhhjd/hM$ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j1j|j1j}j~juh1hhhhhhNhNubj)}(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#1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM(hj1ubj)}(hhh](j)}(hF``struct input_dev *dev`` input device which keymap is being updated. h](j)}(h``struct input_dev *dev``h]j)}(hj@1h]hstruct input_dev *dev}(hjB1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM%hj:1ubj)}(hhh]j\)}(h+input device which keymap is being updated.h]h+input device which keymap is being updated.}(hjY1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjU1hM%hjV1ubah}(h]h ]h"]h$]h&]uh1jhj:1ubeh}(h]h ]h"]h$]h&]uh1jhjU1hM%hj71ubj)}(h:``const struct input_keymap_entry *ke`` new keymap entry. h](j)}(h'``const struct input_keymap_entry *ke``h]j)}(hjy1h]h#const struct input_keymap_entry *ke}(hj{1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM&hjs1ubj)}(hhh]j\)}(hnew keymap entry.h]hnew keymap entry.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1hM&hj1ubah}(h]h ]h"]h$]h&]uh1jhjs1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM&hj71ubj)}(hZ``unsigned int *old_keycode`` pointer to the location where old keycode should be stored. h](j)}(h``unsigned int *old_keycode``h]j)}(hj1h]hunsigned int *old_keycode}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM'hj1ubj)}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1hM'hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM'hj71ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj\)}(h**Description**h]j)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM)hj1ubj\)}(hThis 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 }(hj2hhhNhNubh)}(h.:c:type:`input_dev.setkeycode\(\) `h]j)}(hj 2h]hinput_dev.setkeycode()}(hj2hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj 2ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju input_devuh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM(hj2ubh method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj*2hM(hj1ubj\)}(hQThe function must be called with :c:type:`input_dev.event_lock ` held.h](h!The function must be called with }(hj52hhhNhNubh)}(h*:c:type:`input_dev.event_lock `h]j)}(hj?2h]hinput_dev.event_lock}(hjA2hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj=2ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju input_devuh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM,hj52ubh held.}(hj52hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj\2hM,hj1ubj\)}(h **Return**h]j)}(hji2h]hReturn}(hjk2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg2ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM.hj1ubj\)}(h20 on success, or a negative error code on failure.h]h20 on success, or a negative error code on failure.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM/hj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_get_keycode (C function)c.input_get_keycodehNtauh1hhhhhhNhNubh)}(hhh](h)}(hLint input_get_keycode (struct input_dev *dev, struct input_keymap_entry *ke)h]h)}(hKint input_get_keycode(struct input_dev *dev, struct input_keymap_entry *ke)h](j )}(hinth]hint}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj2hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMsubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj2hMsubj#)}(hinput_get_keycodeh]j))}(hinput_get_keycodeh]hinput_get_keycode}(hj2hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj2ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj2hhhj2hMsubjX)}(h6(struct input_dev *dev, struct input_keymap_entry *ke)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j))}(h input_devh]h input_dev}(hj 3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj3ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj 3modnameN classnameNjm jp )}js ]j)}jj2sbc.input_get_keycodeasbuh1hhj2ubj)}(h h]h }(hj)3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(hjh]h*}(hj73hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj))}(hdevh]hdev}(hjD3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj2ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj2ubj^)}(hstruct input_keymap_entry *keh](j)}(hjh]hstruct}(hj]3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjY3ubj)}(h h]h }(hjj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY3ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj{3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjx3ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj}3modnameN classnameNjm jp )}js ]j%3c.input_get_keycodeasbuh1hhjY3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY3ubj))}(hkeh]hke}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjY3ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj2ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj2hhhj2hMsubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj2hhhj2hMsubah}(h]j2ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj2hMshj2hhubjW)}(hhh]j\)}(h5retrieve keycode currently mapped to a given scancodeh]h5retrieve keycode currently mapped to a given scancode}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMshj3hhubah}(h]h ]h"]h$]h&]uh1jVhj2hhhj2hMsubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j3j|j3j}j~juh1hhhhhhNhNubj)}(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)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhj3ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being queried h](j)}(h``struct input_dev *dev``h]j)}(hj4h]hstruct input_dev *dev}(hj!4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMthj4ubj)}(hhh]j\)}(h*input device which keymap is being queriedh]h*input device which keymap is being queried}(hj84hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj44hMthj54ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj44hMthj4ubj)}(h/``struct input_keymap_entry *ke`` keymap entry h](j)}(h!``struct input_keymap_entry *ke``h]j)}(hjX4h]hstruct input_keymap_entry *ke}(hjZ4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMuhjR4ubj)}(hhh]j\)}(h keymap entryh]h keymap entry}(hjq4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjm4hMuhjn4ubah}(h]h ]h"]h$]h&]uh1jhjR4ubeh}(h]h ]h"]h$]h&]uh1jhjm4hMuhj4ubeh}(h]h ]h"]h$]h&]uh1jhj3ubj\)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhj3ubj\)}(hrThis function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.h]hrThis function should be called by anyone interested in retrieving current keymap. Presently evdev handlers use it.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMvhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_set_keycode (C function)c.input_set_keycodehNtauh1hhhhhhNhNubh)}(hhh](h)}(hRint input_set_keycode (struct input_dev *dev, const struct input_keymap_entry *ke)h]h)}(hQint input_set_keycode(struct input_dev *dev, const struct input_keymap_entry *ke)h](j )}(hinth]hint}(hj4hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj4hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hMubj#)}(hinput_set_keycodeh]j))}(hinput_set_keycodeh]hinput_set_keycode}(hj4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj4ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj4hhhj4hMubjX)}(h<(struct input_dev *dev, const struct input_keymap_entry *ke)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj"5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j))}(h input_devh]h input_dev}(hj35hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj05ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj55modnameN classnameNjm jp )}js ]j)}jj4sbc.input_set_keycodeasbuh1hhj5ubj)}(h h]h }(hjS5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hja5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj))}(hdevh]hdev}(hjn5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj 5ubj^)}(h#const struct input_keymap_entry *keh](j)}(hj$h]hconst}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj5modnameN classnameNjm jp )}js ]jO5c.input_set_keycodeasbuh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj))}(hkeh]hke}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj 5ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj4hhhj4hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj4hhhj4hMubah}(h]j4ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj4hMhj4hhubjW)}(hhh]j\)}(h'attribute a keycode to a given scancodeh]h'attribute a keycode to a given scancode}(hj#6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj 6hhubah}(h]h ]h"]h$]h&]uh1jVhj4hhhj4hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j;6j|j;6j}j~juh1hhhhhhNhNubj)}(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)}(hjE6h]h Parameters}(hjG6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC6ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?6ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being updated h](j)}(h``struct input_dev *dev``h]j)}(hjd6h]hstruct input_dev *dev}(hjf6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj^6ubj)}(hhh]j\)}(h*input device which keymap is being updatedh]h*input device which keymap is being updated}(hj}6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjy6hMhjz6ubah}(h]h ]h"]h$]h&]uh1jhj^6ubeh}(h]h ]h"]h$]h&]uh1jhjy6hMhj[6ubj)}(h9``const struct input_keymap_entry *ke`` new keymap entry h](j)}(h'``const struct input_keymap_entry *ke``h]j)}(hj6h]h#const struct input_keymap_entry *ke}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6ubj)}(hhh]j\)}(hnew keymap entryh]hnew keymap entry}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj6hMhj6ubah}(h2]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj[6ubeh}(h]h ]h"]h$]h&]uh1jhj?6ubj\)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?6ubj\)}(hxThis function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.h]hxThis function should be called by anyone needing to update current keymap. Presently keyboard and evdev handlers use it.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_reset_device (C function)c.input_reset_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h/void input_reset_device (struct input_dev *dev)h]h)}(h.void input_reset_device(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj7hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj,7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj+7hMubj#)}(hinput_reset_deviceh]j))}(hinput_reset_deviceh]hinput_reset_device}(hj>7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj:7ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj7hhhj+7hMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjZ7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjV7ubj)}(h h]h }(hjg7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV7ubh)}(hhh]j))}(h input_devh]h input_dev}(hjx7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hju7ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjz7modnameN classnameNjm jp )}js ]j)}jj@7sbc.input_reset_deviceasbuh1hhjV7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV7ubj))}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjV7ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjR7ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj7hhhj+7hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj7hhhj+7hMubah}(h]j7ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj+7hMhj7hhubjW)}(hhh]j\)}(h'reset/restore the state of input deviceh]h'reset/restore the state of input device}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jVhj7hhhj+7hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j7j|j7j}j~juh1hhhhhhNhNubj)}(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)}(hj7h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubj)}(hhh]j)}(hE``struct input_dev *dev`` input device whose state needs to be reset h](j)}(h``struct input_dev *dev``h]j)}(hj8h]hstruct input_dev *dev}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj8ubj)}(hhh]j\)}(h*input device whose state needs to be reseth]h*input device whose state needs to be reset}(hj78hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj38hMhj48ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj38hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubj\)}(h**Description**h]j)}(hjY8h]h Description}(hj[8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW8ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubj\)}(hThis function tries to reset the state of an opened input device and bring internal state and state if the hardware in sync with each other. We mark all keys as released, restore LED state, repeat rate, etc.h]hThis function tries to reset the state of an opened input device and bring internal state and state if the hardware in sync with each other. We mark all keys as released, restore LED state, repeat rate, etc.}(hjo8hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"input_allocate_device (C function)c.input_allocate_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h/struct input_dev * input_allocate_device (void)h]h)}(h-struct input_dev *input_allocate_device(void)h](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMfubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMfubh)}(hhh]j))}(h input_devh]h input_dev}(hj8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj8ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj8modnameN classnameNjm jp )}js ]j)}jinput_allocate_devicesbc.input_allocate_deviceasbuh1hhj8hhhj8hMfubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMfubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMfubj#)}(hinput_allocate_deviceh]j))}(hj8h]hinput_allocate_device}(hj8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj8ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj8hhhj8hMfubjX)}(h(void)h]j^)}(hvoidh]j )}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj9ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj8hhhj8hMfubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj8hhhj8hMfubah}(h]j8ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj8hMfhj8hhubjW)}(hhh]j\)}(h$allocate memory for new input deviceh]h$allocate memory for new input device}(hjB9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMfhj?9hhubah}(h]h ]h"]h$]h&]uh1jVhj8hhhj8hMfubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jZ9j|jZ9j}j~juh1hhhhhhNhNubj)}(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)}(hjd9h]h Parameters}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb9ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMjhj^9ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj9h]hvoid}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chKhj}9ubj)}(hhh]j\)}(h no argumentsh]h no arguments}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj}9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhjz9ubah}(h]h ]h"]h$]h&]uh1jhj^9ubj\)}(h**Description**h]j)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chKhj^9ubj\)}(h.Returns prepared struct input_dev or ``NULL``.h](h%Returns prepared struct input_dev or }(hj9hhhNhNubj)}(h``NULL``h]hNULL}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMghj^9ubj\)}(h**NOTE**h]j)}(hj9h]hNOTE}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMihj^9ubj\)}(hUse input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.h]hUse input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMjhj^9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'devm_input_allocate_device (C function)c.devm_input_allocate_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(hBstruct input_dev * devm_input_allocate_device (struct device *dev)h]h)}(h@struct input_dev *devm_input_allocate_device(struct device *dev)h](j)}(hjh]hstruct}(hj<:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj8:hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjJ:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8:hhhjI:hMubh)}(hhh]j))}(h input_devh]h input_dev}(hj[:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjX:ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj]:modnameN classnameNjm jp )}js ]j)}jdevm_input_allocate_devicesbc.devm_input_allocate_deviceasbuh1hhj8:hhhjI:hMubj)}(h h]h }(hj|:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8:hhhjI:hMubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8:hhhjI:hMubj#)}(hdevm_input_allocate_deviceh]j))}(hjy:h]hdevm_input_allocate_device}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj:ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj8:hhhjI:hMubjX)}(h(struct device *dev)h]j^)}(hstruct device *devh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubh)}(hhh]j))}(hdeviceh]hdevice}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj:ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj:modnameN classnameNjm jp )}js ]jw:c.devm_input_allocate_deviceasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj))}(hdevh]hdev}(hj ;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj:ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj:ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj8:hhhjI:hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj4:hhhjI:hMubah}(h]j/:ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjI:hMhj1:hhubjW)}(hhh]j\)}(hallocate managed input deviceh]hallocate managed input device}(hj7;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj4;hhubah}(h]h ]h"]h$]h&]uh1jVhj1:hhhjI:hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jO;j|jO;j}j~juh1hhhhhhNhNubj)}(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)}(hjY;h]h Parameters}(hj[;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW;ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjS;ubj)}(hhh]j)}(hD``struct device *dev`` device owning the input device being created h](j)}(h``struct device *dev``h]j)}(hjx;h]hstruct device *dev}(hjz;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv;ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjr;ubj)}(hhh]j\)}(h,device owning the input device being createdh]h,device owning the input device being created}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhjr;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhjo;ubah}(h]h ]h"]h$]h&]uh1jhjS;ubj\)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjS;ubj\)}(h.Returns prepared struct input_dev or ``NULL``.h](h%Returns prepared struct input_dev or }(hj;hhhNhNubj)}(h``NULL``h]hNULL}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjS;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;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjS;ubj\)}(h**NOTE**h]j)}(hj;h]hNOTE}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjS;ubj\)}(hVthe owner device is set up as parent of input device and users should not override it.h]hVthe owner device is set up as parent of input device and users should not override it.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjS;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_free_device (C function)c.input_free_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h.void input_free_device (struct input_dev *dev)h]h)}(h-void input_free_device(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj@<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj<<hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjO<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<<hhhjN<hMubj#)}(hinput_free_deviceh]j))}(hinput_free_deviceh]hinput_free_device}(hja<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj]<ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj<<hhhjN<hMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj}<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjy<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy<ubh)}(hhh]j))}(h input_devh]h input_dev}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj<ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj<modnameN classnameNjm jp )}js ]j)}jjc<sbc.input_free_deviceasbuh1hhjy<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy<ubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy<ubj))}(hdevh]hdev}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjy<ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hju<ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj<<hhhjN<hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj8<hhhjN<hMubah}(h]j3<ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjN<hMhj5<hhubjW)}(hhh]j\)}(h+free memory occupied by input_dev structureh]h+free memory occupied by input_dev structure}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj<hhubah}(h]h ]h"]h$]h&]uh1jVhj5<hhhjN<hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j=j|j=j}j~juh1hhhhhhNhNubj)}(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$=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj =ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj)}(hhh]j)}(h/``struct input_dev *dev`` input device to free h](j)}(h``struct input_dev *dev``h]j)}(hjA=h]hstruct input_dev *dev}(hjC=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?=ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj;=ubj)}(hhh]j\)}(hinput device to freeh]hinput device to free}(hjZ=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjV=hMhjW=ubah}(h]h ]h"]h$]h&]uh1jhj;=ubeh}(h]h ]h"]h$]h&]uh1jhjV=hMhj8=ubah}(h]h ]h"]h$]h&]uh1jhj=ubj\)}(h**Description**h]j)}(hj|=h]h Description}(hj~=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz=ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(hThis function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped.h]hThis function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(h6Device should be allocated by input_allocate_device().h]h6Device should be allocated by input_allocate_device().}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(h**NOTE**h]j)}(hj=h]hNOTE}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(hjIf there are references to the input device then memory will not be freed until last reference is dropped.h]hjIf there are references to the input device then memory will not be freed until last reference is dropped.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_set_timestamp (C function)c.input_set_timestamphNtauh1hhhhhhNhNubh)}(hhh](h)}(hCvoid input_set_timestamp (struct input_dev *dev, ktime_t timestamp)h]h)}(hBvoid input_set_timestamp(struct input_dev *dev, ktime_t timestamp)h](j )}(hvoidh]hvoid}(hj=hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj>hMubj#)}(hinput_set_timestamph]j))}(hinput_set_timestamph]hinput_set_timestamp}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj=hhhj>hMubjX)}(h*(struct input_dev *dev, ktime_t timestamp)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj4>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0>ubj)}(h h]h }(hjA>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0>ubh)}(hhh]j))}(h input_devh]h input_dev}(hjR>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjO>ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjT>modnameN classnameNjm jp )}js ]j)}jj>sbc.input_set_timestampasbuh1hhj0>ubj)}(h h]h }(hjr>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0>ubj))}(hdevh]hdev}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0>ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj,>ubj^)}(hktime_t timestamph](h)}(hhh]j))}(hktime_th]hktime_t}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj>modnameN classnameNjm jp )}js ]jn>c.input_set_timestampasbuh1hhj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj))}(h timestamph]h timestamp}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj,>ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj=hhhj>hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj=hhhj>hMubah}(h]j=ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj>hMhj=hhubjW)}(hhh]j\)}(hset timestamp for input eventsh]hset timestamp for input events}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jVhj=hhhj>hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j?j|j?j}j~juh1hhhhhhNhNubj)}(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#?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?ubj)}(hhh](j)}(h<``struct input_dev *dev`` input device to set timestamp for h](j)}(h``struct input_dev *dev``h]j)}(hj@?h]hstruct input_dev *dev}(hjB?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj:?ubj)}(hhh]j\)}(h!input device to set timestamp forh]h!input device to set timestamp for}(hjY?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjU?hMhjV?ubah}(h]h ]h"]h$]h&]uh1jhj:?ubeh}(h]h ]h"]h$]h&]uh1jhjU?hMhj7?ubj)}(hR``ktime_t timestamp`` the time at which the event has occurred in CLOCK_MONOTONIC h](j)}(h``ktime_t timestamp``h]j)}(hjy?h]hktime_t timestamp}(hj{?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjs?ubj)}(hhh]j\)}(h;the time at which the event has occurred in CLOCK_MONOTONICh]h;the time at which the event has occurred in CLOCK_MONOTONIC}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?ubah}(h]h ]h"]h$]h&]uh1jhjs?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhj7?ubeh}(h]h ]h"]h$]h&]uh1jhj?ubj\)}(h**Description**h]j)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?ubj\)}(hThis function is intended to provide to the input system a more accurate time of when an event actually occurred. The driver should call this function as soon as a timestamp is acquired ensuring clock conversions in input_set_timestamp are done correctly.h]hThis function is intended to provide to the input system a more accurate time of when an event actually occurred. The driver should call this function as soon as a timestamp is acquired ensuring clock conversions in input_set_timestamp are done correctly.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?ubj\)}(hThe system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.h]hThe system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_get_timestamp (C function)c.input_get_timestamphNtauh1hhhhhhNhNubh)}(hhh](h)}(h5ktime_t * input_get_timestamp (struct input_dev *dev)h]h)}(h3ktime_t *input_get_timestamp(struct input_dev *dev)h](h)}(hhh]j))}(hktime_th]hktime_t}(hj @hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj @ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj@modnameN classnameNjm jp )}js ]j)}jinput_get_timestampsbc.input_get_timestampasbuh1hhj@hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj.@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj-@hMubj)}(hjh]h*}(hj<@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj-@hMubj#)}(hinput_get_timestamph]j))}(hj*@h]hinput_get_timestamp}(hjM@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjI@ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj@hhhj-@hMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjh@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjd@ubj)}(h h]h }(hju@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd@ubh)}(hhh]j))}(h input_devh]h input_dev}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj@modnameN classnameNjm jp )}js ]j(@c.input_get_timestampasbuh1hhjd@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd@ubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd@ubj))}(hdevh]hdev}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjd@ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj`@ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj@hhhj-@hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj@hhhj-@hMubah}(h]j?ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj-@hMhj?hhubjW)}(hhh]j\)}(hget timestamp for input eventsh]hget timestamp for input events}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj@hhubah}(h]h ]h"]h$]h&]uh1jVhj?hhhj-@hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jAj|jAj}j~juh1hhhhhhNhNubj)}(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)}(hj Ah]h Parameters}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Aubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjAubj)}(hhh]j)}(h=``struct input_dev *dev`` input device to get timestamp from h](j)}(h``struct input_dev *dev``h]j)}(hj*Ah]hstruct input_dev *dev}(hj,AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Aubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj$Aubj)}(hhh]j\)}(h"input device to get timestamp fromh]h"input device to get timestamp from}(hjCAhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj?AhMhj@Aubah}(h]h ]h"]h$]h&]uh1jhj$Aubeh}(h]h ]h"]h$]h&]uh1jhj?AhMhj!Aubah}(h]h ]h"]h$]h&]uh1jhjAubj\)}(h**Description**h]j)}(hjeAh]h Description}(hjgAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcAubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjAubj\)}(h3A valid timestamp is a timestamp of non-zero value.h]h3A valid timestamp is a timestamp of non-zero value.}(hj{AhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!input_set_capability (C function)c.input_set_capabilityhNtauh1hhhhhhNhNubh)}(hhh](h)}(hWvoid input_set_capability (struct input_dev *dev, unsigned int type, unsigned int code)h]h)}(hVvoid input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)h](j )}(hvoidh]hvoid}(hjAhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjAhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjAhM ubj#)}(hinput_set_capabilityh]j))}(hinput_set_capabilityh]hinput_set_capability}(hjAhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjAubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjAhhhjAhM ubjX)}(h=(struct input_dev *dev, unsigned int type, unsigned int code)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjAubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubh)}(hhh]j))}(h input_devh]h input_dev}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjBmodnameN classnameNjm jp )}js ]j)}jjAsbc.input_set_capabilityasbuh1hhjAubj)}(h h]h }(hj%BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj)}(hjh]h*}(hj3BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubj))}(hdevh]hdev}(hj@BhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjAubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjAubj^)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hjYBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUBubj)}(h h]h }(hjgBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUBubj )}(hinth]hint}(hjuBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUBubj))}(htypeh]htype}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjUBubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjAubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj )}(hinth]hint}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj))}(hcodeh]hcode}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjAubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjAhhhjAhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjAhhhjAhM ubah}(h]jAah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjAhM hjAhhubjW)}(hhh]j\)}(h)mark device as capable of a certain eventh]h)mark device as capable of a certain event}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj Chhubah}(h]h ]h"]h$]h&]uh1jVhjAhhhjAhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j$Cj|j$Cj}j~juh1hhhhhhNhNubj)}(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}(hj0ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,Cubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hj(Cubj)}(hhh](j)}(hP``struct input_dev *dev`` device that is capable of emitting or accepting event h](j)}(h``struct input_dev *dev``h]j)}(hjMCh]hstruct input_dev *dev}(hjOChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM!hjGCubj)}(hhh]j\)}(h5device that is capable of emitting or accepting eventh]h5device that is capable of emitting or accepting event}(hjfChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjbChM!hjcCubah}(h]h ]h"]h$]h&]uh1jhjGCubeh}(h]h ]h"]h$]h&]uh1jhjbChM!hjDCubj)}(hA``unsigned int type`` type of the event (EV_KEY, EV_REL, etc...) h](j)}(h``unsigned int type``h]j)}(hjCh]hunsigned int type}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM"hjCubj)}(hhh]j\)}(h*type of the event (EV_KEY, EV_REL, etc...)h]h*type of the event (EV_KEY, EV_REL, etc...)}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjChM"hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM"hjDCubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjCh]hunsigned int code}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM#hjCubj)}(hhh]j\)}(h event codeh]h event code}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjChM#hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM#hjDCubeh}(h]h ]h"]h$]h&]uh1jhj(Cubj\)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM%hj(Cubj\)}(hrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.h]hrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hj(Cubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$input_enable_softrepeat (C function)c.input_enable_softrepeathNtauh1hhhhhhNhNubh)}(hhh](h)}(hKvoid input_enable_softrepeat (struct input_dev *dev, int delay, int period)h]h)}(hJvoid input_enable_softrepeat(struct input_dev *dev, int delay, int period)h](j )}(hvoidh]hvoid}(hj?DhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj;DhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjNDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;DhhhjMDhMubj#)}(hinput_enable_softrepeath]j))}(hinput_enable_softrepeath]hinput_enable_softrepeat}(hj`DhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj\Dubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj;DhhhjMDhMubjX)}(h.(struct input_dev *dev, int delay, int period)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj|DhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjxDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxDubh)}(hhh]j))}(h input_devh]h input_dev}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjDubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjDmodnameN classnameNjm jp )}js ]j)}jjbDsbc.input_enable_softrepeatasbuh1hhjxDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxDubj)}(hjh]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxDubj))}(hdevh]hdev}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjxDubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjtDubj^)}(h int delayh](j )}(hinth]hint}(hjDhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj))}(hdelayh]hdelay}(hj EhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjDubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjtDubj^)}(h int periodh](j )}(hinth]hint}(hj#EhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjEubj)}(h h]h }(hj1EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj))}(hperiodh]hperiod}(hj?EhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjEubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjtDubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj;DhhhjMDhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj7DhhhjMDhMubah}(h]j2Dah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjMDhMhj4DhhubjW)}(hhh]j\)}(henable software autorepeath]henable software autorepeat}(hjiEhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjfEhhubah}(h]h ]h"]h$]h&]uh1jVhj4DhhhjMDhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jEj|jEj}j~juh1hhhhhhNhNubj)}(h**Parameters** ``struct input_dev *dev`` input device ``int delay`` repeat delay ``int period`` repeat period **Description** Enable software autorepeat on the input device.h](j\)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjEubj)}(hhh](j)}(h'``struct input_dev *dev`` input device h](j)}(h``struct input_dev *dev``h]j)}(hjEh]hstruct input_dev *dev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjEubj)}(hhh]j\)}(h input deviceh]h input device}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(h``int delay`` repeat delay h](j)}(h ``int delay``h]j)}(hjEh]h int delay}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjEubj)}(hhh]j\)}(h repeat delayh]h repeat delay}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjEhMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjEubj)}(h``int period`` repeat period h](j)}(h``int period``h]j)}(hjFh]h int period}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjFubj)}(hhh]j\)}(h repeat periodh]h repeat period}(hj5FhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1FhMhj2Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj1FhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubj\)}(h**Description**h]j)}(hjWFh]h Description}(hjYFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUFubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjEubj\)}(h/Enable software autorepeat on the input device.h]h/Enable software autorepeat on the input device.}(hjmFhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"input_register_device (C function)c.input_register_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h1int input_register_device (struct input_dev *dev)h]h)}(h0int input_register_device(struct input_dev *dev)h](j )}(hinth]hint}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjFhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjFhM ubj#)}(hinput_register_deviceh]j))}(hinput_register_deviceh]hinput_register_device}(hjFhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjFubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjFhhhjFhM ubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j))}(h input_devh]h input_dev}(hjFhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjFubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjFmodnameN classnameNjm jp )}js ]j)}jjFsbc.input_register_deviceasbuh1hhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hjh]h*}(hj%GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj))}(hdevh]hdev}(hj2GhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjFubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjFubah}(h]h ]h"]h$]h&]j@jAuh1jWhjFhhhjFhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjFhhhjFhM ubah}(h]jFah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjFhM hjFhhubjW)}(hhh]j\)}(hregister device with input coreh]hregister device with input core}(hj\GhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjYGhhubah}(h]h ]h"]h$]h&]uh1jVhjFhhhjFhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jtGj|jtGj}j~juh1hhhhhhNhNubj)}(hX^**Parameters** ``struct input_dev *dev`` device to be registered **Description** This function registers device with input core. The device must be allocated with input_allocate_device() and all it's capabilities set up before registering. If function fails the device must be freed with input_free_device(). Once device has been successfully registered it can be unregistered with input_unregister_device(); input_free_device() should not be called in this case. Note that this function is also used to register managed input devices (ones allocated with devm_input_allocate_device()). Such managed input devices need not be explicitly unregistered or freed, their tear down is controlled by the devres infrastructure. It is also worth noting that tear down of managed input devices is internally a 2-step process: registered managed input device is first unregistered, but stays in memory and can still handle input_event() calls (although events will not be delivered anywhere). The freeing of managed input device will happen later, when devres stack is unwound to the point where device allocation was made.h](j\)}(h**Parameters**h]j)}(hj~Gh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Gubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjxGubj)}(hhh]j)}(h2``struct input_dev *dev`` device to be registered h](j)}(h``struct input_dev *dev``h]j)}(hjGh]hstruct input_dev *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjGubj)}(hhh]j\)}(hdevice to be registeredh]hdevice to be registered}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhM hjGubah}(h]h ]h"]h$]h&]uh1jhjxGubj\)}(h**Description**h]j)}(hjGh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjxGubj\)}(hX~This function registers device with input core. The device must be allocated with input_allocate_device() and all it's capabilities set up before registering. If function fails the device must be freed with input_free_device(). Once device has been successfully registered it can be unregistered with input_unregister_device(); input_free_device() should not be called in this case.h]hXThis function registers device with input core. The device must be allocated with input_allocate_device() and all it’s capabilities set up before registering. If function fails the device must be freed with input_free_device(). Once device has been successfully registered it can be unregistered with input_unregister_device(); input_free_device() should not be called in this case.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjxGubj\)}(hXNote that this function is also used to register managed input devices (ones allocated with devm_input_allocate_device()). Such managed input devices need not be explicitly unregistered or freed, their tear down is controlled by the devres infrastructure. It is also worth noting that tear down of managed input devices is internally a 2-step process: registered managed input device is first unregistered, but stays in memory and can still handle input_event() calls (although events will not be delivered anywhere). The freeing of managed input device will happen later, when devres stack is unwound to the point where device allocation was made.h]hXNote that this function is also used to register managed input devices (ones allocated with devm_input_allocate_device()). Such managed input devices need not be explicitly unregistered or freed, their tear down is controlled by the devres infrastructure. It is also worth noting that tear down of managed input devices is internally a 2-step process: registered managed input device is first unregistered, but stays in memory and can still handle input_event() calls (although events will not be delivered anywhere). The freeing of managed input device will happen later, when devres stack is unwound to the point where device allocation was made.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjxGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$input_unregister_device (C function)c.input_unregister_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h4void input_unregister_device (struct input_dev *dev)h]h)}(h3void input_unregister_device(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj,HhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj(HhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMp ubj)}(h h]h }(hj;HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Hhhhj:HhMp ubj#)}(hinput_unregister_deviceh]j))}(hinput_unregister_deviceh]hinput_unregister_device}(hjMHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjIHubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj(Hhhhj:HhMp ubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjiHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjeHubj)}(h h]h }(hjvHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeHubh)}(hhh]j))}(h input_devh]h input_dev}(hjHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjHubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjHmodnameN classnameNjm jp )}js ]j)}jjOHsbc.input_unregister_deviceasbuh1hhjeHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeHubj))}(hdevh]hdev}(hjHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjeHubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjaHubah}(h]h ]h"]h$]h&]j@jAuh1jWhj(Hhhhj:HhMp ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj$Hhhhj:HhMp ubah}(h]jHah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj:HhMp hj!HhhubjW)}(hhh]j\)}(h'unregister previously registered deviceh]h'unregister previously registered device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMp hjHhhubah}(h]h ]h"]h$]h&]uh1jVhj!Hhhhj:HhMp ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jIj|jIj}j~juh1hhhhhhNhNubj)}(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)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Iubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMt hjIubj)}(hhh]j)}(h4``struct input_dev *dev`` device to be unregistered h](j)}(h``struct input_dev *dev``h]j)}(hj-Ih]hstruct input_dev *dev}(hj/IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Iubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMq hj'Iubj)}(hhh]j\)}(hdevice to be unregisteredh]hdevice to be unregistered}(hjFIhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjBIhMq hjCIubah}(h]h ]h"]h$]h&]uh1jhj'Iubeh}(h]h ]h"]h$]h&]uh1jhjBIhMq hj$Iubah}(h]h ]h"]h$]h&]uh1jhjIubj\)}(h**Description**h]j)}(hjhIh]h Description}(hjjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfIubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMs hjIubj\)}(hThis function unregisters an input device. Once device is unregistered the caller should not try to access it as it may get freed at any moment.h]hThis function unregisters an input device. Once device is unregistered the caller should not try to access it as it may get freed at any moment.}(hj~IhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMr hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#input_register_handler (C function)c.input_register_handlerhNtauh1hhhhhhNhNubh)}(hhh](h)}(h:int input_register_handler (struct input_handler *handler)h]h)}(h9int input_register_handler(struct input_handler *handler)h](j )}(hinth]hint}(hjIhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjIhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhM ubj#)}(hinput_register_handlerh]j))}(hinput_register_handlerh]hinput_register_handler}(hjIhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjIubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjIhhhjIhM ubjX)}(h(struct input_handler *handler)h]j^)}(hstruct input_handler *handlerh](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubh)}(hhh]j))}(h input_handlerh]h input_handler}(hjJhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjJubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj JmodnameN classnameNjm jp )}js ]j)}jjIsbc.input_register_handlerasbuh1hhjIubj)}(h h]h }(hj(JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj)}(hjh]h*}(hj6JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubj))}(hhandlerh]hhandler}(hjCJhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjIubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjIubah}(h]h ]h"]h$]h&]j@jAuh1jWhjIhhhjIhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjIhhhjIhM ubah}(h]jIah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjIhM hjIhhubjW)}(hhh]j\)}(hregister a new input handlerh]hregister a new input handler}(hjmJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjjJhhubah}(h]h ]h"]h$]h&]uh1jVhjIhhhjIhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jJj|jJj}j~juh1hhhhhhNhNubj)}(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)}(hjJh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjJubj)}(hhh]j)}(h;``struct input_handler *handler`` handler to be registered Ch](j)}(h!``struct input_handler *handler``h]j)}(hjJh]hstruct input_handler *handler}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjJubj)}(hhh]j\)}(hhandler to be registeredh]hhandler to be registered}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjJhM hjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhM hjJubah}(h]h ]h"]h$]h&]uh1jhjJubj\)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjJubj\)}(hThis 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]hThis 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.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%input_unregister_handler (C function)c.input_unregister_handlerhNtauh1hhhhhhNhNubh)}(hhh](h)}(h=void input_unregister_handler (struct input_handler *handler)h]h)}(h hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$input_unregister_handle (C function)c.input_unregister_handlehNtauh1hhhhhhNhNubh)}(hhh](h)}(h:void input_unregister_handle (struct input_handle *handle)h]h)}(h9void input_unregister_handle(struct input_handle *handle)h](j )}(hvoidh]hvoid}(hjQhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjQhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMg ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjQhMg ubj#)}(hinput_unregister_handleh]j))}(hinput_unregister_handleh]hinput_unregister_handle}(hjQhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjQubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjQhhhjQhMg ubjX)}(h(struct input_handle *handle)h]j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjQubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubh)}(hhh]j))}(h input_handleh]h input_handle}(hj!RhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjRubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj#RmodnameN classnameNjm jp )}js ]j)}jjQsbc.input_unregister_handleasbuh1hhjQubj)}(h h]h }(hjARhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hjh]h*}(hjORhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj))}(hhandleh]hhandle}(hj\RhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjQubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjQubah}(h]h ]h"]h$]h&]j@jAuh1jWhjQhhhjQhMg ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjQhhhjQhMg ubah}(h]jQah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjQhMg hjQhhubjW)}(hhh]j\)}(hunregister an input handleh]hunregister an input handle}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMg hjRhhubah}(h]h ]h"]h$]h&]uh1jVhjQhhhjQhMg ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jRj|jRj}j~juh1hhhhhhNhNubj)}(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)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMk hjRubj)}(hhh]j)}(h5``struct input_handle *handle`` handle to unregister h](j)}(h``struct input_handle *handle``h]j)}(hjRh]hstruct input_handle *handle}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMh hjRubj)}(hhh]j\)}(hhandle to unregisterh]hhandle to unregister}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjRhMh hjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMh hjRubah}(h]h ]h"]h$]h&]uh1jhjRubj\)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMj hjRubj\)}(hEThis function removes input handle from device's and handler's lists.h]hIThis function removes input handle from device’s and handler’s lists.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMi hjRubj\)}(hJThis function is supposed to be called from handler's disconnect() method.h]hLThis function is supposed to be called from handler’s disconnect() method.}(hj'ShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMl hjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_get_new_minor (C function)c.input_get_new_minorhNtauh1hhhhhhNhNubh)}(hhh](h)}(hVint input_get_new_minor (int legacy_base, unsigned int legacy_num, bool allow_dynamic)h]h)}(hUint input_get_new_minor(int legacy_base, unsigned int legacy_num, bool allow_dynamic)h](j )}(hinth]hint}(hjVShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjRShhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjeShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRShhhjdShM ubj#)}(hinput_get_new_minorh]j))}(hinput_get_new_minorh]hinput_get_new_minor}(hjwShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjsSubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjRShhhjdShM ubjX)}(h>(int legacy_base, unsigned int legacy_num, bool allow_dynamic)h](j^)}(hint legacy_baseh](j )}(hinth]hint}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj))}(h legacy_baseh]h legacy_base}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjSubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjSubj^)}(hunsigned int legacy_numh](j )}(hunsignedh]hunsigned}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj )}(hinth]hint}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj))}(h legacy_numh]h legacy_num}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjSubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjSubj^)}(hbool allow_dynamich](j )}(hboolh]hbool}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjTubj)}(h h]h }(hj'ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj))}(h allow_dynamich]h allow_dynamic}(hj5ThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjTubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjSubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjRShhhjdShM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjNShhhjdShM ubah}(h]jISah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjdShM hjKShhubjW)}(hhh]j\)}(h"allocates a new input minor numberh]h"allocates a new input minor number}(hj_ThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj\Thhubah}(h]h ]h"]h$]h&]uh1jVhjKShhhjdShM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jwTj|jwTj}j~juh1hhhhhhNhNubj)}(hX**Parameters** ``int legacy_base`` beginning or the legacy range to be searched ``unsigned int legacy_num`` size of legacy range ``bool allow_dynamic`` whether we can also take ID from the dynamic range **Description** This function allocates a new device minor for from input major namespace. Caller can request legacy minor by specifying **legacy_base** and **legacy_num** parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.h](j\)}(h**Parameters**h]j)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj{Tubj)}(hhh](j)}(hA``int legacy_base`` beginning or the legacy range to be searched h](j)}(h``int legacy_base``h]j)}(hjTh]hint legacy_base}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjTubj)}(hhh]j\)}(h,beginning or the legacy range to be searchedh]h,beginning or the legacy range to be searched}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM hjTubj)}(h1``unsigned int legacy_num`` size of legacy range h](j)}(h``unsigned int legacy_num``h]j)}(hjTh]hunsigned int legacy_num}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjTubj)}(hhh]j\)}(hsize of legacy rangeh]hsize of legacy range}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM hjTubj)}(hJ``bool allow_dynamic`` whether we can also take ID from the dynamic range h](j)}(h``bool allow_dynamic``h]j)}(hjUh]hbool allow_dynamic}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj Uubj)}(hhh]j\)}(h2whether we can also take ID from the dynamic rangeh]h2whether we can also take ID from the dynamic range}(hj+UhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj'UhM hj(Uubah}(h]h ]h"]h$]h&]uh1jhj Uubeh}(h]h ]h"]h$]h&]uh1jhj'UhM hjTubeh}(h]h ]h"]h$]h&]uh1jhj{Tubj\)}(h**Description**h]j)}(hjMUh]h Description}(hjOUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKUubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj{Tubj\)}(hXThis function allocates a new device minor for from input major namespace. Caller can request legacy minor by specifying **legacy_base** and **legacy_num** parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.h](hyThis function allocates a new device minor for from input major namespace. Caller can request legacy minor by specifying }(hjcUhhhNhNubj)}(h**legacy_base**h]h legacy_base}(hjkUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcUubh and }(hjcUhhhNhNubj)}(h**legacy_num**h]h legacy_num}(hj}UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcUubhh parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.}(hjcUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj{Tubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_free_minor (C function)c.input_free_minorhNtauh1hhhhhhNhNubh)}(hhh](h)}(h*void input_free_minor (unsigned int minor)h]h)}(h)void input_free_minor(unsigned int minor)h](j )}(hvoidh]hvoid}(hjUhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjUhM ubj#)}(hinput_free_minorh]j))}(hinput_free_minorh]hinput_free_minor}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjUubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjUhhhjUhM ubjX)}(h(unsigned int minor)h]j^)}(hunsigned int minorh](j )}(hunsignedh]hunsigned}(hjUhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj )}(hinth]hint}(hjVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj))}(hminorh]hminor}(hj+VhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjUubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjUubah}(h]h ]h"]h$]h&]j@jAuh1jWhjUhhhjUhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjUhhhjUhM ubah}(h]jUah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjUhM hjUhhubjW)}(hhh]j\)}(h"release previously allocated minorh]h"release previously allocated minor}(hjUVhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjRVhhubah}(h]h ]h"]h$]h&]uh1jVhjUhhhjUhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jmVj|jmVj}j~juh1hhhhhhNhNubj)}(h**Parameters** ``unsigned int minor`` minor to be released **Description** This function releases previously allocated input minor so that it can be reused later.h](j\)}(h**Parameters**h]j)}(hjwVh]h Parameters}(hjyVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuVubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjqVubj)}(hhh]j)}(h,``unsigned int minor`` minor to be released h](j)}(h``unsigned int minor``h]j)}(hjVh]hunsigned int minor}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjVubj)}(hhh]j\)}(hminor to be releasedh]hminor to be released}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjqVubj\)}(h**Description**h]j)}(hjVh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjqVubj\)}(hWThis function releases previously allocated input minor so that it can be reused later.h]hWThis function releases previously allocated input minor so that it can be reused later.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjqVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_ff_upload (C function)c.input_ff_uploadhNtauh1hhhhhhNhNubh)}(hhh](h)}(hXint input_ff_upload (struct input_dev *dev, struct ff_effect *effect, struct file *file)h]h)}(hWint input_ff_upload(struct input_dev *dev, struct ff_effect *effect, struct file *file)h](j )}(hinth]hint}(hjWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjWhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKVubj)}(h h]h }(hj%WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhhj$WhKVubj#)}(hinput_ff_uploadh]j))}(hinput_ff_uploadh]hinput_ff_upload}(hj7WhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj3Wubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjWhhhj$WhKVubjX)}(hD(struct input_dev *dev, struct ff_effect *effect, struct file *file)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjSWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOWubj)}(h h]h }(hj`WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOWubh)}(hhh]j))}(h input_devh]h input_dev}(hjqWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnWubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjsWmodnameN classnameNjm jp )}js ]j)}jj9Wsbc.input_ff_uploadasbuh1hhjOWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOWubj))}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjOWubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjKWubj^)}(hstruct ff_effect *effecth](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j))}(h ff_effecth]h ff_effect}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjWmodnameN classnameNjm jp )}js ]jWc.input_ff_uploadasbuh1hhjWubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj))}(heffecth]heffect}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjKWubj^)}(hstruct file *fileh](j)}(hjh]hstruct}(hj5XhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1Xubj)}(h h]h }(hjBXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Xubh)}(hhh]j))}(hfileh]hfile}(hjSXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPXubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjUXmodnameN classnameNjm jp )}js ]jWc.input_ff_uploadasbuh1hhj1Xubj)}(h h]h }(hjqXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Xubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Xubj))}(hfileh]hfile}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1Xubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjKWubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjWhhhj$WhKVubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjWhhhj$WhKVubah}(h]j Wah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj$WhKVhj WhhubjW)}(hhh]j\)}(h(upload effect into force-feedback deviceh]h(upload effect into force-feedback device}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKVhjXhhubah}(h]h ]h"]h$]h&]uh1jVhj Whhhj$WhKVubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jXj|jXj}j~juh1hhhhhhNhNubj)}(h**Parameters** ``struct input_dev *dev`` input device ``struct ff_effect *effect`` effect to be uploaded ``struct file *file`` owner of the effecth](j\)}(h**Parameters**h]j)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKZhjXubj)}(hhh](j)}(h'``struct input_dev *dev`` input device h](j)}(h``struct input_dev *dev``h]j)}(hjXh]hstruct input_dev *dev}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKWhjXubj)}(hhh]j\)}(h input deviceh]h input device}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj YhKWhj Yubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj YhKWhjXubj)}(h3``struct ff_effect *effect`` effect to be uploaded h](j)}(h``struct ff_effect *effect``h]j)}(hj0Yh]hstruct ff_effect *effect}(hj2YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Yubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKXhj*Yubj)}(hhh]j\)}(heffect to be uploadedh]heffect to be uploaded}(hjIYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjEYhKXhjFYubah}(h]h ]h"]h$]h&]uh1jhj*Yubeh}(h]h ]h"]h$]h&]uh1jhjEYhKXhjXubj)}(h)``struct file *file`` owner of the effecth](j)}(h``struct file *file``h]j)}(hjiYh]hstruct file *file}(hjkYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgYubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKZhjcYubj)}(hhh]j\)}(howner of the effecth]howner of the effect}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKYhjYubah}(h]h ]h"]h$]h&]uh1jhjcYubeh}(h]h ]h"]h$]h&]uh1jhj~YhKZhjXubeh}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_ff_erase (C function)c.input_ff_erasehNtauh1hhhhhhNhNubh)}(hhh](h)}(hLint input_ff_erase (struct input_dev *dev, int effect_id, struct file *file)h]h)}(hKint input_ff_erase(struct input_dev *dev, int effect_id, struct file *file)h](j )}(hinth]hint}(hjYhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjYhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjYhKubj#)}(hinput_ff_eraseh]j))}(hinput_ff_eraseh]hinput_ff_erase}(hjYhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjYubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjYhhhjYhKubjX)}(h9(struct input_dev *dev, int effect_id, struct file *file)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjYubj)}(h h]h }(hj ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j))}(h input_devh]h input_dev}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj ZmodnameN classnameNjm jp )}js ]j)}jjYsbc.input_ff_eraseasbuh1hhjYubj)}(h h]h }(hj>ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hjLZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj))}(hdevh]hdev}(hjYZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjYubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjYubj^)}(h int effect_idh](j )}(hinth]hint}(hjrZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjnZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnZubj))}(h effect_idh]h effect_id}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnZubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjYubj^)}(hstruct file *fileh](j)}(hjh]hstruct}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j))}(hfileh]hfile}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjZmodnameN classnameNjm jp )}js ]j:Zc.input_ff_eraseasbuh1hhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj))}(hfileh]hfile}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjYubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjYhhhjYhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjYhhhjYhKubah}(h]jYah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjYhKhjYhhubjW)}(hhh]j\)}(h)erase a force-feedback effect from deviceh]h)erase a force-feedback effect from device}(hj([hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj%[hhubah}(h]h ]h"]h$]h&]uh1jVhjYhhhjYhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j@[j|j@[j}j~juh1hhhhhhNhNubj)}(hXw**Parameters** ``struct input_dev *dev`` input device to erase effect from ``int effect_id`` id of the effect to be erased ``struct file *file`` purported owner of the request **Description** This function erases a force-feedback effect from specified device. The effect will only be erased if it was uploaded through the same file handle that is requesting erase.h](j\)}(h**Parameters**h]j)}(hjJ[h]h Parameters}(hjL[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH[ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjD[ubj)}(hhh](j)}(h<``struct input_dev *dev`` input device to erase effect from h](j)}(h``struct input_dev *dev``h]j)}(hji[h]hstruct input_dev *dev}(hjk[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjc[ubj)}(hhh]j\)}(h!input device to erase effect fromh]h!input device to erase effect from}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj~[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhjc[ubeh}(h]h ]h"]h$]h&]uh1jhj~[hKhj`[ubj)}(h0``int effect_id`` id of the effect to be erased h](j)}(h``int effect_id``h]j)}(hj[h]h int effect_id}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj[ubj)}(hhh]j\)}(hid of the effect to be erasedh]hid of the effect to be erased}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj`[ubj)}(h5``struct file *file`` purported owner of the request h](j)}(h``struct file *file``h]j)}(hj[h]hstruct file *file}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj[ubj)}(hhh]j\)}(hpurported owner of the requesth]hpurported owner of the request}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj[hKhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhj[hKhj`[ubeh}(h]h ]h"]h$]h&]uh1jhjD[ubj\)}(h**Description**h]j)}(hj\h]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjD[ubj\)}(hThis function erases a force-feedback effect from specified device. The effect will only be erased if it was uploaded through the same file handle that is requesting erase.h]hThis function erases a force-feedback effect from specified device. The effect will only be erased if it was uploaded through the same file handle that is requesting erase.}(hj,\hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjD[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_ff_event (C function)c.input_ff_eventhNtauh1hhhhhhNhNubh)}(hhh](h)}(h[int input_ff_event (struct input_dev *dev, unsigned int type, unsigned int code, int value)h]h)}(hZint input_ff_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j )}(hinth]hint}(hj[\hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjW\hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKubj)}(h h]h }(hjj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW\hhhji\hKubj#)}(hinput_ff_eventh]j))}(hinput_ff_eventh]hinput_ff_event}(hj|\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjx\ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjW\hhhji\hKubjX)}(hH(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubh)}(hhh]j))}(h input_devh]h input_dev}(hj\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj\ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj\modnameN classnameNjm jp )}js ]j)}jj~\sbc.input_ff_eventasbuh1hhj\ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj))}(hdevh]hdev}(hj\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj\ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj\ubj^)}(hunsigned int typeh](j )}(hunsignedh]hunsigned}(hj ]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj )}(hinth]hint}(hj&]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj4]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj))}(htypeh]htype}(hjB]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj]ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj\ubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hj[]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjW]ubj)}(h h]h }(hji]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]ubj )}(hinth]hint}(hjw]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjW]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW]ubj))}(hcodeh]hcode}(hj]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjW]ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj\ubj^)}(h int valueh](j )}(hinth]hint}(hj]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj]ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj))}(hvalueh]hvalue}(hj]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj]ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj\ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjW\hhhji\hKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjS\hhhji\hKubah}(h]jN\ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhji\hKhjP\hhubjW)}(hhh]j\)}(h)generic handler for force-feedback eventsh]h)generic handler for force-feedback events}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj]hhubah}(h]h ]h"]h$]h&]uh1jVhjP\hhhji\hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j ^j|j ^j}j~juh1hhhhhhNhNubj)}(h**Parameters** ``struct input_dev *dev`` input device to send the effect to ``unsigned int type`` event type (anything but EV_FF is ignored) ``unsigned int code`` event code ``int value`` event valueh](j\)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj^ubj)}(hhh](j)}(h=``struct input_dev *dev`` input device to send the effect to h](j)}(h``struct input_dev *dev``h]j)}(hj3^h]hstruct input_dev *dev}(hj5^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj-^ubj)}(hhh]j\)}(h"input device to send the effect toh]h"input device to send the effect to}(hjL^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjH^hKhjI^ubah}(h]h ]h"]h$]h&]uh1jhj-^ubeh}(h]h ]h"]h$]h&]uh1jhjH^hKhj*^ubj)}(hA``unsigned int type`` event type (anything but EV_FF is ignored) h](j)}(h``unsigned int type``h]j)}(hjl^h]hunsigned int type}(hjn^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjf^ubj)}(hhh]j\)}(h*event type (anything but EV_FF is ignored)h]h*event type (anything but EV_FF is ignored)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj^hKhj^ubah}(h]h ]h"]h$]h&]uh1jhjf^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj*^ubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hj^h]hunsigned int code}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj^ubj)}(hhh]j\)}(h event codeh]h event code}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj^hKhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj*^ubj)}(h``int value`` event valueh](j)}(h ``int value``h]j)}(hj^h]h int value}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj^ubj)}(hhh]j\)}(h event valueh]h event value}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj^ubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhj*^ubeh}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_ff_create (C function)c.input_ff_createhNtauh1hhhhhhNhNubh)}(hhh](h)}(hEint input_ff_create (struct input_dev *dev, unsigned int max_effects)h]h)}(hDint input_ff_create(struct input_dev *dev, unsigned int max_effects)h](j )}(hinth]hint}(hj8_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj4_hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMubj)}(h h]h }(hjG_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4_hhhjF_hMubj#)}(hinput_ff_createh]j))}(hinput_ff_createh]hinput_ff_create}(hjY_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjU_ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj4_hhhjF_hMubjX)}(h1(struct input_dev *dev, unsigned int max_effects)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hju_hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjq_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq_ubh)}(hhh]j))}(h input_devh]h input_dev}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj_ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj_modnameN classnameNjm jp )}js ]j)}jj[_sbc.input_ff_createasbuh1hhjq_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq_ubj)}(hjh]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq_ubj))}(hdevh]hdev}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjq_ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjm_ubj^)}(hunsigned int max_effectsh](j )}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj )}(hinth]hint}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj_ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj))}(h max_effectsh]h max_effects}(hj`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj_ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjm_ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj4_hhhjF_hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj0_hhhjF_hMubah}(h]j+_ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjF_hMhj-_hhubjW)}(hhh]j\)}(hcreate force-feedback deviceh]hcreate force-feedback device}(hjI`hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhjF`hhubah}(h]h ]h"]h$]h&]uh1jVhj-_hhhjF_hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{ja`j|ja`j}j~juh1hhhhhhNhNubj)}(hX**Parameters** ``struct input_dev *dev`` input device supporting force-feedback ``unsigned int max_effects`` maximum number of effects supported by the device **Description** This function allocates all necessary memory for a force feedback portion of an input device and installs all default handlers. **dev->ffbit** should be already set up before calling this function. Once ff device is created you need to setup its upload, erase, playback and other handlers before registering input deviceh](j\)}(h**Parameters**h]j)}(hjk`h]h Parameters}(hjm`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji`ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhje`ubj)}(hhh](j)}(hA``struct input_dev *dev`` input device supporting force-feedback h](j)}(h``struct input_dev *dev``h]j)}(hj`h]hstruct input_dev *dev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj`ubj)}(hhh]j\)}(h&input device supporting force-feedbackh]h&input device supporting force-feedback}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj`ubj)}(hO``unsigned int max_effects`` maximum number of effects supported by the device h](j)}(h``unsigned int max_effects``h]j)}(hj`h]hunsigned int max_effects}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj`ubj)}(hhh]j\)}(h1maximum number of effects supported by the deviceh]h1maximum number of effects supported by the device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj`ubeh}(h]h ]h"]h$]h&]uh1jhje`ubj\)}(h**Description**h]j)}(hj`h]h Description}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhje`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 deviceh](hThis function allocates all necessary memory for a force feedback portion of an input device and installs all default handlers. }(hjahhhNhNubj)}(h**dev->ffbit**h]h dev->ffbit}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh 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}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhje`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_ff_destroy (C function)c.input_ff_destroyhNtauh1hhhhhhNhNubh)}(hhh](h)}(h-void input_ff_destroy (struct input_dev *dev)h]h)}(h,void input_ff_destroy(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hjUahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjQahhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMPubj)}(h h]h }(hjdahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQahhhjcahMPubj#)}(hinput_ff_destroyh]j))}(hinput_ff_destroyh]hinput_ff_destroy}(hjvahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjraubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjQahhhjcahMPubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j))}(h input_devh]h input_dev}(hjahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjaubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjamodnameN classnameNjm jp )}js ]j)}jjxasbc.input_ff_destroyasbuh1hhjaubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj))}(hdevh]hdev}(hjahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjaubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjaubah}(h]h ]h"]h$]h&]j@jAuh1jWhjQahhhjcahMPubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjMahhhjcahMPubah}(h]jHaah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjcahMPhjJahhubjW)}(hhh]j\)}(h,frees force feedback portion of input deviceh]h,frees force feedback portion of input device}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMPhjbhhubah}(h]h ]h"]h$]h&]uh1jVhjJahhhjcahMPubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j-bj|j-bj}j~juh1hhhhhhNhNubj)}(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)}(hj7bh]h Parameters}(hj9bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5bubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMThj1bubj)}(hhh]j)}(hA``struct input_dev *dev`` input device supporting force feedback h](j)}(h``struct input_dev *dev``h]j)}(hjVbh]hstruct input_dev *dev}(hjXbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTbubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMQhjPbubj)}(hhh]j\)}(h&input device supporting force feedbackh]h&input device supporting force feedback}(hjobhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjkbhMQhjlbubah}(h]h ]h"]h$]h&]uh1jhjPbubeh}(h]h ]h"]h$]h&]uh1jhjkbhMQhjMbubah}(h]h ]h"]h$]h&]uh1jhj1bubj\)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMShj1bubj\)}(hThis function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.h]hThis function is only needed in error path as input core will automatically free force feedback structures when device is destroyed.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMRhj1bubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$input_ff_create_memless (C function)c.input_ff_create_memlesshNtauh1hhhhhhNhNubh)}(hhh](h)}(hint input_ff_create_memless (struct input_dev *dev, void *data, int (*play_effect)(struct input_dev *, void *, struct ff_effect *))h]h)}(hint input_ff_create_memless(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))h](j )}(hinth]hint}(hjbhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbhhh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjbhMubj#)}(hinput_ff_create_memlessh]j))}(hinput_ff_create_memlessh]hinput_ff_create_memless}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjbubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjbhhhjbhMubjX)}(hd(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjcubj)}(h h]h }(hj chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j))}(h input_devh]h input_dev}(hj1chhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj.cubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj3cmodnameN classnameNjm jp )}js ]j)}jjbsbc.input_ff_create_memlessasbuh1hhjcubj)}(h h]h }(hjQchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hj_chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj))}(hdevh]hdev}(hjlchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj cubj^)}(h void *datah](j )}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj))}(hdatah]hdata}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj cubj^)}(h?int (*play_effect)(struct input_dev*, void*, struct ff_effect*)h](j )}(hinth]hint}(hjchhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjMh]h(}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj))}(h play_effecth]h play_effect}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubj)}(hjMh]h)}(hj dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjMh]h(}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hstruct}(hj%dhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjcubj)}(h h]h }(hj2dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j))}(h input_devh]h input_dev}(hjCdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@dubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjEdmodnameN classnameNjm jp )}js ]jMcc.input_ff_create_memlessasbuh1hhjcubj)}(hjh]h*}(hjadhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjKNh]h,}(hjndhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hj{dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj )}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjKNh]h,}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j))}(h ff_effecth]h ff_effect}(hjdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjdubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjdmodnameN classnameNjm jp )}js ]jMcc.input_ff_create_memlessasbuh1hhjcubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjMh]h)}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj cubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjbhhhjbhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjbhhhjbhMubah}(h]jbah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjbhMhjbhhubjW)}(hhh]j\)}(h'create memoryless force-feedback deviceh]h'create memoryless force-feedback device}(hj1ehhhNhNubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhj.ehhubah}(h]h ]h"]h$]h&]uh1jVhjbhhhjbhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jIej|jIej}j~juh1hhhhhhNhNubj)}(hX**Parameters** ``struct input_dev *dev`` input device supporting force-feedback ``void *data`` driver-specific data to be passed into **play_effect** ``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)`` driver-specific method for playing FF effecth](j\)}(h**Parameters**h]j)}(hjSeh]h Parameters}(hjUehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQeubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjMeubj)}(hhh](j)}(hA``struct input_dev *dev`` input device supporting force-feedback h](j)}(h``struct input_dev *dev``h]j)}(hjreh]hstruct input_dev *dev}(hjtehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpeubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjleubj)}(hhh]j\)}(h&input device supporting force-feedbackh]h&input device supporting force-feedback}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjleubeh}(h]h ]h"]h$]h&]uh1jhjehMhjieubj)}(hF``void *data`` driver-specific data to be passed into **play_effect** h](j)}(h``void *data``h]j)}(hjeh]h void *data}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjeubj)}(hhh]j\)}(h6driver-specific data to be passed into **play_effect**h](h'driver-specific data to be passed into }(hjehhhNhNubj)}(h**play_effect**h]h play_effect}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1j[hjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjieubj)}(hs``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)`` driver-specific method for playing FF effecth](j)}(hF``int (*play_effect)(struct input_dev *, void *, struct ff_effect *)``h]j)}(hjeh]hBint (*play_effect)(struct input_dev *, void *, struct ff_effect *)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjeubj)}(hhh]j\)}(h,driver-specific method for playing FF effecth]h,driver-specific method for playing FF effect}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjieubeh}(h]h ]h"]h$]h&]uh1jhjMeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h] input-coreah ]h"] input coreah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hMultitouch Libraryh]hMultitouch Library}(hj>fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;fhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt_slot (C struct)c.input_mt_slothNtauh1hhj;fhhhNhNubh)}(hhh](h)}(h input_mt_sloth]h)}(hstruct input_mt_sloth](j)}(hjh]hstruct}(hjefhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjafhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKubj)}(h h]h }(hjsfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjafhhhjrfhKubj#)}(h input_mt_sloth]j))}(hj_fh]h input_mt_slot}(hjfhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjfubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjafhhhjrfhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj]fhhhjrfhKubah}(h]jXfah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjrfhKhjZfhhubjW)}(hhh]j\)}(h(represents the state of an input MT sloth]h(represents the state of an input MT slot}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjfhhubah}(h]h ]h"]h$]h&]uh1jVhjZfhhhjrfhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jfj|jfj}j~juh1hhhhj;fhNhNubj)}(hXW**Definition**:: struct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; }; **Members** ``abs`` holds current values of ABS_MT axes for this slot ``frame`` last frame at which input_mt_report_slot_state() was called ``key`` optional driver designation of this sloth](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh:}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjfubj)}(htstruct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; };h]htstruct input_mt_slot { int abs[ABS_MT_LAST - ABS_MT_FIRST + 1]; unsigned int frame; unsigned int key; };}hjfsbah}(h]h ]h"]h$]h&]j@jAuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjfubj\)}(h **Members**h]j)}(hjfh]hMembers}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK#hjfubj)}(hhh](j)}(h:``abs`` holds current values of ABS_MT axes for this slot h](j)}(h``abs``h]j)}(hjgh]habs}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjgubj)}(hhh]j\)}(h1holds current values of ABS_MT axes for this sloth]h1holds current values of ABS_MT axes for this slot}(hj-ghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj)ghKhj*gubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhj)ghKhj gubj)}(hF``frame`` last frame at which input_mt_report_slot_state() was called h](j)}(h ``frame``h]j)}(hjMgh]hframe}(hjOghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjGgubj)}(hhh]j\)}(h;last frame at which input_mt_report_slot_state() was calledh]h;last frame at which input_mt_report_slot_state() was called}(hjfghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjbghKhjcgubah}(h]h ]h"]h$]h&]uh1jhjGgubeh}(h]h ]h"]h$]h&]uh1jhjbghKhj gubj)}(h0``key`` optional driver designation of this sloth](j)}(h``key``h]j)}(hjgh]hkey}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjgubj)}(hhh]j\)}(h(optional driver designation of this sloth]h(optional driver designation of this slot}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghKhj gubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt (C struct) c.input_mthNtauh1hhj;fhhhNhNubh)}(hhh](h)}(hinput_mth]h)}(hstruct input_mth](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjghhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK!ubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjghK!ubj#)}(hinput_mth]j))}(hjgh]hinput_mt}(hjhhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjgubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjghhhjghK!ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjghhhjghK!ubah}(h]jgah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjghK!hjghhubjW)}(hhh]j\)}(hstate of tracked contactsh]hstate of tracked contacts}(hj"hhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK#hjhhhubah}(h]h ]h"]h$]h&]uh1jVhjghhhjghK!ubeh}(h]h ](justructeh"]h$]h&]jzjuj{j:hj|j:hj}j~juh1hhhhj;fhNhNubj)}(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 contactsh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjFhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBhubh:}(hjBhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK'hj>hubj)}(hstruct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[]; };h]hstruct input_mt { int trkid; int num_slots; int slot; unsigned int flags; unsigned int frame; int *red; struct input_mt_slot slots[]; };}hj_hsbah}(h]h ]h"]h$]h&]j@jAuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK)hj>hubj\)}(h **Members**h]j)}(hjphh]hMembers}(hjrhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnhubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK3hj>hubj)}(hhh](j)}(h5``trkid`` stores MT tracking ID for the next contact h](j)}(h ``trkid``h]j)}(hjhh]htrkid}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK%hjhubj)}(hhh]j\)}(h*stores MT tracking ID for the next contacth]h*stores MT tracking ID for the next contact}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhK%hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhK%hjhubj)}(h1``num_slots`` number of MT slots the device uses h](j)}(h ``num_slots``h]j)}(hjhh]h num_slots}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK&hjhubj)}(hhh]j\)}(h"number of MT slots the device usesh]h"number of MT slots the device uses}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhK&hjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhhK&hjhubj)}(h-``slot`` MT slot currently being transmitted h](j)}(h``slot``h]j)}(hjih]hslot}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK'hjhubj)}(hhh]j\)}(h#MT slot currently being transmittedh]h#MT slot currently being transmitted}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK'hjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihK'hjhubj)}(h#``flags`` input_mt operation flags h](j)}(h ``flags``h]j)}(hj:ih]hflags}(hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt_pos (C struct)c.input_mt_poshNtauh1hhj;fhhhNhNubh)}(hhh](h)}(h input_mt_posh]h)}(hstruct input_mt_posh](j)}(hjh]hstruct}(hj?jhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;jhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK1ubj)}(h h]h }(hjMjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;jhhhjLjhK1ubj#)}(h input_mt_posh]j))}(hj9jh]h input_mt_pos}(hj_jhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj[jubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj;jhhhjLjhK1ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj7jhhhjLjhK1ubah}(h]j2jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjLjhK1hj4jhhubjW)}(hhh]j\)}(hcontact positionh]hcontact position}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKthj~jhhubah}(h]h ]h"]h$]h&]uh1jVhj4jhhhjLjhK1ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jjj|jjj}j~juh1hhhhj;fhNhNubj)}(h**Definition**:: struct input_mt_pos { s16 x, y; }; **Members** ``x`` horizontal coordinate ``y`` vertical coordinateh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh:}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKxhjjubj)}(h&struct input_mt_pos { s16 x, y; };h]h&struct input_mt_pos { s16 x, y; };}hjjsbah}(h]h ]h"]h$]h&]j@jAuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKzhjjubj\)}(h **Members**h]j)}(hjjh]hMembers}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK~hjjubj)}(hhh](j)}(h``x`` horizontal coordinate h](j)}(h``x``h]j)}(hjjh]hx}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKvhjjubj)}(hhh]j\)}(hhorizontal coordinateh]hhorizontal coordinate}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjkhKvhjkubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjkhKvhjjubj)}(h``y`` vertical coordinateh](j)}(h``y``h]j)}(hj'kh]hy}(hj)khhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%kubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKvhj!kubj)}(hhh]j\)}(hvertical coordinateh]hvertical coordinate}(hj@khhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKwhj=kubah}(h]h ]h"]h$]h&]uh1jhj!kubeh}(h]h ]h"]h$]h&]uh1jhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,lubj )}(hinth]hint}(hjLlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,lubj)}(h h]h }(hjZlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,lubj))}(h num_slotsh]h num_slots}(hjhlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj,lubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjkubj^)}(hunsigned int flagsh](j )}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}lubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}lubj )}(hinth]hint}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}lubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}lubj))}(hflagsh]hflags}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj}lubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjkubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj}khhhjkhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjykhhhjkhKubah}(h]jtkah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjkhKhjvkhhubjW)}(hhh]j\)}(hinitialize MT input slotsh]hinitialize MT input slots}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjlhhubah}(h]h ]h"]h$]h&]uh1jVhjvkhhhjkhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jlj|jlj}j~juh1hhhhj;fhNhNubj)}(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)}(hjmh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjlubj)}(hhh](j)}(hP``struct input_dev *dev`` input device supporting MT events and finger tracking h](j)}(h``struct input_dev *dev``h]j)}(hj$mh]hstruct input_dev *dev}(hj&mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"mubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmubj)}(hhh]j\)}(h5input device supporting MT events and finger trackingh]h5input device supporting MT events and finger tracking}(hj=mhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9mhKhj:mubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhj9mhKhjmubj)}(h>``unsigned int num_slots`` number of slots used by the device h](j)}(h``unsigned int num_slots``h]j)}(hj]mh]hunsigned int num_slots}(hj_mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[mubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjWmubj)}(hhh]j\)}(h"number of slots used by the deviceh]h"number of slots used by the device}(hjvmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjrmhKhjsmubah}(h]h ]h"]h$]h&]uh1jhjWmubeh}(h]h ]h"]h$]h&]uh1jhjrmhKhjmubj)}(h2``unsigned int flags`` mt tasks to handle in core h](j)}(h``unsigned int flags``h]j)}(hjmh]hunsigned int flags}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmubj)}(hhh]j\)}(hmt tasks to handle in coreh]hmt tasks to handle in core}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjmubeh}(h]h ]h"]h$]h&]uh1jhjlubj\)}(h**Description**h]j)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjlubj\)}(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.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjlubj\)}(hiMay be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.h]hiMay be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK#hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#input_mt_destroy_slots (C function)c.input_mt_destroy_slotshNtauh1hhj;fhhhNhNubh)}(hhh](h)}(h3void input_mt_destroy_slots (struct input_dev *dev)h]h)}(h2void input_mt_destroy_slots(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj%nhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj!nhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKiubj)}(h h]h }(hj4nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!nhhhj3nhKiubj#)}(hinput_mt_destroy_slotsh]j))}(hinput_mt_destroy_slotsh]hinput_mt_destroy_slots}(hjFnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBnubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj!nhhhj3nhKiubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjbnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj^nubj)}(h h]h }(hjonhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^nubh)}(hhh]j))}(h input_devh]h input_dev}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj}nubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjnmodnameN classnameNjm jp )}js ]j)}jjHnsbc.input_mt_destroy_slotsasbuh1hhj^nubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^nubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^nubj))}(hdevh]hdev}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj^nubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjZnubah}(h]h ]h"]h$]h&]j@jAuh1jWhj!nhhhj3nhKiubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjnhhhj3nhKiubah}(h]jnah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj3nhKihjnhhubjW)}(hhh]j\)}(h&frees the MT slots of the input deviceh]h&frees the MT slots of the input device}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKihjnhhubah}(h]h ]h"]h$]h&]uh1jVhjnhhhj3nhKiubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jnj|jnj}j~juh1hhhhj;fhNhNubj)}(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)}(hjoh]h Parameters}(hj ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKmhjoubj)}(hhh]j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hj&oh]hstruct input_dev *dev}(hj(ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$oubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKjhj oubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hj?ohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;ohKjhjuubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj:uubj)}(hhh](j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hj_uh]hstruct input_dev *dev}(hjauhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]uubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjYuubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjxuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjtuhKhjuuubah}(h]h ]h"]h$]h&]uh1jhjYuubeh}(h]h ]h"]h$]h&]uh1jhjtuhKhjVuubj)}(hD``bool use_count`` report number of active contacts as finger count h](j)}(h``bool use_count``h]j)}(hjuh]hbool use_count}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjuubj)}(hhh]j\)}(h0report number of active contacts as finger counth]h0report number of active contacts as finger count}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjuhKhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjVuubeh}(h]h ]h"]h$]h&]uh1jhj:uubj\)}(h**Description**h]j)}(hjuh]h Description}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj:uubj\)}(hPerforms legacy pointer emulation via BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE. Touchpad finger count is emulated if use_count is true.h]hPerforms legacy pointer emulation via BTN_TOUCH, ABS_X, ABS_Y and ABS_PRESSURE. Touchpad finger count is emulated if use_count is true.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj:uubj\)}(hcThe input core ensures only the KEY and ABS axes already setup for this device will produce output.h]hcThe input core ensures only the KEY and ABS axes already setup for this device will produce output.}(hjuhhhNhNubah}(h]h ]h"]!h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj:uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!input_mt_drop_unused (C function)c.input_mt_drop_unusedhNtauh1hhj;fhhhNhNubh)}(hhh](h)}(h1void input_mt_drop_unused (struct input_dev *dev)h]h)}(h0void input_mt_drop_unused(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hj'vhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj#vhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMubj)}(h h]h }(hj6vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#vhhhj5vhMubj#)}(hinput_mt_drop_unusedh]j))}(hinput_mt_drop_unusedh]hinput_mt_drop_unused}(hjHvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjDvubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj#vhhhj5vhMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjdvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj`vubj)}(h h]h }(hjqvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`vubh)}(hhh]j))}(h input_devh]h input_dev}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjvubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjvmodnameN classnameNjm jp )}js ]j)}jjJvsbc.input_mt_drop_unusedasbuh1hhj`vubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`vubj)}(hjh]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`vubj))}(hdevh]hdev}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj`vubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj\vubah}(h]h ]h"]h$]h&]j@jAuh1jWhj#vhhhj5vhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjvhhhj5vhMubah}(h]jvah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj5vhMhjvhhubjW)}(hhh]j\)}(h'Inactivate slots not seen in this frameh]h'Inactivate slots not seen in this frame}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjvhhubah}(h]h ]h"]h$]h&]uh1jVhjvhhhj5vhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jvj|jvj}j~juh1hhhhj;fhNhNubj)}(h**Parameters** ``struct input_dev *dev`` input device with allocated MT slots **Description** Lift all slots not seen since the last call to this function.h](j\)}(h**Parameters**h]j)}(hj wh]h Parameters}(hj whhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjwubj)}(hhh]j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hj(wh]hstruct input_dev *dev}(hj*whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&wubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj"wubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjAwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj=whMhj>wubah}(h]h ]h"]h$]h&]uh1jhj"wubeh}(h]h ]h"]h$]h&]uh1jhj=whMhjwubah}(h]h ]h"]h$]h&]uh1jhjwubj\)}(h**Description**h]j)}(hjcwh]h Description}(hjewhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjawubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjwubj\)}(h=Lift all slots not seen since the last call to this function.h]h=Lift all slots not seen since the last call to this function.}(hjywhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjwubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_mt_sync_frame (C function)c.input_mt_sync_framehNtauh1hhj;fhhhNhNubh)}(hhh](h)}(h0void input_mt_sync_frame (struct input_dev *dev)h]h)}(h/void input_mt_sync_frame(struct input_dev *dev)h](j )}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMEubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhhjwhMEubj#)}(hinput_mt_sync_frameh]j))}(hinput_mt_sync_frameh]hinput_mt_sync_frame}(hjwhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjwubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjwhhhjwhMEubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjwubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j))}(h input_devh]h input_dev}(hjxhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjxubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjxmodnameN classnameNjm jp )}js ]j)}jjwsbc.input_mt_sync_frameasbuh1hhjwubj)}(h h]h }(hj#xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hjh]h*}(hj1xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj))}(hdevh]hdev}(hj>xhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjwubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjwubah}(h]h ]h"]h$]h&]j@jAuh1jWhjwhhhjwhMEubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjwhhhjwhMEubah}(h]jwah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjwhMEhjwhhubjW)}(hhh]j\)}(hsynchronize mt frameh]hsynchronize mt frame}(hjhxhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMEhjexhhubah}(h]h ]h"]h$]h&]uh1jVhjwhhhjwhMEubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jxj|jxj}j~juh1hhhhj;fhNhNubj)}(h**Parameters** ``struct input_dev *dev`` input device with allocated MT slots **Description** Close the frame and prepare the internal state for a new one. Depending on the flags, marks unused slots as inactive and performs pointer emulation.h](j\)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMIhjxubj)}(hhh]j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjxh]hstruct input_dev *dev}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMFhjxubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxhMFhjxubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjxhMFhjxubah}(h]h ]h"]h$]h&]uh1jhjxubj\)}(h**Description**h]j)}(hjxh]h Description}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMHhjxubj\)}(hClose the frame and prepare the internal state for a new one. Depending on the flags, marks unused slots as inactive and performs pointer emulation.h]hClose the frame and prepare the internal state for a new one. Depending on the flags, marks unused slots as inactive and performs pointer emulation.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMGhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"input_mt_assign_slots (C function)c.input_mt_assign_slotshNtauh1hhj;fhhhNhNubh)}(hhh](h)}(htint input_mt_assign_slots (struct input_dev *dev, int *slots, const struct input_mt_pos *pos, int num_pos, int dmax)h]h)}(hsint input_mt_assign_slots(struct input_dev *dev, int *slots, const struct input_mt_pos *pos, int num_pos, int dmax)h](j )}(hinth]hint}(hj)yhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj%yhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMubj)}(h h]h }(hj8yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%yhhhj7yhMubj#)}(hinput_mt_assign_slotsh]j))}(hinput_mt_assign_slotsh]hinput_mt_assign_slots}(hjJyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjFyubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj%yhhhj7yhMubjX)}(hZ(struct input_dev *dev, int *slots, const struct input_mt_pos *pos, int num_pos, int dmax)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjfyhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbyubj)}(h h]h }(hjsyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbyubh)}(hhh]j))}(h input_devh]h input_dev}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjyubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjymodnameN classnameNjm jp )}js ]j)}jjLysbc.input_mt_assign_slotsasbuh1hhjbyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbyubj))}(hdevh]hdev}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjbyubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj^yubj^)}(h int *slotsh](j )}(hinth]hint}(hjyhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjyubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj)}(hjh]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubj))}(hslotsh]hslots}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjyubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj^yubj^)}(hconst struct input_mt_pos *posh](j)}(hj$h]hconst}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(h h]h }(hj'zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]hstruct}(hj5zhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(h h]h }(hjBzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j))}(h input_mt_posh]h input_mt_pos}(hjSzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPzubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjUzmodnameN classnameNjm jp )}js ]jyc.input_mt_assign_slotsasbuh1hhjzubj)}(h h]h }(hjqzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]h*}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj))}(hposh]hpos}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj^yubj^)}(h int num_posh](j )}(hinth]hint}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj))}(hnum_posh]hnum_pos}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj^yubj^)}(hint dmaxh](j )}(hinth]hint}(hjzhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj))}(hdmaxh]hdmax}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj^yubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj%yhhhj7yhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj!yhhhj7yhMubah}(h]jyah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj7yhMhjyhhubjW)}(hhh]j\)}(hperform a best-match assignmenth]hperform a best-match assignment}(hj {hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jVhjyhhhj7yhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j8{j|j8{j}j~juh1hhhhj;fhNhNubj)}(hX**Parameters** ``struct input_dev *dev`` input device with allocated MT slots ``int *slots`` the slot assignment to be filled ``const struct input_mt_pos *pos`` the position array to match ``int num_pos`` number of positions ``int dmax`` maximum ABS_MT_POSITION displacement (zero for infinite) **Description** Performs a best match against the current contacts and returns the slot assignment list. New contacts are assigned to unused slots. The assignments are balanced so that all coordinate displacements are below the euclidian distance dmax. If no such assignment can be found, some contacts are assigned to unused slots. Returns zero on success, or negative error in case of failure.h](j\)}(h**Parameters**h]j)}(hjB{h]h Parameters}(hjD{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@{ubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj<{ubj)}(hhh](j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hja{h]hstruct input_dev *dev}(hjc{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_{ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj[{ubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjz{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjv{hMhjw{ubah}(h]h ]h"]h$]h&]uh1jhj[{ubeh}(h]h ]h"]h$]h&]uh1jhjv{hMhjX{ubj)}(h0``int *slots`` the slot assignment to be filled h](j)}(h``int *slots``h]j)}(hj{h]h int *slots}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj{ubj)}(hhh]j\)}(h the slot assignment to be filledh]h the slot assignment to be filled}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjX{ubj)}(h?``const struct input_mt_pos *pos`` the position array to match h](j)}(h"``const struct input_mt_pos *pos``h]j)}(hj{h]hconst struct input_mt_pos *pos}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj{ubj)}(hhh]j\)}(hthe position array to matchh]hthe position array to match}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjX{ubj)}(h$``int num_pos`` number of positions h](j)}(h``int num_pos``h]j)}(hj |h]h int num_pos}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj |ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj|ubj)}(hhh]j\)}(hnumber of positionsh]hnumber of positions}(hj%|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj!|hMhj"|ubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jhj!|hMhjX{ubj)}(hF``int dmax`` maximum ABS_MT_POSITION displacement (zero for infinite) h](j)}(h ``int dmax``h]j)}(hjE|h]hint dmax}(hjG|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC|ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj?|ubj)}(hhh]j\)}(h8maximum ABS_MT_POSITION displacement (zero for infinite)h]h8maximum ABS_MT_POSITION displacement (zero for infinite)}(hj^|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjZ|hMhj[|ubah}(h]h ]h"]h$]h&]uh1jhj?|ubeh}(h]h ]h"]h$]h&]uh1jhjZ|hMhjX{ubeh}(h]h ]h"]h$]h&]uh1jhj<{ubj\)}(h**Description**h]j)}(hj|h]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~|ubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj<{ubj\)}(hPerforms a best match against the current contacts and returns the slot assignment list. New contacts are assigned to unused slots.h]hPerforms a best match against the current contacts and returns the slot assignment list. New contacts are assigned to unused slots.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj<{ubj\)}(hThe assignments are balanced so that all coordinate displacements are below the euclidian distance dmax. If no such assignment can be found, some contacts are assigned to unused slots.h]hThe assignments are balanced so that all coordinate displacements are below the euclidian distance dmax. If no such assignment can be found, some contacts are assigned to unused slots.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj<{ubj\)}(h>Returns zero on success, or negative error in case of failure.h]h>Returns zero on success, or negative error in case of failure.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj<{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%input_mt_get_slot_by_key (C function)c.input_mt_get_slot_by_keyhNtauh1hhj;fhhhNhNubh)}(hhh](h)}(h=int input_mt_get_slot_by_key (struct input_dev *dev, int key)h]h)}(h}hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj;}ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj@}modnameN classnameNjm jp )}js ]j)}jj}sbc.input_mt_get_slot_by_keyasbuh1hhj}ubj)}(h h]h }(hj^}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj)}(hjh]h*}(hjl}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj))}(hdevh]hdev}(hjy}hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj}ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj}ubj^)}(hint keyh](j )}(hinth]hint}(hj}hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubj))}(hkeyh]hkey}(hj}hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj}ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj}ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj|hhhj|hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj|hhhj|hMubah}(h]j|ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj|hMhj|hhubjW)}(hhh]j\)}(hreturn slot matching keyh]hreturn slot matching key}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj}hhubah}(h]h ]h"]h$]h&]uh1jVhj|hhhj|hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j}j|j}j}j~juh1hhhhj;fhNhNubj)}(hX**Parameters** ``struct input_dev *dev`` input device with allocated MT slots ``int key`` the key of the sought slot **Description** Returns the slot of the given key, if it exists, otherwise set the key on the first unused slot and return. If no available slot can be found, -1 is returned. Note that for this function to work properly, input_mt_sync_frame() has to be called at each frame.h](j\)}(h**Parameters**h]j)}(hj}h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj}ubj)}(hhh](j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hj~h]hstruct input_dev *dev}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj~ubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hj2~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj.~hMhj/~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj.~hMhj~ubj)}(h'``int key`` the key of the sought slot h](j)}(h ``int key``h]j)}(hjR~h]hint key}(hjT~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjL~ubj)}(hhh]j\)}(hthe key of the sought sloth]hthe key of the sought slot}(hjk~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjg~hMhjh~ubah}(h]h ]h"]h$]h&]uh1jhjL~ubeh}(h]h ]h"]h$]h&]uh1jhjg~hMhj~ubeh}(h]h ]h"]h$]h&]uh1jhj}ubj\)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj}ubj\)}(hkReturns the slot of the given key, if it exists, otherwise set the key on the first unused slot and return.h]hkReturns the slot of the given key, if it exists, otherwise set the key on the first unused slot and return.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj}ubj\)}(hIf no available slot can be found, -1 is returned. Note that for this function to work properly, input_mt_sync_frame() has to be called at each frame.h]hIf no available slot can be found, -1 is returned. Note that for this function to work properly, input_mt_sync_frame() has to be called at each frame.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj;fhhhNhNubeh}(h]multitouch-libraryah ]h"]multitouch libraryah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hMatrix keyboards/keypadsh]hMatrix keyboards/keypads}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hmatrix_keymap_data (C struct)c.matrix_keymap_datahNtauh1hhj~hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhNubh)}(hhh](h)}(hmatrix_keymap_datah]h)}(hstruct matrix_keymap_datah](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj~hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhKubj#)}(hmatrix_keymap_datah]j))}(hj~h]hmatrix_keymap_data}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj~hhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj~hhhjhKubah}(h]j~ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhj~hhubjW)}(hhh]j\)}(hkeymap for matrix keyboardsh]hkeymap for matrix keyboards}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhj:hhubah}(h]h ]h"]h$]h&]uh1jVhj~hhhjhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jUj|jUj}j~juh1hhhhj~hj~hNubj)}(hX#**Definition**:: struct matrix_keymap_data { const uint32_t *keymap; unsigned int keymap_size; }; **Members** ``keymap`` pointer to array of uint32 values encoded with KEY() macro representing keymap ``keymap_size`` number of entries (initialized) in this keymaph](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh:}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjYubj)}(h[struct matrix_keymap_data { const uint32_t *keymap; unsigned int keymap_size; };h]h[struct matrix_keymap_data { const uint32_t *keymap; unsigned int keymap_size; };}hjzsbah}(h]h ]h"]h$]h&]j@jAuh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjYubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhK#hjYubj)}(hhh](j)}(hZ``keymap`` pointer to array of uint32 values encoded with KEY() macro representing keymap h](j)}(h ``keymap``h]j)}(hjh]hkeymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjubj)}(hhh]j\)}(hNpointer to array of uint32 values encoded with KEY() macro representing keymaph]hNpointer to array of uint32 values encoded with KEY() macro representing keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``keymap_size`` number of entries (initialized) in this keymaph](j)}(h``keymap_size``h]j)}(hjh]h keymap_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjubj)}(hhh]j\)}(h.number of entries (initialized) in this keymaph]h.number of entries (initialized) in this keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj~hhhj~hNubj\)}(h**Description**h]j)}(hj'h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhj~hhubj\)}(hThis structure is supposed to be used by platform code to supply keymaps to drivers that implement matrix-like keypads/keyboards.h]hThis structure is supposed to be used by platform code to supply keymaps to drivers that implement matrix-like keypads/keyboards.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhj~hhubeh}(h]matrix-keyboards-keypadsah ]h"]matrix keyboards/keypadsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSparse keymap supporth]hSparse keymap support}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThhhhhK#ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkey_entry (C struct) c.key_entryhNtauh1hhjThhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhNubh)}(hhh](h)}(h key_entryh]h)}(hstruct key_entryh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj{hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhjhKubj#)}(h key_entryh]j))}(hjyh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj{hhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjwhhhjhKubah}(h]jqah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhjthhubjW)}(hhh]j\)}(h%keymap entry for use in sparse keymaph]h%keymap entry for use in sparse keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jVhjthhhjhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jـj|jـj}j~juh1hhhhjThjshNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj݀ubj)}(hstruct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; };h]hstruct key_entry { int type; u32 code; union { u16 keycode; struct { u8 code; u8 value; } sw; }; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj݀ubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhK#hj݀ubj)}(hhh](j)}(h``type`` Type of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions. h](j)}(h``type``h]j)}(hj.h]htype}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj(ubj)}(hhh]j\)}(hType of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions.h]hType of the key entry (KE_KEY, KE_SW, KE_VSW, KE_END); drivers are allowed to extend the list with their own private definitions.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKhj%ubj)}(h<``code`` Device-specific data identifying the button/switch h](j)}(h``code``h]j)}(hjhh]hcode}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjbubj)}(hhh]j\)}(h2Device-specific data identifying the button/switchh]h2Device-specific data identifying the button/switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj}hKhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj%ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj)}(hhh]j\)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj%ubj)}(h0``keycode`` KEY_* code assigned to a key/button h](j)}(h ``keycode``h]j)}(hjځh]hkeycode}(hj܁hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؁ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjԁubj)}(hhh]j\)}(h#KEY_* code assigned to a key/buttonh]h#KEY_* code assigned to a key/button}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjԁubeh}(h]h ]h"]h$]h&]uh1jhjhKhj%ubj)}(h7``sw`` struct with code/value used by KE_SW and KE_VSW h](j)}(h``sw``h]j)}(hjh]hsw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj ubj)}(hhh]j\)}(h/struct with code/value used by KE_SW and KE_VSWh]h/struct with code/value used by KE_SW and KE_VSW}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj(hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj%ubj)}(h+``sw.code`` SW_* code assigned to a switch h](j)}(h ``sw.code``h]j)}(hjLh]hsw.code}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjFubj)}(hhh]j\)}(hSW_* code assigned to a switchh]hSW_* code assigned to a switch}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhj%ubj)}(h``sw.value`` Value that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h](j)}(h ``sw.value``h]j)}(hjh]hsw.value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj)}(hhh]j\)}(hValue that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h]hValue that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj%ubeh}(h]h ]h"]h$]h&]uh1jhj݀ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhjshNubj\)}(h**Description**h]j)}(hjȂh]h Description}(hjʂhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƂubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjThhubj\)}(hThis structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.h]hThis structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.}(hjނhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjThhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.sparse_keymap_entry_from_scancode (C function)#c.sparse_keymap_entry_from_scancodehNtauh1hhjThhhNhNubh)}(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]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK7ubh)}(hhh]j))}(h key_entryh]h key_entry}(hj%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj"ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj'modnameN classnameNjm jp )}js ]j)}j!sparse_keymap_entry_from_scancodesb#c.sparse_keymap_entry_from_scancodeasbuh1hhjhhhjhK7ubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK7ubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK7ubj#)}(h!sparse_keymap_entry_from_scancodeh]j))}(hjCh]h!sparse_keymap_entry_from_scancode}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjaubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhK7ubjX)}(h*(struct input_dev *dev, unsigned int code)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jA#c.sparse_keymap_entry_from_scancodeasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]h*}(hjʃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj))}(hdevh]hdev}(hj׃hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj|ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjxubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcodeh]hcode}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjxubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhK7ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhK7ubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhK7hjhhubjW)}(hhh]j\)}(hperform sparse keymap lookuph]hperform sparse keymap lookup}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK7hjOhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhK7ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jjj|jjj}j~juh1hhhhjThNhNubj)}(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)}(hjth]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK;hjnubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK8hjubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hj̄h]hunsigned int code}(hj΄hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʄubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK9hjƄubj)}(hhh]j\)}(h Scan codeh]h Scan code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjƄubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubeh}(h]h ]h"]h$]h&]uh1jhjnubj\)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK;hjnubj\)}(hvThis function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](h!This function is used to perform }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hj'h]hstruct key_entry}(hj)hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK:hjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjDhK:hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-sparse_keymap_entry_from_keycode (C function)"c.sparse_keymap_entry_from_keycodehNtauh1hhjThhhNhNubh)}(hhh](h)}(hastruct key_entry * sparse_keymap_entry_from_keycode (struct input_dev *dev, unsigned int keycode)h]h)}(h_struct key_entry *sparse_keymap_entry_from_keycode(struct input_dev *dev, unsigned int keycode)h](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKLubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj|hKLubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}j sparse_keymap_entry_from_keycodesb"c.sparse_keymap_entry_from_keycodeasbuh1hhjkhhhj|hKLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj|hKLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhj|hKLubj#)}(h sparse_keymap_entry_from_keycodeh]j))}(hjh]h sparse_keymap_entry_from_keycode}(hj΅hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjʅubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjkhhhj|hKLubjX)}(h-(struct input_dev *dev, unsigned int keycode)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj modnameN classnameNjm jp )}js ]j"c.sparse_keymap_entry_from_keycodeasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int keycodeh](j )}(hunsignedh]hunsigned}(hjYhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj )}(hinth]hint}(hjuhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjUubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj))}(hkeycodeh]hkeycode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjUubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjkhhhj|hKLubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjghhhj|hKLubah}(h]jbah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj|hKLhjdhhubjW)}(hhh]j\)}(hperform sparse keymap lookuph]hperform sparse keymap lookup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKLhjhhubah}(h]h ]h"]h$]h&]uh1jVhjdhhhj|hKLubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jӆj|jӆj}j~juh1hhhhjThNhNubj)}(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)}(hj݆h]h Parameters}(hj߆hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۆubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKPhj׆ubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKMhjubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKMhjubj)}(h"``unsigned int keycode`` Key code h](j)}(h``unsigned int keycode``h]j)}(hj5h]hunsigned int keycode}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKNhj/ubj)}(hhh]j\)}(hKey codeh]hKey code}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjJhKNhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKNhjubeh}(h]h ]h"]h$]h&]uh1jhj׆ubj\)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKPhj׆ubj\)}(hvThis function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](h!This function is used to perform }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjh]hstruct key_entry}(hjhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKOhjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhKOhj׆ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sparse_keymap_setup (C function)c.sparse_keymap_setuphNtauh1hhjThhhNhNubh)}(hhh](h)}(hint sparse_keymap_setup (struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev *, struct key_entry *))h]h)}(hint sparse_keymap_setup(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))h](j )}(hinth]hint}(hj؇hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjԇhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjԇhhhjhKubj#)}(hsparse_keymap_setuph]j))}(hsparse_keymap_setuph]hsparse_keymap_setup}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjԇhhhjhKubjX)}(hk(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj5modnameN classnameNjm jp )}js ]j)}jjsbc.sparse_keymap_setupasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj ubj^)}(hconst struct key_entry *keymaph](j)}(hj$h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjˆmodnameN classnameNjm jp )}js ]jOc.sparse_keymap_setupasbuh1hhjubj)}(h h]h }(hjވhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hkeymaph]hkeymap}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj ubj^)}(h2int (*setup)(struct input_dev*, struct key_entry*)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjMh]h(}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hsetuph]hsetup}(hjHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubj)}(hjMh]h)}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjMh]h(}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jOc.sparse_keymap_setupasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjKNh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjƉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjԉhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jOc.sparse_keymap_setupasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjMh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjԇhhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjЇhhhjhKubah}(h]jˇah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhj͇hhubjW)}(hhh]j\)}(h(set up sparse keymap for an input deviceh]h(set up sparse keymap for an input device}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjChhubah}(h]h ]h"]h$]h&]uh1jVhj͇hhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j^j|j^j}j~juh1hhhhjThNhNubj)}(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)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjbubj)}(hhh](j)}(h'``struct input_dev *dev`` Input device h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]j\)}(h Input deviceh]h Input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj~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)}(hjh]hconst struct key_entry *keymap}(hjŠhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]j\)}(h[Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entryh](hKeymap in form of array of }(hjيhhhNhNubh)}(h:c:type:`key_entry`h]j)}(hjh]h key_entry}(hjhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjيubh structures ending with }(hjيhhhNhNubj)}(h ``KE_END``h]hKE_END}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjيubh type entry}(hjيhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhKhj֊ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjՊhKhj~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)}(h8``int (*setup)(struct input_dev *, struct key_entry *)``h]j)}(hj/h]h4int (*setup)(struct input_dev *, struct key_entry *)}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj)ubj)}(hhh]j\)}(h_Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL``h](hYFunction that can be used to adjust keymap entries depending on device’s needs, may be }(hjHhhhNhNubj)}(h``NULL``h]hNULL}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhj~ubeh}(h]h ]h"]h$]h&]uh1jhjbubj\)}(h**Description**h]j)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjbubj\)}(hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.h]hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sparse_keymap_report_entry (C function)c.sparse_keymap_report_entryhNtauh1hhjThhhNhNubh)}(hhh](h)}(hyvoid sparse_keymap_report_entry (struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h]h)}(hxvoid sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKubj)}(h h]h }(hj͋hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̋hKubj#)}(hsparse_keymap_report_entryh]j))}(hsparse_keymap_report_entryh]hsparse_keymap_report_entry}(hjߋhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjۋubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj̋hKubjX)}(hY(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsbc.sparse_keymap_report_entryasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hconst struct key_entry *keh](j)}(hj$h]hconst}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j5c.sparse_keymap_report_entryasbuh1hhjiubj)}(h h]h }(hjČhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]h*}(hjҌhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj))}(hkeh]hke}(hjߌhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjiubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int valueh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hvalueh]hvalue}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hbool autoreleaseh](j )}(hjTh]hbool}(hjIhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj))}(h autoreleaseh]h autorelease}(hjdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjEubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhj̋hKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhj̋hKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj̋hKhjhhubjW)}(hhh]j\)}(h-report event corresponding to given key entryh]h-report event corresponding to given key entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj̋hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjThNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh](j)}(hJ``struct input_dev *dev`` Input device for which event should be reported h](j)}(h``struct input_dev *dev``h]j)}(hjύh]hstruct input_dev *dev}(hjэhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͍ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjɍubj)}(hhh]j\)}(h/Input device for which event should be reportedh]h/Input device for which event should be reported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjɍubeh}(h]h ]h"]h$]h&]uh1jhjhKhjƍubj)}(h:``const struct key_entry *ke`` key entry describing event h](j)}(h``const struct key_entry *ke``h]j)}(hjh]hconst struct key_entry *ke}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]j\)}(hkey entry describing eventh]hkey entry describing event}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjƍubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjAh]hunsigned int value}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj;ubj)}(hhh]j\)}(h`.h](h?This function is used to report input event described by given }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjh]hstruct key_entry}(hjhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjThhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sparse_keymap_report_event (C function)c.sparse_keymap_report_eventhNtauh1hhjThhhNhNubh)}(hhh](h)}(hpbool sparse_keymap_report_event (struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h]h)}(hobool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h](j )}(hjTh]hbool}(hjBhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj>hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>hhhjOhMubj#)}(hsparse_keymap_report_eventh]j))}(hsparse_keymap_report_eventh]hsparse_keymap_report_event}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj^ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj>hhhjOhMubjX)}(hP(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjdsbc.sparse_keymap_report_eventasbuh1hhjzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(hjh]h*}(hjʏhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj))}(hdevh]hdev}(hj׏hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjvubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hj hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcodeh]hcode}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjvubj^)}(hunsigned int valueh](j )}(hunsignedh]hunsigned}(hjAhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj )}(hinth]hint}(hj]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj=ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj))}(hvalueh]hvalue}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj=ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjvubj^)}(hbool autoreleaseh](j )}(hjTh]hbool}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(h autoreleaseh]h autorelease}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjvubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj>hhhjOhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj:hhhjOhMubah}(h]j5ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjOhMhj7hhubjW)}(hhh]j\)}(h,report event corresponding to given scancodeh]h,report event corresponding to given scancode}(hjאhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjԐhhubah}(h]h ]h"]h$]h&]uh1jVhj7hhhjOhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjThNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chM hjubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj-hMhj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hMhjubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hjQh]hunsigned int code}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjKubj)}(hhh]j\)}(h Scan codeh]h Scan code}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjfhMhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhMhjubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjh]hunsigned int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(hhKhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hKhj ubj)}(h``PS2_IGNORE`` skip the byte h](j)}(h``PS2_IGNORE``h]j)}(hjbh]h PS2_IGNORE}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhKhj\ubj)}(hhh]j\)}(h skip the byteh]h skip the byte}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjwhKhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jhjwhKhj ubj)}(h@``PS2_ERROR`` do not process the byte, abort command in progressh](j)}(h ``PS2_ERROR``h]j)}(hjh]h PS2_ERROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhKhjubj)}(hhh]j\)}(h2do not process the byte, abort command in progressh]h2do not process the byte, abort command in progress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2dev (C struct)c.ps2devhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hps2devh]h)}(h struct ps2devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK%ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK%ubj#)}(hps2devh]j))}(hjh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhK%ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhK%ubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhK%hjhhubjW)}(hhh]j\)}(h'represents a device using PS/2 protocolh]h'represents a device using PS/2 protocol}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK#hj4hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhK%ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jOj|jOj}j~juh1hhhhj{hNhNubj)}(hX**Definition**:: struct 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; }; **Members** ``serio`` a serio port used by the PS/2 device ``cmd_mutex`` a mutex ensuring that only one command is executing at a time ``wait`` a waitqueue used to signal completion from the serio interrupt handler ``flags`` various internal flags indicating stages of PS/2 command execution ``cmdbuf`` buffer holding command response ``cmdcnt`` outstanding number of bytes of the command response ``nak`` a byte transmitted by the device when it refuses command ``pre_receive_handler`` checks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byte ``receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh:}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjSubj)}(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; };}hjtsbah}(h]h ]h"]h$]h&]j@jAuh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjSubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK5hjSubj)}(hhh](j)}(h/``serio`` a serio port used by the PS/2 device h](j)}(h ``serio``h]j)}(hjh]hserio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK%hjubj)}(hhh]j\)}(h$a serio port used by the PS/2 deviceh]h$a serio port used by the PS/2 device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjubj)}(hL``cmd_mutex`` a mutex ensuring that only one command is executing at a time h](j)}(h ``cmd_mutex``h]j)}(hjݔh]h cmd_mutex}(hjߔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۔ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK&hjהubj)}(hhh]j\)}(h=a mutex ensuring that only one command is executing at a timeh]h=a mutex ensuring that only one command is executing at a time}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK&hjubah}(h]h ]h"]h$]h&]uh1jhjהubeh}(h]h ]h"]h$]h&]uh1jhjhK&hjubj)}(hP``wait`` a waitqueue used to signal completion from the serio interrupt handler h](j)}(h``wait``h]j)}(hjh]hwait}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjubj)}(hhh]j\)}(hFa waitqueue used to signal completion from the serio interrupt handlerh]hFa waitqueue used to signal completion from the serio interrupt handler}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj+hK'hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hK'hjubj)}(hM``flags`` various internal flags indicating stages of PS/2 command execution h](j)}(h ``flags``h]j)}(hjOh]hflags}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK(hjIubj)}(hhh]j\)}(hBvarious internal flags indicating stages of PS/2 command executionh]hBvarious internal flags indicating stages of PS/2 command execution}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjdhK(hjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjdhK(hjubj)}(h+``cmdbuf`` buffer holding command response h](j)}(h ``cmdbuf``h]j)}(hjh]hcmdbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjubj)}(hhh]j\)}(hbuffer holding command responseh]hbuffer holding command response}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubj)}(h?``cmdcnt`` outstanding number of bytes of the command response h](j)}(h ``cmdcnt``h]j)}(hjh]hcmdcnt}(hjÕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK*hjubj)}(hhh]j\)}(h3outstanding number of bytes of the command responseh]h3outstanding number of bytes of the command response}(hjڕhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj֕hK*hjוubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֕hK*hjubj)}(hA``nak`` a byte transmitted by the device when it refuses command h](j)}(h``nak``h]j)}(hjh]hnak}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK+hjubj)}(hhh]j\)}(h8a byte transmitted by the device when it refuses commandh]h8a byte transmitted by the device when it refuses command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK+hjubj)}(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)}(hj3h]hpre_receive_handler}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK-hj-ubj)}(hhh]j\)}(hchecks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byteh](h5checks communication errors and returns disposition (}(hjLhhhNhNubh)}(h0:c:type:`enum ps2_disposition `h]j)}(hjVh]henum ps2_disposition}(hjXhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju ps2_dispositionuh1hhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK,hjLubh) of the received data byte}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjshK,hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhK-hjubj)}(h```receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](j)}(h``receive_handler``h]j)}(hjh]hreceive_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK.hjubj)}(hhh]j\)}(hLmain handler of particular PS/2 protocol, such as keyboard or mouse protocolh]hLmain handler of particular PS/2 protocol, such as keyboard or mouse protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hjubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_sendbyte (C function)c.ps2_sendbytehNtauh1hhj{hhhNhNubh)}(hhh](h)}(hGint ps2_sendbyte (struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h]h)}(hFint ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKbubj#)}(h ps2_sendbyteh]j))}(h ps2_sendbyteh]h ps2_sendbyte}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKbubjX)}(h6(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j))}(hps2devh]hps2dev}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjAubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjFmodnameN classnameNjm jp )}js ]j)}jj sbc.ps2_sendbyteasbuh1hhj"ubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj"ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hu8 byteh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j`c.ps2_sendbyteasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hbyteh]hbyte}(hjǗhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int timeouth](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjܗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܗubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjܗubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjܗubj))}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjܗubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhKbubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhKbubah}(h]jܖah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKbhjޖhhubjW)}(hhh]j\)}(h7sends a byte to the device and wait for acknowledgementh]h7sends a byte to the device and wait for acknowledgement}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbhj?hhubah}(h]h ]h"]h$]h&]uh1jVhjޖhhhjhKbubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jZj|jZj}j~juh1hhhhj{hNhNubj)}(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)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKfhj^ubj)}(hhh](j)}(h<``struct ps2dev *ps2dev`` a PS/2 device to send the data to h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKchj}ubj)}(hhh]j\)}(h!a PS/2 device to send the data toh]h!a PS/2 device to send the data to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKchjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKchjzubj)}(h*``u8 byte`` data to be sent to the device h](j)}(h ``u8 byte``h]j)}(hjh]hu8 byte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKdhjubj)}(hhh]j\)}(hdata to be sent to the deviceh]hdata to be sent to the device}(hj՘hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjјhKdhjҘubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjјhKdhjzubj)}(hS``unsigned int timeout`` timeout for sending the data and receiving an acknowledge h](j)}(h``unsigned int timeout``h]j)}(hjh]hunsigned int timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKehjubj)}(hhh]j\)}(h9timeout for sending the data and receiving an acknowledgeh]h9timeout for sending the data and receiving an acknowledge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKehj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKehjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubj\)}(h**Description**h]j)}(hj0h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKghj^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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKfhj^ubj\)}(h9ps2_sendbyte() can only be called from a process context.h]h9ps2_sendbyte() can only be called from a process context.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKihj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_begin_command (C function)c.ps2_begin_commandhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h.void ps2_begin_command (struct ps2dev *ps2dev)h]h)}(h-void ps2_begin_command(struct ps2dev *ps2dev)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKzubj#)}(hps2_begin_commandh]j))}(hps2_begin_commandh]hps2_begin_command}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKzubjX)}(h(struct ps2dev *ps2dev)h]j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjΙhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hps2devh]hps2dev}(hjߙhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjܙubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsbc.ps2_begin_commandasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubah}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhKzubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj|hhhjhKzubah}(h]jwah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKzhjyhhubjW)}(hhh]j\)}(h0mark beginning of execution of a complex commandh]h0mark beginning of execution of a complex command}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKzhjAhhubah}(h]h ]h"]h$]h&]uh1jVhjyhhhjhKzubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j\j|j\j}j~juh1hhhhj{hNhNubj)}(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)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK~hj`ubj)}(hhh]j)}(h>``struct ps2dev *ps2dev`` a PS/2 device executing the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK{hjubj)}(hhh]j\)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK{hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubj\)}(h**Description**h]j)}(hjh]h Description}(hjšhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK}hj`ubj\)}(hcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.h]hcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.}(hj֚hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK|hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_end_command (C function)c.ps2_end_commandhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h,void ps2_end_command (struct ps2dev *ps2dev)h]h)}(h+void ps2_end_command(struct ps2dev *ps2dev)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj#)}(hps2_end_commandh]j))}(hps2_end_commandh]hps2_end_command}(hj&hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj"ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKubjX)}(h(struct ps2dev *ps2dev)h]j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj>ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubh)}(hhh]j))}(hps2devh]hps2dev}(hj`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj]ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjbmodnameN classnameNjm jp )}js ]j)}jj(sbc.ps2_end_commandasbuh1hhj>ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj:ubah}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhjhhubjW)}(hhh]j\)}(h*mark end of execution of a complex commandh]h*mark end of execution of a complex command}(hjśhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj›hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jݛj|jݛj}j~juh1hhhhj{hNhNubj)}(hO**Parameters** ``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](j\)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]j)}(h=``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]j\)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_drain (C function) c.ps2_drainhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hMvoid ps2_drain (struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h]h)}(hLvoid ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](j )}(hvoidh]hvoid}(hj`hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj\hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjnhKubj#)}(h ps2_drainh]j))}(h ps2_drainh]h ps2_drain}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj}ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj\hhhjnhKubjX)}(h>(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsb c.ps2_drainasbuh1hhjubj)}(h h]h }(hjۜhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hsize_t maxbytesh](h)}(hhh]j))}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jל c.ps2_drainasbuh1hhj ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj))}(hmaxbytesh]hmaxbytes}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int timeouth](j )}(hunsignedh]hunsigned}(hjWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj )}(hinth]hint}(hjshhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj))}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjSubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj\hhhjnhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjXhhhjnhKubah}(h]jSah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjnhKhjUhhubjW)}(hhh]j\)}(hHwaits for device to transmit requested number of bytes and discards themh]hHwaits for device to transmit requested number of bytes and discards them}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjhhubah}(h]h ]h"]h$]h&]uh1jVhjUhhhjnhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jѝj|jѝj}j~juh1hhhhj{hNhNubj)}(h**Parameters** ``struct ps2dev *ps2dev`` the PS/2 device that should be drained ``size_t maxbytes`` maximum number of bytes to be drained ``unsigned int timeout`` time to drain the deviceh](j\)}(h**Parameters**h]j)}(hj۝h]h Parameters}(hjݝhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٝubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj՝ubj)}(hhh](j)}(hA``struct ps2dev *ps2dev`` the PS/2 device that should be drained h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]j\)}(h&the PS/2 device that should be drainedh]h&the PS/2 device that should be drained}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``size_t maxbytes`` maximum number of bytes to be drained h](j)}(h``size_t maxbytes``h]j)}(hj3h]hsize_t maxbytes}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj-ubj)}(hhh]j\)}(h%maximum number of bytes to be drainedh]h%maximum number of bytes to be drained}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjHhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjubj)}(h1``unsigned int timeout`` time to drain the deviceh](j)}(h``unsigned int timeout``h]j)}(hjlh]hunsigned int timeout}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjfubj)}(hhh]j\)}(htime to drain the deviceh]htime to drain the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj՝ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_is_keyboard_id (C function)c.ps2_is_keyboard_idhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h$bool ps2_is_keyboard_id (u8 id_byte)h]h)}(h#bool ps2_is_keyboard_id(u8 id_byte)h](j )}(hjTh]hbool}(hjƞhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjžhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjԞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjžhhhjӞhKubj#)}(hps2_is_keyboard_idh]j))}(hps2_is_keyboard_idh]hps2_is_keyboard_id}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjžhhhjӞhKubjX)}(h (u8 id_byte)h]j^)}(h u8 id_byteh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsbc.ps2_is_keyboard_idasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hid_byteh]hid_byte}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubah}(h]h ]h"]h$]h&]j@jAuh1jWhjžhhhjӞhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjӞhKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjӞhKhjhhubjW)}(hhh]j\)}(h>checks received ID byte against the list of known keyboard IDsh]h>checks received ID byte against the list of known keyboard IDs}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjZhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjӞhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{juj|juj}j~juh1hhhhj{hNhNubj)}(hA**Parameters** ``u8 id_byte`` data byte that should be checkedh](j\)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjyubj)}(hhh]j)}(h/``u8 id_byte`` data byte that should be checkedh](j)}(h``u8 id_byte``h]j)}(hjh]h u8 id_byte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]j\)}(h data byte that should be checkedh]h data byte that should be checked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__ps2_command (C function)c.__ps2_commandhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hJint __ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)h]h)}(hIint __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj#)}(h __ps2_commandh]j))}(h __ps2_commandh]h __ps2_command}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKubjX)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j))}(hps2devh]hps2dev}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjUmodnameN classnameNjm jp )}js ]j)}jjsbc.__ps2_commandasbuh1hhj1ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubj^)}(h u8 *paramh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]joc.__ps2_commandasbuh1hhjubj)}(h h]h }(hjȠhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj֠hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hparamh]hparam}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubj^)}(hunsigned int commandh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcommandh]hcommand}(hj4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhjhhubjW)}(hhh]j\)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj[hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jvj|jvj}j~juh1hhhhj{hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjzubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]j\)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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ڡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj֡ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjҡubj)}(hhh]j\)}(ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or bothh]ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjҡubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hjh]hunsigned int command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj ubj)}(hhh]j\)}(hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command responseh]hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhjubeh}(h]h ]h"]h$]h&]uh1jhjzubj\)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjzubj\)}(hNot serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.h]hNot serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_command (C function) c.ps2_commandhNtauh1hhj{hhhNhNubh)}(hhh](h)}(hHint ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)h]h)}(hGint ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj#)}(h ps2_commandh]j))}(h ps2_commandh]h ps2_command}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMubjX)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjТhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj̢ubj)}(h h]h }(hjݢhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̢ubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsb c.ps2_commandasbuh1hhj̢ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̢ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̢ubj))}(hps2devh]hps2dev}(hj)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj̢ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjȢubj^)}(h u8 *paramh](h)}(hhh]j))}(hu8h]hu8}(hjEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjGmodnameN classnameNjm jp )}js ]j c.ps2_commandasbuh1hhj>ubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj)}(hjh]h*}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubj))}(hparamh]hparam}(hj~hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjȢubj^)}(hunsigned int commandh](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcommandh]hcommand}(hjϣhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjȢubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMhjhhubjW)}(hhh]j\)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhj{hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hj:h]hstruct ps2dev *ps2dev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj4ubj)}(hhh]j\)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOhMhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhMhj1ubj)}(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)}(hjsh]h u8 *param}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjmubj)}(hhh]j\)}(ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or bothh]ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhMhj1ubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hjh]hunsigned int command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]j\)}(hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command responseh]hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response}(hjƤhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjäubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj¤hMhj1ubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj\)}(hps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.h]hps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_sliced_command (C function)c.ps2_sliced_commandhNtauh1hhj{hhhNhNubh)}(hhh](h)}(h:int ps2_sliced_command (struct ps2dev *ps2dev, u8 command)h]h)}(h9int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)h](j )}(hinth]hint}(hj.hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj*hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj<hMubj#)}(hps2_sliced_commandh]j))}(hps2_sliced_commandh]hps2_sliced_command}(hjOhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjKubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj*hhhj<hMubjX)}(h#(struct ps2dev *ps2dev, u8 command)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjQsbc.ps2_sliced_commandasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj))}(hps2devh]hps2dev}(hjĥhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjgubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjcubj^)}(h u8 commandh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjݥubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jc.ps2_sliced_commandasbuh1hhj٥ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj٥ubj))}(hcommandh]hcommand}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj٥ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjcubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj*hhhj<hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj&hhhj<hMubah}(h]j!ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj<hMhj#hhubjW)}(hhh]j\)}(h)sends an extended PS/2 command to a mouseh]h)sends an extended PS/2 command to a mouse}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jVhj#hhhj<hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jNj|jNj}j~juh1hhhhj{hNhNubj)}(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)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjRubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjwh]hstruct ps2dev *ps2dev}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjqubj)}(hhh]j\)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhMhjnubj)}(h``u8 command`` command byte h](j)}(h``u8 command``h]j)}(hjh]h u8 command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]j\)}(h command byteh]h command byte}(hjɦhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjŦhMhjƦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjŦhMhjnubeh}(h]h ]h"]h$]h&]uh1jhjRubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjRubj\)}(hThe command is sent using "sliced" syntax understood by advanced devices, such as Logitech or Synaptics touchpads. The command is encoded as: 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu is the command.h]hThe command is sent using “sliced” syntax understood by advanced devices, such as Logitech or Synaptics touchpads. The command is encoded as: 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu is the command.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_init (C function) c.ps2_inithNtauh1hhj{hhhNhNubh)}(hhh](h)}(hvoid ps2_init (struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h]h)}(hvoid ps2_init(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h](j )}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj,hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj>hMubj#)}(hps2_inith]j))}(hps2_inith]hps2_init}(hjQhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjMubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj,hhhj>hMubjX)}(h(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjSsb c.ps2_initasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj))}(hps2devh]hps2dev}(hjƧhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjiubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjeubj^)}(hstruct serio *serioh](j)}(hjh]hstruct}(hjߧhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjۧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۧubh)}(hhh]j))}(hserioh]hserio}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjۧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۧubj)}(hjh]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۧubj))}(hserioh]hserio}(hj6hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjۧubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjeubj^)}(h-ps2_pre_receive_handler_t pre_receive_handlerh](h)}(hhh]j))}(hps2_pre_receive_handler_th]hps2_pre_receive_handler_t}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjOubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjTmodnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjKubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj))}(hpre_receive_handlerh]hpre_receive_handler}(hj~hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjKubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjeubj^)}(h%ps2_receive_handler_t receive_handlerh](h)}(hhh]j))}(hps2_receive_handler_th]hps2_receive_handler_t}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hreceive_handlerh]hreceive_handler}(hjƨhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjeubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj,hhhj>hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj(hhhj>hMubah}(h]j#ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj>hMhj%hhubjW)}(hhh]j\)}(hinitializes ps2dev structureh]hinitializes ps2dev structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjhhubah}(h]h ]h"]h$]h&]uh1jVhj%hhhj>hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhj{hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj ubj)}(hhh](j)}(h6``struct ps2dev *ps2dev`` structure to be initialized h](j)}(h``struct ps2dev *ps2dev``h]j)}(hj1h]hstruct ps2dev *ps2dev}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj+ubj)}(hhh]j\)}(hstructure to be initializedh]hstructure to be initialized}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFhMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjFhMhj(ubj)}(hC``struct serio *serio`` serio port associated with the PS/2 device h](j)}(h``struct serio *serio``h]j)}(hjjh]hstruct serio *serio}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjdubj)}(hhh]j\)}(h*serio port associated with the PS/2 deviceh]h*serio port associated with the PS/2 device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubj)}(hh``ps2_pre_receive_handler_t pre_receive_handler`` validation handler to check basic communication state h](j)}(h1``ps2_pre_receive_handler_t pre_receive_handler``h]j)}(hjh]h-ps2_pre_receive_handler_t pre_receive_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]j\)}(h5validation handler to check basic communication stateh]h5validation handler to check basic communication state}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubj)}(h@``ps2_receive_handler_t receive_handler`` main protocol handler h](j)}(h)``ps2_receive_handler_t receive_handler``h]j)}(hjܩh]h%ps2_receive_handler_t receive_handler}(hjީhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjکubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj֩ubj)}(hhh]j\)}(hmain protocol handlerh]hmain protocol handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhj֩ubeh}(h]h ]h"]h$]h&]uh1jhjhMhj(ubeh}(h]h ]h"]h$]h&]uh1jhj ubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj 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-hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_interrupt (C function)c.ps2_interrupthNtauh1hhj{hhhNhNubh)}(hhh](h)}(hLirqreturn_t ps2_interrupt (struct serio *serio, u8 data, unsigned int flags)h]h)}(hKirqreturn_t ps2_interrupt(struct serio *serio, u8 data, unsigned int flags)h](h)}(hhh]j))}(h irqreturn_th]h irqreturn_t}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj\ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjamodnameN classnameNjm jp )}js ]j)}j ps2_interruptsbc.ps2_interruptasbuh1hhjXhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjhMEubj#)}(h ps2_interrupth]j))}(hj}h]h ps2_interrupt}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjXhhhjhMEubjX)}(h2(struct serio *serio, u8 data, unsigned int flags)h](j^)}(hstruct serio *serioh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hserioh]hserio}(hj̪hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjɪubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjΪmodnameN classnameNjm jp )}js ]j{c.ps2_interruptasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hserioh]hserio}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hu8 datah](h)}(hhh]j))}(hu8h]hu8}(hj!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj#modnameN classnameNjm jp )}js ]j{c.ps2_interruptasbuh1hhjubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdatah]hdata}(hjMhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int flagsh](j )}(hunsignedh]hunsigned}(hjfhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj))}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjbubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjXhhhjhMEubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjThhhjhMEubah}(h]jOah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMEhjQhhubjW)}(hhh]j\)}(h)common interrupt handler for PS/2 devicesh]h)common interrupt handler for PS/2 devices}(hjȫhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMEhjūhhubah}(h]h ]h"]h$]h&]uh1jVhjQhhhjhMEubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhj{hNhNubj)}(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)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMIhjubj)}(hhh](j)}(h2``struct serio *serio`` serio port for the device h](j)}(h``struct serio *serio``h]j)}(hj h]hstruct serio *serio}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMFhjubj)}(hhh]j\)}(hserio port for the deviceh]hserio port for the device}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubj)}(h1``u8 data`` a data byte received from the device h](j)}(h ``u8 data``h]j)}(hjBh]hu8 data}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMGhj<ubj)}(hhh]j\)}(h$a data byte received from the deviceh]h$a data byte received from the device}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjWhMGhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMGhjubj)}(hq``unsigned int flags`` flags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transfer h](j)}(h``unsigned int flags``h]j)}(hj{h]hunsigned int flags}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMIhjuubj)}(hhh]j\)}(hYflags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transferh](hflags such as }(hjhhhNhNubj)}(h``SERIO_PARITY``h]h SERIO_PARITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh or }(hjhhhNhNubj)}(h``SERIO_TIMEOUT``h]h SERIO_TIMEOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& indicating state of the data transfer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMHhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Description**h]j)}(hj۬h]h Description}(hjݬhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj٬ubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMKhjubj\)}(hps2_interrupt() invokes pre-receive handler, optionally handles command acknowledgement and response from the device, and finally passes the data to the main protocol handler for future processing.h]hps2_interrupt() invokes pre-receive handler, optionally handles command acknowledgement and response from the device, and finally passes the data to the main protocol handler for future processing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj{hhhNhNubeh}(h]ps-2-protocol-supportah ]h"]ps/2 protocol supportah$]h&]uh1hhhhhhhhK,ubeh}(h]input-subsystemah ]h"]input subsystemah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj:error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjj8fj5fj~j~jQjNjxjuj j u nametypes}(jj8fj~jQjxj uh}(jhj5fhhhjjjjjgjljjjjjjjjj!j!jp#ju#j&j&jK(jP(j)j)jM+jR+j,j,jI/jN/j2j2j4j4j7j7j8j8j/:j4:j3<j8<j=j=j?j@jAjAj2Dj7DjFjFjHj$HjIjIj!Kj&KjLjLj)Pj.PjQjQjISjNSjUjUj WjWjYjYjN\jS\j+_j0_jHajMajbjbj~j;fjXfj]fjgjgj2jj7jjtkjykjnjnjojojrj$rjtj"tjvjvjwjwjyj!yj|j|jNj~j~j~jujTjqjwjjjbjgjˇjЇjjj5j:j j{jjjjjܖjjwj|jjjSjXjjjjjjj!j&j#j(jOjTu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.