~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 (*stop)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[]; }; **Members** ``upload`` Called to upload an new effect into device ``erase`` Called to erase an effect from device ``playback`` Called to request device to start playing specified effect ``set_gain`` Called to set specified gain ``set_autocenter`` Called to auto-center device ``destroy`` called by input core when parent input device is being destroyed ``stop`` called by input core when parent input device is being unregistered ``private`` driver-specific data, will be freed automatically ``ffbit`` bitmap of force feedback capabilities truly supported by device (not emulated like ones in input_dev->ffbit) ``mutex`` mutex for serializing access to the device ``max_effects`` maximum number of effects supported by device ``effects`` pointer to an array of effects currently loaded into device ``effect_owners`` array of effect owners; when file handle owning an effect gets closed the effect is automatically 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)}(hXgstruct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void (*stop)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[]; };h]hXgstruct ff_device { int (*upload)(struct input_dev *dev, struct ff_effect *effect, struct ff_effect *old); int (*erase)(struct input_dev *dev, int effect_id); int (*playback)(struct input_dev *dev, int effect_id, int value); void (*set_gain)(struct input_dev *dev, u16 gain); void (*set_autocenter)(struct input_dev *dev, u16 magnitude); void (*destroy)(struct ff_device *); void (*stop)(struct ff_device *); void *private; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; struct mutex mutex; int max_effects; struct ff_effect *effects; struct file *effect_owners[]; };}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.hhM0hjzubj)}(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)}(hM``stop`` called by input core when parent input device is being unregistered h](j)}(h``stop``h]j)}(hj"h]hstop}(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\)}(hCcalled by input core when parent input device is being unregisteredh]hCcalled by input core when parent input device is being unregistered}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM#hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hM$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&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM%hjVubj)}(hhh]j\)}(h1driver-specific data, will be freed automaticallyh]h1driver-specific data, will be freed automatically}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjqhM%hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM%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)}(hjh]hffbit}(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\)}(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)}(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)}(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}(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-maximum number of effects supported by deviceh]h-maximum number of effects supported by device}(hj!hhhNhNubah}(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)}(hjAh]heffects}(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\)}(h;pointer to an array of effects currently loaded into deviceh]h;pointer to an array of effects currently loaded into device}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjVhM*hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhM*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)}(hjzh]h effect_owners}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM+hjtubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhM+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.hhM1hhhhubh)}(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}(hj hhhNhNubah}(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}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj&ubah}(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}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j))}(h input_devh]h input_dev}(hjdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjaubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjfmodnameN classnameNjm jp )}js ]j)}jj,sb c.input_eventasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBubeh}(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}(hj hhhNhNubah}(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 }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcodeh]hcode}(hjAhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj>ubj^)}(h int valueh](j )}(hinth]hint}(hjZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjVubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj))}(hvalueh]hvalue}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjVubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj>ubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMwubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}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}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj/hMyhj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hMyhjubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjSh]hunsigned int code}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMzhjMubj)}(hhh]j\)}(h event codeh]h event code}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhhMzhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMzhjubj)}(h!``int value`` value of the event h](j)}(h ``int value``h]j)}(hjh]h int value}(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.chM{hjubj)}(hhh]j\)}(hvalue of the eventh]hvalue of the event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM{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}(hj3hhhNhNubah}(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 }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhjAhMubj#)}(hinput_inject_eventh]j))}(hinput_inject_eventh]hinput_inject_event}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj/hhhjAhMubjX)}(hN(struct input_handle *handle, unsigned int type, unsigned int code, int value)h](j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjlubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j))}(h input_handleh]h input_handle}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjVsbc.input_inject_eventasbuh1hhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj))}(hhandleh]hhandle}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjhubj^)}(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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(htypeh]htype}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjhubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hj3 hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj/ ubj)}(h h]h }(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ ubj )}(hinth]hint}(hjO hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj/ ubj)}(h h]h }(hj] hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ ubj))}(hcodeh]hcode}(hjk hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/ ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjhubj^)}(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]hjhubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj/hhhjAhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj+hhhjAhMubah}(h]j&ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjAhMhj(hhubjW)}(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&]uh1jVhj(hhhjAhMubeh}(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)}(hjD!h]hunsigned int type}(hjF!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.cEhMhj>!ubj)}(hhh]j\)}(htype of the eventh]htype of the event}(hj]!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjY!hMhjZ!ubah}(h]h ]h"]h$]h&]uh1jhj>!ubeh}(h]h ]h"]h$]h&]uh1jhjY!hMhj!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&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjw!ubj)}(hhh]j\)}(h event codeh]h event code}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jhjw!ubeh}(h]h ]h"]h$]h&]uh1jhj!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&]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\)}(hvalue of the eventh]hvalue 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!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}(hj6"hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj2"hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjE"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2"hhhjD"hMubj#)}(hinput_alloc_absinfoh]j))}(hinput_alloc_absinfoh]hinput_alloc_absinfo}(hjW"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjS"ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj2"hhhjD"hMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjs"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjo"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo"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_alloc_absinfoasbuh1hhjo"ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo"ubj))}(hdevh]hdev}(hj"hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjo"ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjk"ubah}(h]h ]h"]h$]h&]j@jAuh1jWhj2"hhhjD"hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj."hhhjD"hMubah}(h]j)"ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjD"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+"hhhjD"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)}(hj7#h]hstruct input_dev *dev}(hj9#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5#ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj1#ubj)}(hhh]j\)}(h)the input device emitting absolute eventsh]h)the input device emitting absolute events}(hjP#hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjL#hMhjM#ubah}(h]h ]h"]h$]h&]uh1jhj1#ubeh}(h]h ]h"]h$]h&]uh1jhjL#hMhj.#ubah}(h]h ]h"]h$]h&]uh1jhj#ubj\)}(h**Description**h]j)}(hjr#h]h Description}(hjt#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp#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.}(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_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&]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_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"hj#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 }(hj2$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hjh]h*}(hj@$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj))}(hdsth]hdst}(hjM$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}(hjf$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjb$ubj)}(h h]h }(hjt$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb$ubj )}(hinth]hint}(hj$hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjb$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb$ubj))}(hdst_axish]hdst_axis}(hj$hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjb$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&]uh1hhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(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.$c.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))}(hsrch]hsrc}(hj*%hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj$ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj#ubj^)}(hunsigned int src_axish](j )}(hunsignedh]hunsigned}(hjC%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj?%ubj)}(h h]h }(hjQ%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?%ubj )}(hinth]hint}(hj_%hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj?%ubj)}(h h]h }(hjm%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?%ubj))}(hsrc_axish]hsrc_axis}(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\)}(h*Copy absinfo from one input_dev to anotherh]h*Copy absinfo from one input_dev to another}(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 *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}(hj8&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4&hMhj5&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj4&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)}(hjX&h]hconst struct input_dev *src}(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\)}(h1Source input device to copy the abs settings fromh]h1Source input device to copy the abs settings from}(hjq&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjm&hMhjn&ubah}(h]h ]h"]h$]h&]uh1jhjR&ubeh}(h]h ]h"]h$]h&]uh1jhjm&hMhj%ubj)}(h@``unsigned int src_axis`` ABS_* value selecting the source axis h](j)}(h``unsigned int src_axis``h]j)}(hj&h]hunsigned int src_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 source axish]h%ABS_* value selecting the source 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%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}(hj2'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}(hjN'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjJ'ubj)}(h h]h }(hj['hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ'ubh)}(hhh]j))}(h input_handleh]h input_handle}(hjl'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hji'ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjn'modnameN classnameNjm jp )}js ]j)}jj4'sbc.input_grab_deviceasbuh1hhjJ'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ'ubj)}(hjh]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ'ubj))}(hhandleh]hhandle}(hj'hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjJ'ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjF'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)}(hjM(h]h Description}(hjO(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK(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.}(hjc(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}(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_release_deviceh]j))}(hinput_release_deviceh]hinput_release_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}(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@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\)}(h!release previously grabbed deviceh]h!release previously grabbed device}(hjR)hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM*hjO)hhubah}(h]h ]h"]h$]h&]uh1jVhj(hhhj(hM*ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj)j|jj)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)}(hjt)h]h Parameters}(hjv)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr)ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM.hjn)ubj)}(hhh]j)}(hB``struct input_handle *handle`` input handle that owns 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.chM+hj)ubj)}(hhh]j\)}(h!input handle that owns the deviceh]h!input handle that owns the device}(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&]uh1jhjn)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-hjn)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,hjn)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}(hj4*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0*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}(hjP*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjL*ubj)}(h h]h }(hj]*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL*ubh)}(hhh]j))}(h input_handleh]h input_handle}(hjn*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjk*ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjp*modnameN classnameNjm jp )}js ]j)}jj6*sbc.input_open_deviceasbuh1hhjL*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL*ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL*ubj))}(hhandleh]hhandle}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjL*ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjH*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)}(hjO+h]h Description}(hjQ+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM+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.}(hje+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}(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_close_deviceh]j))}(hinput_close_deviceh]hinput_close_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}(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@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\)}(hclose input deviceh]hclose input device}(hjT,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM|hjQ,hhubah}(h]h ]h"]h$]h&]uh1jVhj+hhhj+hM|ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jl,j|jl,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)}(hjv,h]h Parameters}(hjx,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt,ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjp,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&]uh1jhjp,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.chMhjp,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~hjp,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}(hj6-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj2-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}(hjR-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjN-ubj)}(h h]h }(hj_-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN-ubj)}(hjh]hstruct}(hjm-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjN-ubj)}(h h]h }(hjz-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN-ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj-ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj-modnameN classnameNjm jp )}js ]j)}jj8-sbc.input_scancode_to_scalarasbuh1hhjN-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN-ubj))}(hkeh]hke}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjN-ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjJ-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]hjJ-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 }(hjN.hhhNhNubh)}(h8:c:type:`struct input_keymap_entry `h]j)}(hjX.h]hstruct input_keymap_entry}(hjZ.hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjV.ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jp )}js ]j-c.input_scancode_to_scalarasbju input_keymap_entryuh1hhjhMwhjN.ubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjK.hhubah}(h]h ]h"]h$]h&]uh1jVhj -hhhj#-hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j.j|j.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)}(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)}(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)}(hj.h]h#const struct input_keymap_entry *ke}(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\)}(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&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj.ubj)}(h^``unsigned int *scancode`` pointer to the location where converted scancode should be stored. h](j)}(h``unsigned int *scancode``h]j)}(hj.h]hunsigned int *scancode}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.ubj)}(hhh]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/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\)}(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)}(hjH/h]hstruct keymap_entry}(hjJ/hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjF/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[hje/hMhj.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}(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_default_setkeycodeh]j))}(hinput_default_setkeycodeh]hinput_default_setkeycode}(hj/hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj/hhhj/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)}jj/sbc.input_default_setkeycodeasbuh1hhj/ubj)}(h h]h }(hj 0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj))}(hdevh]hdev}(hj&0hhhNhNubah}(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}(hj?0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;0ubj)}(h h]h }(hjL0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;0ubj)}(hjh]hstruct}(hjZ0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj;0ubj)}(h h]h }(hjg0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;0ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hjx0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hju0ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjz0modnameN classnameNjm jp )}js ]j0c.input_default_setkeycodeasbuh1hhj;0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;0ubj))}(hkeh]hke}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj;0ubeh}(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*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj))}(h old_keycodeh]h old_keycode}(hj1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj/ubeh}(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\)}(hdefault setkeycode methodh]hdefault setkeycode method}(hj91hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hj61hhubah}(h]h ]h"]h$]h&]uh1jVhj/hhhj/hM$ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jQ1j|jQ1j}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&]uh1jhjY1ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM(hjU1ubj)}(hhh](j)}(hF``struct input_dev *dev`` input device which keymap is being updated. h](j)}(h``struct input_dev *dev``h]j)}(hjz1h]hstruct input_dev *dev}(hj|1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx1ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM%hjt1ubj)}(hhh]j\)}(h+input device which keymap is being updated.h]h+input device which keymap is being updated.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1hM%hj1ubah}(h]h ]h"]h$]h&]uh1jhjt1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM%hjq1ubj)}(h:``const struct input_keymap_entry *ke`` new keymap entry. h](j)}(h'``const struct input_keymap_entry *ke``h]j)}(hj1h]h#const struct input_keymap_entry *ke}(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\)}(hnew keymap entry.h]hnew keymap entry.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj1hM&hj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hM&hjq1ubj)}(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.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2hM'hj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hM'hjq1ubeh}(h]h ]h"]h$]h&]uh1jhjU1ubj\)}(h**Description**h]j)}(hj'2h]h Description}(hj)2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%2ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM)hjU1ubj\)}(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 }(hj=2hhhNhNubh)}(h.:c:type:`input_dev.setkeycode\(\) `h]j)}(hjG2h]hinput_dev.setkeycode()}(hjI2hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjE2ubah}(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(hj=2ubh method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it.}(hj=2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjd2hM(hjU1ubj\)}(hQThe function must be called with :c:type:`input_dev.event_lock ` held.h](h!The function must be called with }(hjo2hhhNhNubh)}(h*:c:type:`input_dev.event_lock `h]j)}(hjy2h]hinput_dev.event_lock}(hj{2hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjw2ubah}(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,hjo2ubh held.}(hjo2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj2hM,hjU1ubj\)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM.hjU1ubj\)}(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/hjU1ubeh}(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}(hj 3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj3ubah}(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}(hj%3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj!3ubj)}(h h]h }(hj23hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!3ubh)}(hhh]j))}(h input_devh]h input_dev}(hjC3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@3ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjE3modnameN classnameNjm jp )}js ]j)}jj 3sbc.input_get_keycodeasbuh1hhj!3ubj)}(h h]h }(hjc3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!3ubj)}(hjh]h*}(hjq3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!3ubj))}(hdevh]hdev}(hj~3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj!3ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj3ubj^)}(hstruct input_keymap_entry *keh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj3ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj3modnameN classnameNjm jp )}js ]j_3c.input_get_keycodeasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj))}(hkeh]hke}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj3ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj3ubeh}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMshj4hhubah}(h]h ]h"]h$]h&]uh1jVhj2hhhj2hMsubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j04j|j04j}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)}(hj:4h]h Parameters}(hj<4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj84ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwhj44ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being queried h](j)}(h``struct input_dev *dev``h]j)}(hjY4h]hstruct input_dev *dev}(hj[4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMthjS4ubj)}(hhh]j\)}(h*input device which keymap is being queriedh]h*input device which keymap is being queried}(hjr4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjn4hMthjo4ubah}(h]h ]h"]h$]h&]uh1jhjS4ubeh}(h]h ]h"]h$]h&]uh1jhjn4hMthjP4ubj)}(h/``struct input_keymap_entry *ke`` keymap entry h](j)}(h!``struct input_keymap_entry *ke``h]j)}(hj4h]hstruct input_keymap_entry *ke}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMuhj4ubj)}(hhh]j\)}(h keymap entryh]h keymap entry}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4hMuhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMuhjP4ubeh}(h]h ]h"]h$]h&]uh1jhj44ubj\)}(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.chMwhj44ubj\)}(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.chMvhj44ubeh}(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}(hj5hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj5hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj!5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj 5hMubj#)}(hinput_set_keycodeh]j))}(hinput_set_keycodeh]hinput_set_keycode}(hj35hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/5ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj5hhhj 5hMubjX)}(h<(struct input_dev *dev, const struct input_keymap_entry *ke)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjO5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjK5ubj)}(h h]h }(hj\5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK5ubh)}(hhh]j))}(h input_devh]h input_dev}(hjm5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjj5ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjo5modnameN classnameNjm jp )}js ]j)}jj55sbc.input_set_keycodeasbuh1hhjK5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK5ubj))}(hdevh]hdev}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjK5ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjG5ubj^)}(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 ]j5c.input_set_keycodeasbuh1hhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hj&6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj))}(hkeh]hke}(hj36hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjG5ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj5hhhj 5hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj 5hhhj 5hMubah}(h]j5ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj 5hMhj5hhubjW)}(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.chMhjZ6hhubah}(h]h ]h"]h$]h&]uh1jVhj5hhhj 5hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{ju6j|ju6j}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)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}6ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjy6ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being updated h](j)}(h``struct input_dev *dev``h]j)}(hj6h]hstruct input_dev *dev}(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\)}(h*input device which keymap is being updatedh]h*input device which keymap is being updated}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubj)}(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}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhjy6ubj\)}(h**Description**h]j)}(hj7h]h Description}(hj7hhhNhNubah}(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.chMhjy6ubj\)}(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.}(hj(7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjy6ubeh}(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}(hjW7hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjS7hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjf7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS7hhhje7hMubj#)}(hinput_reset_deviceh]j))}(hinput_reset_deviceh]hinput_reset_device}(hjx7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjt7ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjS7hhhje7hMubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j))}(h input_devh]h input_dev}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj7ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj7modnameN classnameNjm jp )}js ]j)}jjz7sbc.input_reset_deviceasbuh1hhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]h*}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj))}(hdevh]hdev}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj7ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj7ubah}(h]h ]h"]h$]h&]j@jAuh1jWhjS7hhhje7hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjO7hhhje7hMubah}(h]jJ7ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhje7hMhjL7hhubjW)}(hhh]j\)}(h'reset/restore the state of input deviceh]h'reset/restore the state of input device}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj8hhubah}(h]h ]h"]h$]h&]uh1jVhjL7hhhje7hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j/8j|j/8j}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)}(hj98h]h Parameters}(hj;8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj78ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj38ubj)}(hhh]j)}(hE``struct input_dev *dev`` input device whose state needs to be reset h](j)}(h``struct input_dev *dev``h]j)}(hjX8h]hstruct input_dev *dev}(hjZ8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjR8ubj)}(hhh]j\)}(h*input device whose state needs to be reseth]h*input device whose state needs to be reset}(hjq8hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjm8hMhjn8ubah}(h]h ]h"]h$]h&]uh1jhjR8ubeh}(h]h ]h"]h$]h&]uh1jhjm8hMhjO8ubah}(h]h ]h"]h$]h&]uh1jhj38ubj\)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj38ubj\)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj38ubeh}(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 }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMfubj)}(hjh]h*}(hj&9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMfubj#)}(hinput_allocate_deviceh]j))}(hj9h]hinput_allocate_device}(hj79hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj39ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj8hhhj8hMfubjX)}(h(void)h]j^)}(hvoidh]j )}(hvoidh]hvoid}(hjR9hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjN9ubah}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjJ9ubah}(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}(hj|9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMfhjy9hhubah}(h]h ]h"]h$]h&]uh1jVhj8hhhj8hMfubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j9j|j9j}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)}(hj9h]h Parameters}(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.chMjhj9ubj)}(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.chKhj9ubj)}(hhh]j\)}(h no argumentsh]h no arguments}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubj\)}(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.chKhj9ubj\)}(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.chMghj9ubj\)}(h**NOTE**h]j)}(hj1:h]hNOTE}(hj3: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.chMihj9ubj\)}(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.}(hjG:hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMjhj9ubeh}(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}(hjv:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjr: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&]uh1jhjr:hhhj:hMubh)}(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)}jdevm_input_allocate_devicesbc.devm_input_allocate_deviceasbuh1hhjr:hhhj:hMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr:hhhj:hMubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr:hhhj:hMubj#)}(hdevm_input_allocate_deviceh]j))}(hj:h]hdevm_input_allocate_device}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj:ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjr:hhhj: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 ]j: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}(hjG;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj:ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj:ubah}(h]h ]h"]h$]h&]j@jAuh1jWhjr:hhhj:hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjn:hhhj:hMubah}(h]ji:ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj:hMhjk:hhubjW)}(hhh]j\)}(hallocate managed input deviceh]hallocate managed input device}(hjq;hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjn;hhubah}(h]h ]h"]h$]h&]uh1jVhjk:hhhj:hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j;j|j;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)}(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 device *dev`` device owning the input device being created h](j)}(h``struct device *dev``h]j)}(hj;h]hstruct device *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,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&]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\)}(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.chMhj;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.chMhj;ubj\)}(h**NOTE**h]j)}(hj5<h]hNOTE}(hj7<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3<ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj;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.}(hjK<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_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}(hjz<hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjv<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&]uh1jhjv<hhhj<hMubj#)}(hinput_free_deviceh]j))}(hinput_free_deviceh]hinput_free_device}(hj<hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj<ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjv<hhhj<hMubjX)}(h(struct input_dev *dev)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_free_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@jAuh1jWhjv<hhhj<hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjr<hhhj<hMubah}(h]jm<ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj<hMhjo<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.chMhj7=hhubah}(h]h ]h"]h$]h&]uh1jVhjo<hhhj<hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jR=j|jR=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&]uh1jhjZ=ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjV=ubj)}(hhh]j)}(h/``struct input_dev *dev`` input device to free h](j)}(h``struct input_dev *dev``h]j)}(hj{=h]hstruct input_dev *dev}(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.chMhju=ubj)}(hhh]j\)}(hinput device to freeh]hinput device to free}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhju=ubeh}(h]h ]h"]h$]h&]uh1jhj=hMhjr=ubah}(h]h ]h"]h$]h&]uh1jhjV=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.chMhjV=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.chMhjV=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.chMhjV=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.chMhjV=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.chMhjV=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}(hj1>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}(hjR>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjN>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}(hjn>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjj>ubj)}(h h]h }(hj{>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>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)}jjT>sbc.input_set_timestampasbuh1hhjj>ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj>ubj))}(hdevh]hdev}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjj>ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjf>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 ]j>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]hjf>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}(hj9?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6?hhubah}(h]h ]h"]h$]h&]uh1jVhj&>hhhj?>hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jQ?j|jQ?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&]uh1jhjY?ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjU?ubj)}(hhh](j)}(h<``struct input_dev *dev`` input device to set timestamp for h](j)}(h``struct input_dev *dev``h]j)}(hjz?h]hstruct input_dev *dev}(hj|?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjt?ubj)}(hhh]j\)}(h!input device to set timestamp forh]h!input device to set timestamp for}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhjt?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjq?ubj)}(hR``ktime_t timestamp`` the time at which the event has occurred in CLOCK_MONOTONIC h](j)}(h``ktime_t timestamp``h]j)}(hj?h]hktime_t timestamp}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?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&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjq?ubeh}(h]h ]h"]h$]h&]uh1jhjU?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.chMhjU?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.chMhjU?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.chMhjU?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}(hjF@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjC@ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjH@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 }(hjh@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?@hhhjg@hMubj)}(hjh]h*}(hjv@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?@hhhjg@hMubj#)}(hinput_get_timestamph]j))}(hjd@h]hinput_get_timestamp}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj?@hhhjg@hMubjX)}(h(struct input_dev *dev)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 ]jb@c.input_get_timestampasbuh1hhj@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@jAuh1jWhj?@hhhjg@hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj;@hhhjg@hMubah}(h]j6@ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjg@hMhj8@hhubjW)}(hhh]j\)}(hget timestamp for input eventsh]hget timestamp for input events}(hj#AhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj Ahhubah}(h]h ]h"]h$]h&]uh1jVhj8@hhhjg@hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j;Aj|j;Aj}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)}(hjEAh]h Parameters}(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.chMhj?Aubj)}(hhh]j)}(h=``struct input_dev *dev`` input device to get timestamp from h](j)}(h``struct input_dev *dev``h]j)}(hjdAh]hstruct input_dev *dev}(hjfAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbAubah}(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}(hj}AhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjyAhMhjzAubah}(h]h ]h"]h$]h&]uh1jhj^Aubeh}(h]h ]h"]h$]h&]uh1jhjyAhMhj[Aubah}(h]h ]h"]h$]h&]uh1jhj?Aubj\)}(h**Description**h]j)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?Aubj\)}(h3A valid timestamp is a timestamp of non-zero value.h]h3A valid timestamp is a timestamp of non-zero value.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj?Aubeh}(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}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBubah}(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}(hj!BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjBubj)}(h h]h }(hj.BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j))}(h input_devh]h input_dev}(hj?BhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjevbit.h](j\)}(h**Parameters**h]j)}(hjhCh]h Parameters}(hjjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfCubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hjbCubj)}(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)}(hjCh]hstruct input_dev *dev}(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\)}(h5device that is capable of emitting or accepting eventh]h5device that is capable of emitting or accepting event}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjChM!hjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChM!hj~Cubj)}(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"hj~Cubj)}(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}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjDhM#hjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhM#hj~Cubeh}(h]h ]h"]h$]h&]uh1jhjbCubj\)}(h**Description**h]j)}(hj4Dh]h Description}(hj6DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2Dubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM%hjbCubj\)}(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.}(hjJDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM$hjbCubeh}(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}(hjyDhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjuDhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuDhhhjDhMubj#)}(hinput_enable_softrepeath]j))}(hinput_enable_softrepeath]hinput_enable_softrepeat}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjDubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjuDhhhjDhMubjX)}(h.(struct input_dev *dev, int delay, int period)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(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)}jjDsbc.input_enable_softrepeatasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj))}(hdevh]hdev}(hjEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjDubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjDubj^)}(h int delayh](j )}(hinth]hint}(hj(EhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj$Eubj)}(h h]h }(hj6EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$Eubj))}(hdelayh]hdelay}(hjDEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj$Eubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjDubj^)}(h int periodh](j )}(hinth]hint}(hj]EhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjYEubj)}(h h]h }(hjkEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYEubj))}(hperiodh]hperiod}(hjyEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjYEubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjDubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjuDhhhjDhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjqDhhhjDhMubah}(h]jlDah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjDhMhjnDhhubjW)}(hhh]j\)}(henable software autorepeath]henable software autorepeat}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjEhhubah}(h]h ]h"]h$]h&]uh1jVhjnDhhhjDhMubeh}(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)}(hjFh]h int delay}(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 delayh]h repeat delay}(hj6FhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2FhMhj3Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj2FhMhjEubj)}(h``int period`` repeat period h](j)}(h``int period``h]j)}(hjVFh]h int period}(hjXFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTFubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjPFubj)}(hhh]j\)}(h repeat periodh]h repeat period}(hjoFhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjkFhMhjlFubah}(h]h ]h"]h$]h&]uh1jhjPFubeh}(h]h ]h"]h$]h&]uh1jhjkFhMhjEubeh}(h]h ]h"]h$]h&]uh1jhjEubj\)}(h**Description**h]j)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(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.}(hjFhhhNhNubah}(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}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjGubj)}(h h]h }(hj GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j))}(h input_devh]h input_dev}(hj1GhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj.Gubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj3GmodnameN classnameNjm jp )}js ]j)}jjFsbc.input_register_deviceasbuh1hhjGubj)}(h h]h }(hjQGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hjh]h*}(hj_GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj))}(hdevh]hdev}(hjlGhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjGubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj Gubah}(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}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjGhhubah}(h]h ]h"]h$]h&]uh1jVhjFhhhjFhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jGj|jGj}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)}(hjGh]h Parameters}(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 hjGubj)}(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&]uh1jhjGubj\)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjGubj\)}(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.}(hj(HhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjGubj\)}(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.}(hj7HhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjGubeh}(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}(hjfHhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjbHhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMs ubj)}(h h]h }(hjuHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbHhhhjtHhMs ubj#)}(hinput_unregister_deviceh]j))}(hinput_unregister_deviceh]hinput_unregister_device}(hjHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjHubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjbHhhhjtHhMs ubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(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)}jjHsbc.input_unregister_deviceasbuh1hhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj))}(hdevh]hdev}(hjHhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjHubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjHubah}(h]h ]h"]h$]h&]j@jAuh1jWhjbHhhhjtHhMs ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj^HhhhjtHhMs ubah}(h]jYHah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjtHhMs hj[HhhubjW)}(hhh]j\)}(h'unregister previously registered deviceh]h'unregister previously registered device}(hj&IhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMs hj#Ihhubah}(h]h ]h"]h$]h&]uh1jVhj[HhhhjtHhMs ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j>Ij|j>Ij}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)}(hjHIh]h Parameters}(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.chMw hjBIubj)}(hhh]j)}(h4``struct input_dev *dev`` device to be unregistered h](j)}(h``struct input_dev *dev``h]j)}(hjgIh]hstruct input_dev *dev}(hjiIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMt hjaIubj)}(hhh]j\)}(hdevice to be unregisteredh]hdevice to be unregistered}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj|IhMt hj}Iubah}(h]h ]h"]h$]h&]uh1jhjaIubeh}(h]h ]h"]h$]h&]uh1jhj|IhMt hj^Iubah}(h]h ]h"]h$]h&]uh1jhjBIubj\)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMv hjBIubj\)}(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.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMu hjBIubeh}(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}(hjJhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjJubah}(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}(hj$JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj Jubj)}(h h]h }(hj1JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubh)}(hhh]j))}(h input_handlerh]h input_handler}(hjBJhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj?Jubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjDJmodnameN classnameNjm jp )}js ]j)}jj Jsbc.input_register_handlerasbuh1hhj Jubj)}(h h]h }(hjbJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubj)}(hjh]h*}(hjpJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubj))}(hhandlerh]hhandler}(hj}JhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj Jubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjJubah}(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}(hjJhhhNhNubah}(h]h ]h"]h$]h&]u>h1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjJhhubah}(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 h](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}(hjKhhhNhNubah}(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)}(hj#Kh]h Description}(hj%KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Kubah}(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.}(hj9KhhhNhNubah}(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 hjLQubj\)}(hThis function puts a new input handle onto device's and handler's lists so that events can flow through it once it is opened using input_open_device().h]hThis function puts a new input handle onto device’s and handler’s lists so that events can flow through it once it is opened using input_open_device().}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM= hjLQubj\)}(hGThis function is supposed to be called from handler's connect() method.h]hIThis function is supposed to be called from handler’s connect() method.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMA hjLQubeh}(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}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjQhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMj ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQhhhjRhMj ubj#)}(hinput_unregister_handleh]j))}(hinput_unregister_handleh]hinput_unregister_handle}(hj!RhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjRubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjQhhhjRhMj ubjX)}(h(struct input_handle *handle)h]j^)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hj=RhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj9Rubj)}(h h]h }(hjJRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Rubh)}(hhh]j))}(h input_handleh]h input_handle}(hj[RhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjXRubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj]RmodnameN classnameNjm jp )}js ]j)}jj#Rsbc.input_unregister_handleasbuh1hhj9Rubj)}(h h]h }(hj{RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Rubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Rubj))}(hhandleh]hhandle}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj9Rubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj5Rubah}(h]h ]h"]h$]h&]j@jAuh1jWhjQhhhjRhMj ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjQhhhjRhMj ubah}(h]jQah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjRhMj 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.chMj hjRhhubah}(h]h ]h"]h$]h&]uh1jVhjQhhhjRhMj 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.chMn hjRubj)}(hhh]j)}(h5``struct input_handle *handle`` handle to unregister h](j)}(h``struct input_handle *handle``h]j)}(hjSh]hstruct input_handle *handle}(hjShhhNhNubah}(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.chMk hjRubj)}(hhh]j\)}(hhandle to unregisterh]hhandle to unregister}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjShMk hjSubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjShMk hjRubah}(h]h ]h"]h$]h&]uh1jhjRubj\)}(h**Description**h]j)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Subah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMm 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.}(hjRShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMl 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.}(hjaShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMo 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}(hjShhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjShhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShM ubj#)}(hinput_get_new_minorh]j))}(hinput_get_new_minorh]hinput_get_new_minor}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjSubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjShhhjShM 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}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj )}(hinth]hint}(hjThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjSubj)}(h h]h }(hj,ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj))}(h legacy_numh]h legacy_num}(hj:ThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjSubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjSubj^)}(hbool allow_dynamich](j )}(hboolh]hbool}(hjSThhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjOTubj)}(h h]h }(hjaThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOTubj))}(h allow_dynamich]h allow_dynamic}(hjoThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjOTubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjSubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjShhhjShM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjShhhjShM ubah}(h]jSah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjShM hjShhubjW)}(hhh]j\)}(h"allocates a new input minor numberh]h"allocates a new input minor number}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjThhubah}(h]h ]h"]h$]h&]uh1jVhjShhhjShM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jTj|jTj}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 hjTubj)}(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)}(hjUh]hunsigned int legacy_num}(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\)}(hsize of legacy rangeh]hsize of legacy 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 hjTubj)}(hJ``bool allow_dynamic`` whether we can also take ID from the dynamic range h](j)}(h``bool allow_dynamic``h]j)}(hjLUh]hbool allow_dynamic}(hjNUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJUubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjFUubj)}(hhh]j\)}(h2whether we can also take ID from the dynamic rangeh]h2whether we can also take ID from the dynamic range}(hjeUhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjaUhM hjbUubah}(h]h ]h"]h$]h&]uh1jhjFUubeh}(h]h ]h"]h$]h&]uh1jhjaUhM hjTubeh}(h]h ]h"]h$]h&]uh1jhjTubj\)}(h**Description**h]j)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjTubj\)}(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 }(hjUhhhNhNubj)}(h**legacy_base**h]h legacy_base}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh and }(hjUhhhNhNubj)}(h**legacy_num**h]h legacy_num}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubhh parameters and whether ID can be allocated from dynamic range if there are no free IDs in legacy range.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjTubeh}(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}(hjVhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj Vubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjUhhhjUhM ubjX)}(h(unsigned int minor)h]j^)}(hunsigned int minorh](j )}(hunsignedh]hunsigned}(hj-VhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj)Vubj)}(h h]h }(hj;VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Vubj )}(hinth]hint}(hjIVhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj)Vubj)}(h h]h }(hjWVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)Vubj))}(hminorh]hminor}(hjeVhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj)Vubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj%Vubah}(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}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjVhhubah}(h]h ]h"]h$]h&]uh1jVhjUhhhjUhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jVj|jVj}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)}(hjVh]h Parameters}(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 hjVubj)}(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&]uh1jhjVubj\)}(h**Description**h]j)}(hj Wh]h Description}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Wubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjVubj\)}(hWThis function releases previously allocated input minor so that it can be reused later.h]hWThis function releases previously allocated input minor so that it can be reused later.}(hj!WhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjVubeh}(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}(hjPWhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjLWhhhX/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&]uh1jhjLWhhhj^WhKVubj#)}(hinput_ff_uploadh]j))}(hinput_ff_uploadh]hinput_ff_upload}(hjqWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjmWubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjLWhhhj^WhKVubjX)}(hD(struct input_dev *dev, struct ff_effect *effect, struct file *file)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}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjWmodnameN classnameNjm jp )}js ]j)}jjsWsbc.input_ff_uploadasbuh1hhjWubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj))}(hdevh]hdev}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjWubj^)}(hstruct ff_effect *effecth](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjWubj)}(h h]h }(hj XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubh)}(hhh]j))}(h ff_effecth]h ff_effect}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjXubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjXmodnameN classnameNjm jp )}js ]jWc.input_ff_uploadasbuh1hhjWubj)}(h h]h }(hj;XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hjh]h*}(hjIXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj))}(heffecth]heffect}(hjVXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjWubj^)}(hstruct file *fileh](j)}(hjh]hstruct}(hjoXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkXubj)}(h h]h }(hj|XhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkXubh)}(hhh]j))}(hfileh]hfile}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjXubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjXmodnameN classnameNjm jp )}js ]jWc.input_ff_uploadasbuh1hhjkXubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkXubj)}(hjh]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkXubj))}(hfileh]hfile}(hjXhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjkXubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjWubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjLWhhhj^WhKVubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjHWhhhj^WhKVubah}(h]jCWah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj^WhKVhjEWhhubjW)}(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&]uh1jVhjEWhhhj^WhKVubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jYj|jYj}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)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKZhj Yubj)}(hhh](j)}(h'``struct input_dev *dev`` input device h](j)}(h``struct input_dev *dev``h]j)}(hj1Yh]hstruct input_dev *dev}(hj3YhhhNhNubah}(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.chKWhj+Yubj)}(hhh]j\)}(h input deviceh]h input device}(hjJYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjFYhKWhjGYubah}(h]h ]h"]h$]h&]uh1jhj+Yubeh}(h]h ]h"]h$]h&]uh1jhjFYhKWhj(Yubj)}(h3``struct ff_effect *effect`` effect to be uploaded h](j)}(h``struct ff_effect *effect``h]j)}(hjjYh]hstruct ff_effect *effect}(hjlYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhYubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKXhjdYubj)}(hhh]j\)}(heffect to be uploadedh]heffect to be uploaded}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjYhKXhjYubah}(h]h ]h"]h$]h&]uh1jhjdYubeh}(h]h ]h"]h$]h&]uh1jhjYhKXhj(Yubj)}(h)``struct file *file`` owner of the effecth](j)}(h``struct file *file``h]j)}(hjYh]hstruct file *file}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKZhjYubj)}(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&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjYhKZhj(Yubeh}(h]h ]h"]h$]h&]uh1jhj Yubeh}(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 }(hj ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhj ZhKubj#)}(hinput_ff_eraseh]j))}(hinput_ff_eraseh]hinput_ff_erase}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjYhhhj ZhKubjX)}(h9(struct input_dev *dev, int effect_id, struct file *file)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj:ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj6Zubj)}(h h]h }(hjGZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Zubh)}(hhh]j))}(h input_devh]h input_dev}(hjXZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjUZubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjZZmodnameN classnameNjm jp )}js ]j)}jj Zsbc.input_ff_eraseasbuh1hhj6Zubj)}(h h]h }(hjxZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Zubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Zubj))}(hdevh]hdev}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj6Zubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj2Zubj^)}(h int effect_idh](j )}(hinth]hint}(hjZhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjZubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj))}(h effect_idh]h effect_id}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj2Zubj^)}(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 reftargetj[modnameN classnameNjm jp )}js ]jtZc.input_ff_eraseasbuh1hhjZubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hjh]h*}(hj+[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj))}(hfileh]hfile}(hj8[hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj2Zubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjYhhhj ZhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjYhhhj ZhKubah}(h]jYah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj ZhKhjYhhubjW)}(hhh]j\)}(h)erase a force-feedback effect from deviceh]h)erase a force-feedback effect from device}(hjb[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&]uh1jVhjYhhhj ZhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jz[j|jz[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)}(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 erase effect from h](j)}(h``struct input_dev *dev``h]j)}(hj[h]hstruct input_dev *dev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj[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&]uh1jhj[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&]uh1jhj~[ubj\)}(h**Description**h]j)}(hjP\h]h Description}(hjR\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN\ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj~[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.}(hjf\hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj~[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&]uh1jhj\hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhj\hKubj#)}(hinput_ff_eventh]j))}(hinput_ff_eventh]hinput_ff_event}(hj\hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj\ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj\hhhj\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}(hjD]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@]ubj)}(h h]h }(hjR]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@]ubj )}(hinth]hint}(hj`]hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj@]ubj)}(h h]h }(hjn]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@]ubj))}(htypeh]htype}(hj|]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&]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))}(hcodeh]hcode}(hj]hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj]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@jAuh1jWhj\hhhj\hKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj\hhhj\hKubah}(h]j\ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj\hKhj\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&]uh1jVhj\hhhj\hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jD^j|jD^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)}(hjN^h]h Parameters}(hjP^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL^ubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjH^ubj)}(hhh](j)}(h=``struct input_dev *dev`` input device to send the effect to h](j)}(h``struct input_dev *dev``h]j)}(hjm^h]hstruct input_dev *dev}(hjo^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk^ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhjg^ubj)}(hhh]j\)}(h"input device to send the effect toh]h"input device to send the effect to}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj^hKhj^ubah}(h]h ]h"]h$]h&]uh1jhjg^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjd^ubj)}(hA``unsigned int type`` event type (anything but EV_FF is ignored) 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&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chKhj^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&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hKhjd^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^hKhjd^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}(hj1_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-_hKhjd^ubeh}(h]h ]h"]h$]h&]uh1jhjH^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}(hjr_hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjn_hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn_hhhj_hMubj#)}(hinput_ff_createh]j))}(hinput_ff_createh]hinput_ff_create}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj_ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjn_hhhj_hMubjX)}(h1(struct input_dev *dev, unsigned int max_effects)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_createasbuh1hhj_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 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 }(hjK`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj))}(h max_effectsh]h max_effects}(hjY`hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj`ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj_ubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjn_hhhj_hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjj_hhhj_hMubah}(h]je_ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj_hMhjg_hhubjW)}(hhh]j\)}(hcreate force-feedback deviceh]hcreate force-feedback device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jVhjg_hhhj_hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j`j|j`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)}(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.chMhj`ubj)}(hhh](j)}(hA``struct input_dev *dev`` input device supporting force-feedback h](j)}(h``struct input_dev *dev``h]j)}(hj`h]hstruct input_dev *dev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj`ubj)}(hhh]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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjahMhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`ubj\)}(h**Description**h]j)}(hj8ah]h Description}(hj:ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6aubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj`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. }(hjNahhhNhNubj)}(h**dev->ffbit**h]h dev->ffbit}(hjVahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNaubh 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}(hjNahhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj`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}(hjahhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjahhhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMPubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjahMPubj#)}(hinput_ff_destroyh]j))}(hinput_ff_destroyh]hinput_ff_destroy}(hjahhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjaubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjahhhjahMPubjX)}(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)}jjasbc.input_ff_destroyasbuh1hhjaubj)}(h h]h }(hj bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj))}(hdevh]hdev}(hj%bhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjaubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjaubah}(h]h ]h"]h$]h&]j@jAuh1jWhjahhhjahMPubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjahhhjahMPubah}(h]jaah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjahMPhjahhubjW)}(hhh]j\)}(h,frees force feedback portion of input deviceh]h,frees force feedback portion of input device}(hjObhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMPhjLbhhubah}(h]h ]h"]h$]h&]uh1jVhjahhhjahMPubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jgbj|jgbj}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)}(hjqbh]h Parameters}(hjsbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjobubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMThjkbubj)}(hhh]j)}(hA``struct input_dev *dev`` input device supporting force feedback h](j)}(h``struct input_dev *dev``h]j)}(hjbh]hstruct input_dev *dev}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMQhjbubj)}(hhh]j\)}(h&input device supporting force feedbackh]h&input device supporting force feedback}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjbhMQhjbubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhjbhMQhjbubah}(h]h ]h"]h$]h&]uh1jhjkbubj\)}(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.chMShjkbubj\)}(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.chMRhjkbubeh}(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}(hjchhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj chhh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj chhhjchMubj#)}(hinput_ff_create_memlessh]j))}(hinput_ff_create_memlessh]hinput_ff_create_memless}(hj1chhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj-cubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj chhhjchMubjX)}(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}(hjMchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjIcubj)}(h h]h }(hjZchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIcubh)}(hhh]j))}(h input_devh]h input_dev}(hjkchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjhcubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmcmodnameN classnameNjm jp )}js ]j)}jj3csbc.input_ff_create_memlessasbuh1hhjIcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIcubj))}(hdevh]hdev}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjIcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjEcubj^)}(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]hjEcubj^)}(h?int (*play_effect)(struct input_dev*, void*, struct ff_effect*)h](j )}(hinth]hint}(hjdhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjMh]h(}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hj*dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj))}(h play_effecth]h play_effect}(hj7dhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubj)}(hj!Nh]h)}(hjEdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjMh]h(}(hjRdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]hstruct}(hj_dhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjcubj)}(h h]h }(hjldhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j))}(h input_devh]h input_dev}(hj}dhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzdubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjdmodnameN classnameNjm jp )}js ]jcc.input_ff_create_memlessasbuh1hhjcubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjNh]h,}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjdhhhNhNubah}(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)}(hjNh]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 }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j))}(h ff_effecth]h ff_effect}(hjehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjeubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjemodnameN classnameNjm jp )}js ]jcc.input_ff_create_memlessasbuh1hhjcubj)}(hjh]h*}(hj5ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hj!Nh]h)}(hjBehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjEcubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj chhhjchMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjchhhjchMubah}(h]jcah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjchMhjchhubjW)}(hhh]j\)}(h'create memoryless force-feedback deviceh]h'create memoryless force-feedback device}(hjkehhhNhNubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjhehhubah}(h]h ]h"]h$]h&]uh1jVhjchhhjchMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jej|jej}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)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjeubj)}(hhh](j)}(hA``struct input_dev *dev`` input device supporting force-feedback 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&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjeubj)}(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&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjeubj)}(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}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1j[hjehMhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMhjeubj)}(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)}(hj,fh]hBint (*play_effect)(struct input_dev *, void *, struct ff_effect *)}(hj.fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*fubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhj&fubj)}(hhh]j\)}(h,driver-specific method for playing FF effecth]h,driver-specific method for playing FF effect}(hjEfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjBfubah}(h]h ]h"]h$]h&]uh1jhj&fubeh}(h]h ]h"]h$]h&]uh1jhjAfhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubeh}(h] input-coreah ]h"] input coreah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hMultitouch Libraryh]hMultitouch Library}(hjxfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjufhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt_slot (C struct)c.input_mt_slothNtauh1hhjufhhhNhNubh)}(hhh](h)}(h input_mt_sloth]h)}(hstruct input_mt_sloth](j)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjfhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjfhKubj#)}(h input_mt_sloth]j))}(hjfh]h input_mt_slot}(hjfhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjfubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjfhhhjfhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjfhhhjfhKubah}(h]jfah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjfhKhjfhhubjW)}(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&]uh1jVhjfhhhjfhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jfj|jfj}j~juh1hhhhjufhNhNubj)}(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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh:}(hjghhhNhNubeh}(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; };}hjgsbah}(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)}(hj/gh]hMembers}(hj1ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-gubah}(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)}(hjNgh]habs}(hjPghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjHgubj)}(hhh]j\)}(h1holds current values of ABS_MT axes for this sloth]h1holds current values of ABS_MT axes for this slot}(hjgghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjcghKhjdgubah}(h]h ]h"]h$]h&]uh1jhjHgubeh}(h]h ]h"]h$]h&]uh1jhjcghKhjEgubj)}(hF``frame`` last frame at which input_mt_report_slot_state() was called h](j)}(h ``frame``h]j)}(hjgh]hframe}(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;last frame at which input_mt_report_slot_state() was calledh]h;last frame at which input_mt_report_slot_state() was called}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjghKhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghKhjEgubj)}(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&]uh1jhjghKhjEgubeh}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjufhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt (C struct) c.input_mthNtauh1hhjufhhhNhNubh)}(hhh](h)}(hinput_mth]h)}(hstruct input_mth](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK!ubj)}(h h]h }(hj(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhj'hhK!ubj#)}(hinput_mth]j))}(hjhh]hinput_mt}(hj:hhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj6hubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhhj'hhK!ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhhj'hhK!ubah}(h]j hah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj'hhK!hjhhhubjW)}(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#hjYhhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhhj'hhK!ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jthj|jthj}j~juh1hhhhjufhNhNubj)}(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}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|hubh:}(hj|hhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK'hjxhubj)}(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[]; };}hjhsbah}(h]h ]h"]h$]h&]j@jAuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK)hjxhubj\)}(h **Members**h]j)}(hjhh]hMembers}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK3hjxhubj)}(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)}(hjih]h num_slots}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(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}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK&hjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihK&hjhubj)}(h-``slot`` MT slot currently being transmitted h](j)}(h``slot``h]j)}(hj;ih]hslot}(hj=ihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9iubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK'hj5iubj)}(hhh]j\)}(h#MT slot currently being transmittedh]h#MT slot currently being transmitted}(hjTihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjPihK'hjQiubah}(h]h ]h"]h$]h&]uh1jhj5iubeh}(h]h ]h"]h$]h&]uh1jhjPihK'hjhubj)}(h#``flags`` input_mt operation flags h](j)}(h ``flags``h]j)}(hjtih]hflags}(hjvihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjriubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK(hjniubj)}(hhh]j\)}(hinput_mt operation flagsh]hinput_mt operation flags}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK(hjiubah}(h]h ]h"]h$]h&]uh1jhjniubeh}(h]h ]h"]h$]h&]uh1jhjihK(hjhubj)}(h?``frame`` increases every time input_mt_sync_frame() is called h](j)}(h ``frame``h]j)}(hjih]hframe}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK)hjiubj)}(hhh]j\)}(h4increases every time input_mt_sync_frame() is calledh]h4increases every time input_mt_sync_frame() is called}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK)hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihK)hjhubj)}(h3``red`` reduced cost matrix for in-kernel tracking h](j)}(h``red``h]j)}(hjih]hred}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK*hjiubj)}(hhh]j\)}(h*reduced cost matrix for in-kernel trackingh]h*reduced cost matrix for in-kernel tracking}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK*hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjihK*hjhubj)}(hC``slots`` array of slots holding current values of tracked contactsh](j)}(h ``slots``h]j)}(hjjh]hslots}(hj!jhhhNhNubah}(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.hhK*hjjubj)}(hhh]j\)}(h9array of slots holding current values of tracked contactsh]h9array of slots holding current values of tracked contacts}(hj8jhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK+hj5jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhj4jhK*hjhubeh}(h]h ]h"]h$]h&]uh1jhjxhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjufhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt_pos (C struct)c.input_mt_poshNtauh1hhjufhhhNhNubh)}(hhh](h)}(h input_mt_posh]h)}(hstruct input_mt_posh](j)}(hjh]hstruct}(hjyjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjujhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK1ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjujhhhjjhK1ubj#)}(h input_mt_posh]j))}(hjsjh]h input_mt_pos}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjujhhhjjhK1ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjqjhhhjjhK1ubah}(h]jljah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjjhK1hjnjhhubjW)}(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.hhKthjjhhubah}(h]h ]h"]h$]h&]uh1jVhjnjhhhjjhK1ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jjj|jjj}j~juh1hhhhjufhNhNubj)}(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)}(hj kh]hMembers}(hj khhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(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)}(hj(kh]hx}(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\)}(hhorizontal coordinateh]hhorizontal coordinate}(hjAkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj=khKvhj>kubah}(h]h ]h"]h$]h&]uh1jhj"kubeh}(h]h ]h"]h$]h&]uh1jhj=khKvhjkubj)}(h``y`` vertical coordinateh](j)}(h``y``h]j)}(hjakh]hy}(hjckhhhNhNubah}(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}(hjzkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKwhjwkubah}(h]h ]h"]h$]h&]uh1jhj[kubeh}(h]h ]h"]h$]h&]uh1jhjvkhKvhjkubeh}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjufhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_mt_init_slots (C function)c.input_mt_init_slotshNtauh1hhjufhhhNhNubh)}(hhh](h)}(h[int input_mt_init_slots (struct input_dev *dev, unsigned int num_slots, unsigned int flags)h]h)}(hZint input_mt_init_slots(struct input_dev *dev, unsigned int num_slots, unsigned int flags)h](j )}(hinth]hint}(hjkhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjkhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhKubj#)}(hinput_mt_init_slotsh]j))}(hinput_mt_init_slotsh]hinput_mt_init_slots}(hjkhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjkubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjkhhhjkhKubjX)}(hC(struct input_dev *dev, unsigned int num_slots, unsigned int flags)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j))}(h input_devh]h input_dev}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjlmodnameN classnameNjm jp )}js ]j)}jjksbc.input_mt_init_slotsasbuh1hhjkubj)}(h h]h }(hj6lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h*}(hjDlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj))}(hdevh]hdev}(hjQlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjkubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjkubj^)}(hunsigned int num_slotsh](j )}(hunsignedh]hunsigned}(hjjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjflubj)}(h h]h }(hjxlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjflubj )}(hinth]hint}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjflubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjflubj))}(h num_slotsh]h num_slots}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjflubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjkubj^)}(hunsigned int flagsh](j )}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj )}(hinth]hint}(hjlhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj))}(hflagsh]hflags}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjkubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjkhhhjkhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjkhhhjkhKubah}(h]jkah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjkhKhjkhhubjW)}(hhh]j\)}(hinitialize MT input slotsh]hinitialize MT input slots}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmhhubah}(h]h ]h"]h$]h&]uh1jVhjkhhhjkhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j5mj|j5mj}j~juh1hhhhjufhNhNubj)}(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)}(hj?mh]h Parameters}(hjAmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=mubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj9mubj)}(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.chKhjXmubj)}(hhh]j\)}(h5input device supporting MT events and finger trackingh]h5input device supporting MT events and finger tracking}(hjwmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjsmhKhjtmubah}(h]h ]h"]h$]h&]uh1jhjXmubeh}(h]h ]h"]h$]h&]uh1jhjsmhKhjUmubj)}(h>``unsigned int num_slots`` number of slots used by the device h](j)}(h``unsigned int num_slots``h]j)}(hjmh]hunsigned int num_slots}(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\)}(h"number of slots used by the deviceh]h"number of slots used by the device}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjUmubj)}(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&]uh1jhjmhKhjUmubeh}(h]h ]h"]h$]h&]uh1jhj9mubj\)}(h**Description**h]j)}(hj nh]h Description}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj nubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj9mubj\)}(hXThis function allocates all necessary memory for MT slot handling in the input device, prepares the ABS_MT_SLOT and ABS_MT_TRACKING_ID events for use and sets up appropriate buffers. Depending on the flags set, it also performs pointer emulation and frame synchronization.h]hXThis function allocates all necessary memory for MT slot handling in the input device, prepares the ABS_MT_SLOT and ABS_MT_TRACKING_ID events for use and sets up appropriate buffers. Depending on the flags set, it also performs pointer emulation and frame synchronization.}(hj!nhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhj9mubj\)}(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.}(hj0nhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK#hj9mubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjufhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#input_mt_destroy_slots (C function)c.input_mt_destroy_slotshNtauh1hhjufhhhNhNubh)}(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 }(hjnnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[nhhhjmnhKiubj#)}(hinput_mt_destroy_slotsh]j))}(hinput_mt_destroy_slotsh]hinput_mt_destroy_slots}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj|nubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj[nhhhjmnhKiubjX)}(h(struct input_dev *dev)h]j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubh)}(hhh]j))}(h input_devh]h input_dev}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjnmodnameN classnameNjm jp )}js ]j)}jjnsbc.input_mt_destroy_slotsasbuh1hhjnubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj))}(hdevh]hdev}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjnubah}(h]h ]h"]h$]h&]j@jAuh1jWhj[nhhhjmnhKiubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjWnhhhjmnhKiubah}(h]jRnah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjmnhKihjTnhhubjW)}(hhh]j\)}(h&frees the MT slots of the input deviceh]h&frees the MT slots of the input device}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKihjohhubah}(h]h ]h"]h$]h&]uh1jVhjTnhhhjmnhKiubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j7oj|j7oj}j~juh1hhhhjufhNhNubj)}(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)}(hjAoh]h Parameters}(hjCohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?oubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKmhj;oubj)}(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}(hjbohhhNhNubah}(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.chKjhjZoubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjyohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjuohKjhjvoubah}(h]h ]h"]h$]h&]uh1jhjZoubeh}(h]h ]h"]h$]h&]uh1jhjuohKjhjWoubah}(h]h ]h"]h$]h&]uh1jhj;oubj\)}(h**Description**h]j)}(hjoh]h Description}(hjohhhNhNubah}(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.chKlhj;oubj\)}(hThis function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.h]hThis function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKkhj;oubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjufhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'input_mt_report_slot_state (C function)c.input_mt_report_slot_statehNtauh1hhjufhhhNhNubh)}(hhh](h)}(h\bool input_mt_report_slot_state (struct input_dev *dev, unsigned int tool_type, bool active)h]h)}(h[bool input_mt_report_slot_state(struct input_dev *dev, unsigned int tool_type, bool active)h](j )}(hjUTh]hbool}(hjohhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjohhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKzubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjohKzubj#)}(hinput_mt_report_slot_stateh]j))}(hinput_mt_report_slot_stateh]hinput_mt_report_slot_state}(hjphhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjoubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjohhhjohKzubjX)}(h<(struct input_dev *dev, unsigned int tool_type, bool active)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjpubj)}(h h]h }(hj)phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubh)}(hhh]j))}(h input_devh]h input_dev}(hj:phhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj7pubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjReturns 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.chMhjv{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjufhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%input_mt_get_slot_by_key (C function)c.input_mt_get_slot_by_keyhNtauh1hhjufhhhNhNubh)}(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 ](j;j<eh"]h$]h&]j@jAuh1j"hj}hhhj+}hMubjX)}(h (struct input_dev *dev, int key)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjZ}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjV}ubj)}(h h]h }(hjg}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV}ubh)}(hhh]j))}(h input_devh]h input_dev}(hjx}hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hju}ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjz}modnameN classnameNjm jp )}js ]j)}jj@}sbc.input_mt_get_slot_by_keyasbuh1hhjV}ubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV}ubj)}(hjh]h*}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV}ubj))}(hdevh]hdev}(hj}hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjV}ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjR}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]hjR}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~juh1hhhhjufhNhNubj)}(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)}(hj4~h]h Parameters}(hj6~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2~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)}(hjS~h]hstruct input_dev *dev}(hjU~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ~ubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhjM~ubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjl~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjh~hMhji~ubah}(h]h ]h"]h$]h&]uh1jhjM~ubeh}(h]h ]h"]h$]h&]uh1jhjh~hMhjJ~ubj)}(h'``int key`` the key of the sought slot h](j)}(h ``int key``h]j)}(hj~h]hint key}(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 key of the sought sloth]hthe key of the sought slot}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhj~hMhjJ~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&]uh1jhjufhhhNhNubeh}(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}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhjBhKubj#)}(hmatrix_keymap_datah]j))}(hj/h]hmatrix_keymap_data}(hjUhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjQubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj1hhhjBhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj-hhhjBhKubah}(h]j'ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjBhKhj*hhubjW)}(hhh]j\)}(hkeymap for matrix keyboardsh]hkeymap for matrix keyboards}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjthhubah}(h]h ]h"]h$]h&]uh1jVhj*hhhjBhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjubj)}(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; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjubj\)}(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#hjubj)}(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}(hj hhhNhNubah}(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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhj)hNubj\)}(h**Description**h]j)}(hjah]h Description}(hjchhhNhNubah}(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.}(hjwhhhNhNubah}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK#ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkey_entry (C struct) c.key_entryhNtauh1hhjhhhd/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&]uh1hhjhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKubj)}(h h]h }(hjǀhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjƀhKubj#)}(h key_entryh]j))}(hjh]h key_entry}(hjـhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjՀubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjƀhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjƀhKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjƀhKhjhhubjW)}(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&]uh1jVhjhhhjƀhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhjhNubj)}(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.hhKhjubj)}(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; }; };}hj8sbah}(h]h ]h"]h$]h&]j@jAuh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj\)}(h **Members**h]j)}(hjIh]hMembers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhK#hjubj)}(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)}(hjhh]htype}(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\)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1jhj}hKhj_ubj)}(h<``code`` Device-specific data identifying the button/switch h](j)}(h``code``h]j)}(hjh]hcode}(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\)}(h2Device-specific data identifying the button/switchh]h2Device-specific data identifying the button/switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj_ubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjہh]h{unnamed_union}}(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 anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjՁubeh}(h]h ]h"]h$]h&]uh1jhjhKhj_ubj)}(h0``keycode`` KEY_* code assigned to a key/button h](j)}(h ``keycode``h]j)}(hjh]hkeycode}(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#KEY_* code assigned to a key/buttonh]h#KEY_* code assigned to a key/button}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj)hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj_ubj)}(h7``sw`` struct with code/value used by KE_SW and KE_VSW h](j)}(h``sw``h]j)}(hjMh]hsw}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjGubj)}(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}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjbhKhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhj_ubj)}(h+``sw.code`` SW_* code assigned to a switch h](j)}(h ``sw.code``h]j)}(hjh]hsw.code}(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\)}(hSW_* code assigned to a switchh]hSW_* code assigned to a switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj_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.}(hj؂hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjՂubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjԂhKhj_ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjhhubj\)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.sparse_keymap_entry_from_scancode (C function)#c.sparse_keymap_entry_from_scancodehNtauh1hhjhhhNhNubh)}(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}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj<hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK7ubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhK7ubh)}(hhh]j))}(h key_entryh]h key_entry}(hj_hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj\ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjamodnameN classnameNjm jp )}js ]j)}j!sparse_keymap_entry_from_scancodesb#c.sparse_keymap_entry_from_scancodeasbuh1hhj<hhhjMhK7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhK7ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhjMhK7ubj#)}(h!sparse_keymap_entry_from_scancodeh]j))}(hj}h]h!sparse_keymap_entry_from_scancode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj<hhhjMhK7ubjX)}(h*(struct input_dev *dev, unsigned int code)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}(hj؃hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjՃubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjڃmodnameN classnameNjm jp )}js ]j{#c.sparse_keymap_entry_from_scancodeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj )}(hinth]hint}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj))}(hcodeh]hcode}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj&ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj<hhhjMhK7ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj8hhhjMhK7ubah}(h]j3ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjMhK7hj5hhubjW)}(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.chK7hjhhubah}(h]h ]h"]h$]h&]uh1jVhj5hhhjMhK7ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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)}(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.chK;hjubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hj̈́h]hstruct input_dev *dev}(hjτhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˄ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK8hjDŽubj)}(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&]uh1jhjDŽubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjĄubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hjh]hunsigned int code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK9hjubj)}(hhh]j\)}(h Scan codeh]h Scan code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjĄubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(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.chK;hjubj\)}(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 }(hjWhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjah]hstruct key_entry}(hjchhhNhNubah}(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:hjWubh/ lookup in an input device using sparse keymap.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj~hK:hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-sparse_keymap_entry_from_keycode (C function)"c.sparse_keymap_entry_from_keycodehNtauh1hhjhhhNhNubh)}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKLubh)}(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_keycodesb"c.sparse_keymap_entry_from_keycodeasbuh1hhjhhhjhKLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKLubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKLubj#)}(h sparse_keymap_entry_from_keycodeh]j))}(hjh]h sparse_keymap_entry_from_keycode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKLubjX)}(h-(struct input_dev *dev, unsigned int keycode)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjAhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjCmodnameN classnameNjm jp )}js ]j"c.sparse_keymap_entry_from_keycodeasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjzhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int keycodeh](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))}(hkeycodeh]hkeycode}(hjˆhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhKLubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhKLubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKLhjhhubjW)}(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&]uh1jVhjhhhjhKLubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j j|j j}j~juh1hhhhjhNhNubj)}(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)}(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.chKPhjubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hj6h]hstruct input_dev *dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKMhj0ubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjKhKMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhKMhj-ubj)}(h"``unsigned int keycode`` Key code h](j)}(h``unsigned int keycode``h]j)}(hjoh]hunsigned int keycode}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKNhjiubj)}(hhh]j\)}(hKey codeh]hKey code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKNhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhKNhj-ubeh}(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[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKPhjubj\)}(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.chKOhjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhKOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sparse_keymap_setup (C function)c.sparse_keymap_setuphNtauh1hhjhhhNhNubh)}(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}(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_setuph]j))}(hsparse_keymap_setuph]hsparse_keymap_setup}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj/ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj hKubjX)}(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}(hjOhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j))}(h input_devh]h input_dev}(hjmhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjomodnameN classnameNjm jp )}js ]j)}jj5sbc.sparse_keymap_setupasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjKubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjGubj^)}(hconst struct key_entry *keymaph](j)}(hj$h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(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 ]jc.sparse_keymap_setupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hkeymaph]hkeymap}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjGubj^)}(h2int (*setup)(struct input_dev*, struct key_entry*)h](j )}(hinth]hint}(hjLhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjHubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjMh]h(}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj))}(hsetuph]hsetup}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjHubj)}(hj!Nh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjMh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j))}(h input_devh]h input_dev}(hjȉhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjʼnubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjʉmodnameN classnameNjm jp )}js ]jc.sparse_keymap_setupasbuh1hhjHubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjNh]h,}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(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 ]jc.sparse_keymap_setupasbuh1hhjHubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hj!Nh]h)}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjGubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhj hKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj hhhj hKubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj hKhjhhubjW)}(hhh]j\)}(h(set up sparse keymap for an input deviceh]h(set up sparse keymap for an input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj}hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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)}(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)}(h'``struct input_dev *dev`` Input device h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(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 Input deviceh]h Input device}(hjڊhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj֊hKhj׊ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj֊hKhjubj)}(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}(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[Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entryh](hKeymap in form of array of }(hjhhhNhNubh)}(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.chKhjubh structures ending with }(hjhhhNhNubj)}(h ``KE_END``h]hKE_END}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh type entry}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj:hKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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)}(hjih]h4int (*setup)(struct input_dev *, struct key_entry *)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjcubj)}(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 }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKhjubeh}(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[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj\)}(hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.h]hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.}(hjɋhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sparse_keymap_report_entry (C function)c.sparse_keymap_report_entryhNtauh1hhjhhhNhNubh)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj#)}(hsparse_keymap_report_entryh]j))}(hsparse_keymap_report_entryh]hsparse_keymap_report_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKubjX)}(hY(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h](j^)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j))}(h input_devh]h input_dev}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjUmodnameN classnameNjm jp )}js ]j)}jjsbc.sparse_keymap_report_entryasbuh1hhj1ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubj^)}(hconst struct key_entry *keh](j)}(hj$h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjŒhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjόhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj݌ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]joc.sparse_keymap_report_entryasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hkeh]hke}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubj^)}(hunsigned int valueh](j )}(hunsignedh]hunsigned}(hj2hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj )}(hinth]hint}(hjNhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj))}(hvalueh]hvalue}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj.ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj-ubj^)}(hbool autoreleaseh](j )}(hjUTh]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]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\)}(h-report event corresponding to given key entryh]h-report event corresponding to given key entry}(hjȍhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjōhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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&]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 device for which event should be reportedh]h/Input device for which event should be reported}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h:``const struct key_entry *ke`` key entry describing event h](j)}(h``const struct key_entry *ke``h]j)}(hjBh]hconst struct key_entry *ke}(hjDhhhNhNubah}(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\)}(hkey entry describing eventh]hkey entry describing event}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjWhKhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhKhjubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hj{h]hunsigned int value}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjuubj)}(hhh]j\)}(h`.h](h?This function is used to report input event described by given }(hj*hhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hj4h]hstruct key_entry}(hj6hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj2ubah}(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.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjQhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sparse_keymap_report_event (C function)c.sparse_keymap_report_eventhNtauh1hhjhhhNhNubh)}(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 )}(hjUTh]hbool}(hj|hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjxhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhhjhMubj#)}(hsparse_keymap_report_eventh]j))}(hsparse_keymap_report_eventh]hsparse_keymap_report_event}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjxhhhjhMubjX)}(hP(struct input_dev *dev, unsigned int code, 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 }(hjŏhhhNhNubah}(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)}jjsbc.sparse_keymap_report_eventasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int codeh](j )}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj )}(hinth]hint}(hjFhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj&ubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj))}(hcodeh]hcode}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj&ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int valueh](j )}(hunsignedh]hunsigned}(hj{hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj )}(hinth]hint}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj))}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjwubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hbool autoreleaseh](j )}(hjUTh]hbool}(hj̐hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjȐubj)}(h h]h }(hjِhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjȐubj))}(h autoreleaseh]h autorelease}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjȐubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjxhhhjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjthhhjhMubah}(h]joah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMhjqhhubjW)}(hhh]j\)}(h,report event corresponding to given scancodeh]h,report event corresponding to given scancode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjhhubah}(h]h ]h"]h$]h&]uh1jVhjqhhhjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j)j|j)j}j~juh1hhhhjhNhNubj)}(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)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chM hj-ubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjRh]hstruct input_dev *dev}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjLubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghMhjIubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hjh]hunsigned int code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(h Scan codeh]h Scan code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjIubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjđh]hunsigned int value}(hjƑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj‘ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(hubj)}(hhh](j)}(hD``PS2_PROCESS`` pass to the main protocol handler, process normally h](j)}(h``PS2_PROCESS``h]j)}(hjch]h PS2_PROCESS}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhKhj]ubj)}(hhh]j\)}(h3pass to the main protocol handler, process normallyh]h3pass to the main protocol handler, process normally}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjxhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhKhjZubj)}(h``PS2_IGNORE`` skip the byte h](j)}(h``PS2_IGNORE``h]j)}(hjh]h PS2_IGNORE}(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\)}(h skip the byteh]h skip the byte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubj)}(h@``PS2_ERROR`` do not process the byte, abort command in progressh](j)}(h ``PS2_ERROR``h]j)}(hjՓh]h PS2_ERROR}(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.hhKhjϓubj)}(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&]uh1jhjϓubeh}(h]h ]h"]h$]h&]uh1jhjhKhjZubeh}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2dev (C struct)c.ps2devhNtauh1hhjhhhNhNubh)}(hhh](h)}(hps2devh]h)}(h struct ps2devh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj+hhhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK%ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj<hK%ubj#)}(hps2devh]j))}(hj)h]hps2dev}(hjOhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjKubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj+hhhj<hK%ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj'hhhj<hK%ubah}(h]j"ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj<hK%hj$hhubjW)}(hhh]j\)}(h'represents a device using PS/2 protocolh]h'represents a device using PS/2 protocol}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK#hjnhhubah}(h]h ]h"]h$]h&]uh1jVhj$hhhj<hK%ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjubj)}(hXstruct ps2dev { struct serio *serio; struct mutex cmd_mutex; wait_queue_head_t wait; unsigned long flags; u8 cmdbuf[8]; u8 cmdcnt; u8 nak; ps2_pre_receive_handler_t pre_receive_handler; ps2_receive_handler_t receive_handler; };h]hXstruct ps2dev { struct serio *serio; struct mutex cmd_mutex; wait_queue_head_t wait; unsigned long flags; u8 cmdbuf[8]; u8 cmdcnt; u8 nak; ps2_pre_receive_handler_t pre_receive_handler; ps2_receive_handler_t receive_handler; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjubj\)}(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.hhK5hjubj)}(hhh](j)}(h/``serio`` a serio port used by the PS/2 device h](j)}(h ``serio``h]j)}(hjޔh]hserio}(hjhhhNhNubah}(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 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&]uh1jhjؔubeh}(h]h ]h"]h$]h&]uh1jhjhK%hjՔubj)}(hL``cmd_mutex`` a mutex ensuring that only one command is executing at a time h](j)}(h ``cmd_mutex``h]j)}(hjh]h cmd_mutex}(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 mutex ensuring that only one command is executing at a timeh]h=a mutex ensuring that only one command is executing at a time}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj,hK&hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hK&hjՔubj)}(hP``wait`` a waitqueue used to signal completion from the serio interrupt handler h](j)}(h``wait``h]j)}(hjPh]hwait}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjJubj)}(hhh]j\)}(hFa waitqueue used to signal completion from the serio interrupt handlerh]hFa waitqueue used to signal completion from the serio interrupt handler}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjehK'hjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehK'hjՔubj)}(hM``flags`` various internal flags indicating stages of PS/2 command execution h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK(hjubj)}(hhh]j\)}(hBvarious internal flags indicating stages of PS/2 command executionh]hBvarious internal flags indicating stages of PS/2 command execution}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjՔubj)}(h+``cmdbuf`` buffer holding command response h](j)}(h ``cmdbuf``h]j)}(hj•h]hcmdbuf}(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\)}(hbuffer holding command responseh]hbuffer holding 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)hjՔubj)}(h?``cmdcnt`` outstanding number of bytes of the command response h](j)}(h ``cmdcnt``h]j)}(hjh]hcmdcnt}(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\)}(h3outstanding number of bytes of the command responseh]h3outstanding number of bytes of the command response}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK*hjՔubj)}(hA``nak`` a byte transmitted by the device when it refuses command h](j)}(h``nak``h]j)}(hj4h]hnak}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK+hj.ubj)}(hhh]j\)}(h8a byte transmitted by the device when it refuses commandh]h8a byte transmitted by the device when it refuses command}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIhK+hjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhK+hjՔubj)}(h``pre_receive_handler`` checks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byte h](j)}(h``pre_receive_handler``h]j)}(hjmh]hpre_receive_handler}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK-hjgubj)}(hhh]j\)}(hchecks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byteh](h5checks communication errors and returns disposition (}(hjhhhNhNubh)}(h0:c:type:`enum ps2_disposition `h]j)}(hjh]henum ps2_disposition}(hjhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjubah}(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,hjubh) of the received data byte}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhK-hjՔubj)}(h```receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](j)}(h``receive_handler``h]j)}(hjʖh]hreceive_handler}(hj̖hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȖubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK.hjĖubj)}(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[hjߖhK.hjubah}(h]h ]h"]h$]h&]uh1jhjĖubeh}(h]h ]h"]h$]h&]uh1jhjߖhK.hjՔubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_sendbyte (C function)c.ps2_sendbytehNtauh1hhjhhhNhNubh)}(hhh](h)}(hGint ps2_sendbyte (struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h]h)}(hFint ps2_sendbyte(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h](j )}(hinth]hint}(hj#hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj1hKbubj#)}(h ps2_sendbyteh]j))}(h ps2_sendbyteh]h ps2_sendbyte}(hjDhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj1hKbubjX)}(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 }(hjmhhhNhNubah}(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 reftargetjmodnameN classnameNjm jp )}js ]j)}jjFsbc.ps2_sendbyteasbuh1hhj\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]hjXubj^)}(hu8 byteh](h)}(hhh]j))}(hu8h]hu8}(hj՗hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjҗubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjחmodnameN classnameNjm jp )}js ]jc.ps2_sendbyteasbuh1hhjΗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjΗubj))}(hbyteh]hbyte}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjΗubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjXubj^)}(hunsigned int timeouth](j )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hinth]hint}(hj6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(htimeouth]htimeout}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjXubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhj1hKbubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhj1hKbubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj1hKbhjhhubjW)}(hhh]j\)}(h7sends a byte to the device and wait for acknowledgementh]h7sends a byte to the device and wait for acknowledgement}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbhjyhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj1hKbubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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)}(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.chKfhjubj)}(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.chKchjubj)}(hhh]j\)}(h!a PS/2 device to send the data toh]h!a PS/2 device to send the data to}(hj֘hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjҘhKchjӘubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjҘhKchjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj hKdhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKdhjubj)}(hS``unsigned int timeout`` timeout for sending the data and receiving an acknowledge h](j)}(h``unsigned int timeout``h]j)}(hj/h]hunsigned int timeout}(hj1hhhNhNubah}(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.chKehj)ubj)}(hhh]j\)}(h9timeout for sending the data and receiving an acknowledgeh]h9timeout for sending the data and receiving an acknowledge}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjDhKehjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKehjubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKghjubj\)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKfhjubj\)}(h9ps2_sendbyte() can only be called from a process context.h]h9ps2_sendbyte() can only be called from a process context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKihjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_begin_command (C function)c.ps2_begin_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(h.void ps2_begin_command (struct ps2dev *ps2dev)h]h)}(h-void ps2_begin_command(struct ps2dev *ps2dev)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKzubj)}(h h]h }(hj͙hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj̙hKzubj#)}(hps2_begin_commandh]j))}(hps2_begin_commandh]hps2_begin_command}(hjߙhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjۙubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj̙hKzubjX)}(h(struct ps2dev *ps2dev)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)}jjsbc.ps2_begin_commandasbuh1hhjubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hps2devh]hps2dev}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubah}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhj̙hKzubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhj̙hKzubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj̙hKzhjhhubjW)}(hhh]j\)}(h0mark beginning of execution of a complex commandh]h0mark beginning 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.chKzhj{hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj̙hKzubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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)}(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.chK~hjubj)}(hhh]j)}(h>``struct ps2dev *ps2dev`` a PS/2 device executing the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK{hjubj)}(hhh]j\)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(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{hjubah}(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[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK}hjubj\)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_end_command (C function)c.ps2_end_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(h,void ps2_end_command (struct ps2dev *ps2dev)h]h)}(h+void ps2_end_command(struct ps2dev *ps2dev)h](j )}(hvoidh]hvoid}(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 }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhKubj#)}(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"hj;hhhjMhKubjX)}(h(struct ps2dev *ps2dev)h]j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjbsbc.ps2_end_commandasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]h*}(hjțhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj))}(hps2devh]hps2dev}(hj՛hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjxubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjtubah}(h]h ]h"]h$]h&]j@jAuh1jWhj;hhhjMhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj7hhhjMhKubah}(h]j2ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjMhKhj4hhubjW)}(hhh]j\)}(h*mark end of execution of a complex commandh]h*mark end of execution of a complex command}(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&]uh1jVhj4hhhjMhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(hO**Parameters** ``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](j\)}(h**Parameters**h]j)}(hj!h]h Parameters}(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.chKhjubj)}(hhh]j)}(h=``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](j)}(h``struct ps2dev *ps2dev``h]j)}(hj@h]hstruct ps2dev *ps2dev}(hjBhhhNhNubah}(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\)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_drain (C function) c.ps2_drainhNtauh1hhjhhhNhNubh)}(hhh](h)}(hMvoid ps2_drain (struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h]h)}(hLvoid ps2_drain(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]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_drainh]j))}(h ps2_drainh]h ps2_drain}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKubjX)}(h>(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](j^)}(hstruct ps2dev *ps2devh](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))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsb c.ps2_drainasbuh1hhjӜubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӜubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӜubj))}(hps2devh]hps2dev}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjӜubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjϜubj^)}(hsize_t maxbytesh](h)}(hhh]j))}(hsize_th]hsize_t}(hjLhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjIubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjNmodnameN classnameNjm jp )}js ]j c.ps2_drainasbuh1hhjEubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj))}(hmaxbytesh]hmaxbytes}(hjxhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjEubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjϜubj^)}(hunsigned int timeouth](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))}(htimeouth]htimeout}(hjɝhhhNhNubah}(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\)}(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&]uh1jVhjhhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j j|j j}j~juh1hhhhjhNhNubj)}(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)}(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)}(hA``struct ps2dev *ps2dev`` the PS/2 device that should be drained h](j)}(h``struct ps2dev *ps2dev``h]j)}(hj4h]hstruct ps2dev *ps2dev}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(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&the PS/2 device that should be drainedh]h&the PS/2 device that should be drained}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIhKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj+ubj)}(h:``size_t maxbytes`` maximum number of bytes to be drained h](j)}(h``size_t maxbytes``h]j)}(hjmh]hsize_t maxbytes}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjgubj)}(hhh]j\)}(h%maximum number of bytes to be drainedh]h%maximum number of bytes to be drained}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubj)}(h1``unsigned int timeout`` time to drain the deviceh](j)}(h``unsigned int timeout``h]j)}(hjh]hunsigned int timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_is_keyboard_id (C function)c.ps2_is_keyboard_idhNtauh1hhjhhhNhNubh)}(hhh](h)}(h$bool ps2_is_keyboard_id (u8 id_byte)h]h)}(h#bool ps2_is_keyboard_id(u8 id_byte)h](j )}(hjUTh]hbool}(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&]uh1jhjhhhj hKubj#)}(hps2_is_keyboard_idh]j))}(hps2_is_keyboard_idh]hps2_is_keyboard_id}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhj hKubjX)}(h (u8 id_byte)h]j^)}(h u8 id_byteh](h)}(hhh]j))}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj<ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjAmodnameN classnameNjm jp )}js ]j)}jj"sbc.ps2_is_keyboard_idasbuh1hhj8ubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj))}(hid_byteh]hid_byte}(hjmhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj8ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hj4ubah}(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>checks received ID byte against the list of known keyboard IDsh]h>checks received ID byte against the list of known keyboard IDs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhj hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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&]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/``u8 id_byte`` data byte that should be checkedh](j)}(h``u8 id_byte``h]j)}(hj؟h]h u8 id_byte}(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\)}(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&]uh1jhjҟubeh}(h]h ]h"]h$]h&]uh1jhjhKhjϟubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h__ps2_command (C function)c.__ps2_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(hJint __ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)h]h)}(hIint __ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j )}(hinth]hint}(hj2hhhNhNubah}(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 }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hKubj#)}(h __ps2_commandh]j))}(h __ps2_commandh]h __ps2_command}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjOubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj.hhhj@hKubjX)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j^)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjkubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjUsbc.__ps2_commandasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj))}(hps2devh]hps2dev}(hjȠhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjkubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjgubj^)}(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 ]jc.__ps2_commandasbuh1hhjݠubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݠubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݠubj))}(hparamh]hparam}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjݠubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjgubj^)}(hunsigned int commandh](j )}(hunsignedh]hunsigned}(hj6hhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj2ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj )}(hinth]hint}(hjRhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj))}(hcommandh]hcommand}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj2ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjgubeh}(h]h ]h"]h$]h&]j@jAuh1jWhj.hhhj@hKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj*hhhj@hKubah}(h]j%ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj@hKhj'hhubjW)}(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.chKhjhhubah}(h]h ]h"]h$]h&]uh1jVhj'hhhj@hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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&]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)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hj١h]hstruct ps2dev *ps2dev}(hjۡhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjסubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjӡubj)}(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&]uh1jhjӡubeh}(h]h ]h"]h$]h&]uh1jhjhKhjСubj)}(h``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both h](j)}(h ``u8 *param``h]j)}(hjh]h u8 *param}(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.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}(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'hKhjСubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hjLh]hunsigned int command}(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.chMhjFubj)}(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}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMhjСubeh}(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[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj\)}(hNot serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.h]hNot serialized. Callers should use ps2_begin_command() and ps2_end_command() to ensure proper serialization for complex commands.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_command (C function) c.ps2_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(hHint ps2_command (struct ps2dev *ps2dev, u8 *param, unsigned int command)h]h)}(hGint ps2_command(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j )}(hinth]hint}(hj͢hhhNhNubah}(h]h ]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#)}(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"hjɢhhhjۢhMubjX)}(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&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(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 reftargetj*modnameN classnameNjm jp )}js ]j)}jjsb c.ps2_commandasbuh1hhjubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hps2devh]hps2dev}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(h u8 *paramh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj|ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jD c.ps2_commandasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj))}(hparamh]hparam}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjxubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int commandh](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}(hjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjͣ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]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjɢhhhjۢhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjŢhhhjۢhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjۢhMhj¢hhubjW)}(hhh]j\)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj0hhubah}(h]h ]h"]h$]h&]uh1jVhj¢hhhjۢhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jKj|jKj}j~juh1hhhhjhNhNubj)}(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)}(hjUh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjOubj)}(hhh](j)}(hJ``struct ps2dev *ps2dev`` the PS/2 device that should execute the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjth]hstruct ps2dev *ps2dev}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjnubj)}(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&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubj)}(h``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both h](j)}(h ``u8 *param``h]j)}(hjh]h u8 *param}(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\)}(ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or bothh]ha buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both}(hjƤhhhNhNubah}(h]h ]h"]h$]h&]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¤hMhjkubj)}(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}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjkubeh}(h]h ]h"]h$]h&]uh1jhjOubj\)}(h**Note**h]j)}(hj#h]hNote}(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.chMhjOubj\)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_sliced_command (C function)c.ps2_sliced_commandhNtauh1hhjhhhNhNubh)}(hhh](h)}(h:int ps2_sliced_command (struct ps2dev *ps2dev, u8 command)h]h)}(h9int ps2_sliced_command(struct ps2dev *ps2dev, u8 command)h](j )}(hinth]hint}(hjhhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjdhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjvhMubj#)}(hps2_sliced_commandh]j))}(hps2_sliced_commandh]hps2_sliced_command}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjdhhhjvhMubjX)}(h#(struct ps2dev *ps2dev, u8 command)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}(hjåhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjťmodnameN classnameNjm jp )}js ]j)}jjsbc.ps2_sliced_commandasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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^)}(h u8 commandh](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_sliced_commandasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcommandh]hcommand}(hjFhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjdhhhjvhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj`hhhjvhMubah}(h]j[ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjvhMhj]hhubjW)}(hhh]j\)}(h)sends an extended PS/2 command to a mouseh]h)sends an extended PS/2 command to a mouse}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjmhhubah}(h]h ]h"]h$]h&]uh1jVhj]hhhjvhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(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)}(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)}(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.chMhjubj)}(hhh]j\)}(h/the PS/2 device that should execute the commandh]h/the PS/2 device that should execute the command}(hjʦhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjƦhMhjǦubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjƦhMhjubj)}(h``u8 command`` command byte h](j)}(h``u8 command``h]j)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(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.chMhjubj\)}(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.}(hj;hhhNhNubah}(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&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_init (C function) c.ps2_inithNtauh1hhjhhhNhNubh)}(hhh](h)}(hvoid ps2_init (struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h]h)}(hvoid ps2_init(struct ps2dev *ps2dev, struct serio *serio, ps2_pre_receive_handler_t pre_receive_handler, ps2_receive_handler_t receive_handler)h](j )}(hvoidh]hvoid}(hjjhhhNhNubah}(h]h ]j,ah"]h$]h&]uh1jhjfhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjxhMubj#)}(hps2_inith]j))}(hps2_inith]hps2_init}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjfhhhjxhMubjX)}(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}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(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 reftargetjǧmodnameN classnameNjm jp )}js ]j)}jjsb c.ps2_initasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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^)}(hstruct serio *serioh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hserioh]hserio}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj4ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj9modnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hserioh]hserio}(hjphhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(h-ps2_pre_receive_handler_t pre_receive_handlerh](h)}(hhh]j))}(hps2_pre_receive_handler_th]hps2_pre_receive_handler_t}(hjhhhNhNubah}(h]h ]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))}(hpre_receive_handlerh]hpre_receive_handler}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(h%ps2_receive_handler_t receive_handlerh](h)}(hhh]j))}(hps2_receive_handler_th]hps2_receive_handler_t}(hjԨhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjѨubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj֨modnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjͨubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjͨubj))}(hreceive_handlerh]hreceive_handler}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjͨubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjfhhhjxhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjbhhhjxhMubah}(h]j]ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjxhMhj_hhubjW)}(hhh]j\)}(hinitializes ps2dev structureh]hinitializes ps2dev structure}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jVhj_hhhjxhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jBj|jBj}j~juh1hhhhjhNhNubj)}(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)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjFubj)}(hhh](j)}(h6``struct ps2dev *ps2dev`` structure to be initialized h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjkh]hstruct ps2dev *ps2dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjeubj)}(hhh]j\)}(hstructure to be initializedh]hstructure to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(hC``struct serio *serio`` serio port associated with the PS/2 device h](j)}(h``struct serio *serio``h]j)}(hjh]hstruct serio *serio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(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)}(hjݩh]h-ps2_pre_receive_handler_t pre_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\)}(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&]uh1jhjשubeh}(h]h ]h"]h$]h&]uh1jhjhMhjbubj)}(h@``ps2_receive_handler_t receive_handler`` main protocol handler h](j)}(h)``ps2_receive_handler_t receive_handler``h]j)}(hjh]h%ps2_receive_handler_t 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\)}(hmain protocol handlerh]hmain protocol handler}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj+hMhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hMhjbubeh}(h]h ]h"]h$]h&]uh1jhjFubj\)}(h**Description**h]j)}(hjQh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjFubj\)}(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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hps2_interrupt (C function)c.ps2_interrupthNtauh1hhjhhhNhNubh)}(hhh](h)}(hLirqreturn_t ps2_interrupt (struct serio *serio, u8 data, unsigned int flags)h]h)}(hKirqreturn_t ps2_interrupt(struct serio *serio, u8 data, unsigned int flags)h](h)}(hhh]j))}(h irqreturn_th]h irqreturn_t}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}j ps2_interruptsbc.ps2_interruptasbuh1hhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMEubj#)}(h ps2_interrupth]j))}(hjh]h ps2_interrupt}(hjͪhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjɪubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMEubjX)}(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}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jc.ps2_interruptasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hserioh]hserio}(hj?hhhNhNubah}(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(hjXubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj]modnameN classnameNjm jp )}js ]jc.ps2_interruptasbuh1hhjTubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj))}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjTubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubj^)}(hunsigned int flagsh](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))}(hflagsh]hflags}(hjثhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1j]hjubeh}(h]h ]h"]h$]h&]j@jAuh1jWhjhhhjhMEubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMEubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMEhjhhubjW)}(hhh]j\)}(h)common interrupt handler for PS/2 devicesh]h)common interrupt handler for PS/2 devices}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMEhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMEubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjhNhNubj)}(hX**Parameters** ``struct serio *serio`` serio port for the device ``u8 data`` a data byte received from the device ``unsigned int flags`` flags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transfer **Description** ps2_interrupt() invokes pre-receive handler, optionally handles command acknowledgement and response from the device, and finally passes the data to the main protocol handler for future processing.h](j\)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&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.chMIhjubj)}(hhh](j)}(h2``struct serio *serio`` serio port for the device h](j)}(h``struct serio *serio``h]j)}(hjCh]hstruct serio *serio}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMFhj=ubj)}(hhh]j\)}(hserio port for the deviceh]hserio port for the device}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjXhMFhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMFhj:ubj)}(h1``u8 data`` a data byte received from the device h](j)}(h ``u8 data``h]j)}(hj|h]hu8 data}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMGhjvubj)}(hhh]j\)}(h$a data byte received from the deviceh]h$a data byte received from the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMGhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhMGhj:ubj)}(hq``unsigned int flags`` flags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transfer h](j)}(h``unsigned int flags``h]j)}(hjh]hunsigned int flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMIhjubj)}(hhh]j\)}(hYflags such as ``SERIO_PARITY`` or ``SERIO_TIMEOUT`` indicating state of the data transferh](hflags such as }(hjάhhhNhNubj)}(h``SERIO_PARITY``h]h SERIO_PARITY}(hj֬hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjάubh or }(hjάhhhNhNubj)}(h``SERIO_TIMEOUT``h]h SERIO_TIMEOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjάubh& indicating state of the data transfer}(hjάhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMHhjˬubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjʬhMIhj:ubeh}(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[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.}(hj+hhhNhNubah}(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&]uh1jhjhhhNhNubeh}(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_handlerjterror_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}(jNjKjrfjofjjjjjjjFjCu nametypes}(jNjrfjjjjFuh}(jKhjofhhhjjjjjgjljjjjjjj&j+j)"j."j#j#j'j 'j(j(j*j *j+j+j-j -j/j/j2j2j5j 5jJ7jO7j8j8ji:jn:jm<jr<j$>j)>j6@j;@jAjAjlDjqDjFjFjYHj^HjIjIj[Kj`KjLjLjcPjhPjQjQjSjSjUjUjCWjHWjYjYj\j\je_jj_jajajcjcjjufjfjfj hjhjljjqjjkjkjRnjWnjojojYrj^rjWtj\tjTvjYvjwjwjVyj[yj}j}jj j'j-jjjjj3j8jjjj jjjojtjCjjҒjגj"j'jjjjj2j7jjjjj%j*jjŢj[j`j]jbjju 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.