xsphinx.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)}(hXh**Definition**:: struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; unsigned long keybit[BITS_TO_LONGS(KEY_CNT)]; unsigned long relbit[BITS_TO_LONGS(REL_CNT)]; unsigned long absbit[BITS_TO_LONGS(ABS_CNT)]; unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; unsigned int hint_events_per_packet; unsigned int keycodemax; unsigned int keycodesize; void *keycode; int (*setkeycode)(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode); int (*getkeycode)(struct input_dev *dev, struct input_keymap_entry *ke); struct ff_device *ff; struct input_dev_poller *poller; unsigned int repeat_key; struct timer_list timer; int rep[REP_CNT]; struct input_mt *mt; struct input_absinfo *absinfo; unsigned long key[BITS_TO_LONGS(KEY_CNT)]; unsigned long led[BITS_TO_LONGS(LED_CNT)]; unsigned long snd[BITS_TO_LONGS(SND_CNT)]; unsigned long sw[BITS_TO_LONGS(SW_CNT)]; int (*open)(struct input_dev *dev); void (*close)(struct input_dev *dev); int (*flush)(struct input_dev *dev, struct file *file); int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value); struct input_handle *grab; spinlock_t event_lock; struct mutex mutex; unsigned int users; bool going_away; struct device dev; struct list_head h_list; struct list_head node; unsigned int num_vals; unsigned int max_vals; struct input_value *vals; bool devres_managed; ktime_t timestamp[INPUT_CLK_MAX]; bool inhibited; bool ready; }; **Members** ``name`` name of the device ``phys`` physical path to the device in the system hierarchy ``uniq`` unique identification code for the device (if device has it) ``id`` id of the device (struct input_id) ``propbit`` bitmap of device properties and quirks ``evbit`` bitmap of types of events supported by the device (EV_KEY, EV_REL, etc.) ``keybit`` bitmap of keys/buttons this device has ``relbit`` bitmap of relative axes for the device ``absbit`` bitmap of absolute axes for the device ``mscbit`` bitmap of miscellaneous events supported by the device ``ledbit`` bitmap of leds present on the device ``sndbit`` bitmap of sound effects supported by the device ``ffbit`` bitmap of force feedback effects supported by the device ``swbit`` bitmap of switches present on the device ``hint_events_per_packet`` average number of events generated by the device in a packet (between EV_SYN/SYN_REPORT events). Used by event handlers to estimate size of the buffer needed to hold events. ``keycodemax`` size of keycode table ``keycodesize`` size of elements in keycode table ``keycode`` map of scancodes to keycodes for this device ``setkeycode`` optional method to alter current keymap, used to implement sparse keymaps. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep ``getkeycode`` optional legacy method to retrieve current keymap. ``ff`` force feedback structure associated with the device if device supports force feedback effects ``poller`` poller structure associated with the device if device is set up to use polling mode ``repeat_key`` stores key code of the last key pressed; used to implement software autorepeat ``timer`` timer for software autorepeat ``rep`` current values for autorepeat parameters (delay, rate) ``mt`` pointer to multitouch state ``absinfo`` array of :c:type:`struct input_absinfo ` elements holding information about absolute axes (current value, min, max, flat, fuzz, resolution) ``key`` reflects current state of device's keys/buttons ``led`` reflects current state of device's LEDs ``snd`` reflects current state of sound effects ``sw`` reflects current state of device's switches ``open`` this method is called when the very first user calls input_open_device(). The driver must prepare the device to start generating events (start polling thread, request an IRQ, submit URB, etc.). The meaning of open() is to start providing events to the input core. ``close`` this method is called when the very last user calls input_close_device(). The meaning of close() is to stop providing events to the input core. ``flush`` purges the device. Most commonly used to get rid of force feedback effects loaded into the device when disconnecting from it ``event`` event handler for events sent _to_ the device, like EV_LED or EV_SND. The device is expected to carry out the requested action (turn on a LED, play sound, etc.) The call is protected by **event_lock** and must not sleep ``grab`` input handle that currently has the device grabbed (via EVIOCGRAB ioctl). When a handle grabs a device it becomes sole recipient for all input events coming from the device ``event_lock`` this spinlock is taken when input core receives and processes a new event for the device (in input_event()). Code that accesses and/or modifies parameters of a device (such as keymap or absmin, absmax, absfuzz, etc.) after device has been registered with input core must take this lock. ``mutex`` serializes calls to open(), close() and flush() methods ``users`` stores number of users (input handlers) that opened this device. It is used by input_open_device() and input_close_device() to make sure that dev->open() is only called when the first user opens device and dev->close() is called when the very last user closes the device ``going_away`` marks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to fail with -ENODEV. ``dev`` driver model's view of this device ``h_list`` list of input handles associated with the device. When accessing the list dev->mutex must be held ``node`` used to place the device onto input_dev_list ``num_vals`` number of values queued in the current frame ``max_vals`` maximum number of values queued in a frame ``vals`` array of values queued in the current frame ``devres_managed`` indicates that devices is managed with devres framework and needs not be explicitly unregistered or freed. ``timestamp`` storage for a timestamp set by input_set_timestamp called by a driver ``inhibited`` indicates that the input device is inhibited. If that is the case then input core ignores any events generated by the device. Device's close() is called when it is being inhibited and its open() is called when it is being uninhibited. ``ready`` indicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.h](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(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; bool ready; };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; bool ready; };}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.hhKihj 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)}(h``going_away`` marks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to fail with -ENODEV. h](j)}(h``going_away``h]j)}(hjY h]h going_away}(hj[ 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.hhKzhjS ubj)}(hhh]j\)}(hmarks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to fail with -ENODEV.h]hmarks devices that are in a middle of unregistering and causes input_open_device() and input_inhibit/uninhibit_device() to 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 hKzhjSubj)}(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.hhK{hj 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 hK{hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK{hjSubj)}(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.hhKhj9 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 hKhjU ubah}(h]h ]h"]h$]h&]uh1jhj9 ubeh}(h]h ]h"]h$]h&]uh1jhjT hKhjSubj)}(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&]uh1jhjshKhjSubj)}(h``ready`` indicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.h](j)}(h ``ready``h]j)}(hjh]hready}(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\)}(hindicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.h]hindicates that the device has been successfully opened and is prepared to process events (like LEDs or sounds) sent from the input core.}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjSubeh}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jLj|jLj}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 when device is open and ready to process events, and also when device is uninhibited or when a process that "grabbed" a device releases it ``passive_observer`` set to ``true`` by drivers only interested in observing data stream from devices if there are other users present. Such drivers will not result in starting underlying hardware device when input_open_device() is called for their handles ``legacy_minors`` set to ``true`` by drivers using legacy minor ranges ``minor`` beginning of range of 32 legacy minors for devices this driver can provide ``name`` name of the handler, to be shown in /proc/bus/input/handlers ``id_table`` pointer to a table of input_device_ids this driver can handle ``h_list`` list of input handles associated with the handler ``node`` for placing the driver onto input_handler_listh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh:}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjPubj)}(hX:struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; };h]hX:struct input_handler { void *private; void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value); unsigned int (*events)(struct input_handle *handle, struct input_value *vals, unsigned int count); bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value); bool (*match)(struct input_handler *handler, struct input_dev *dev); int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id); void (*disconnect)(struct input_handle *handle); void (*start)(struct input_handle *handle); bool passive_observer; bool legacy_minors; int minor; const char *name; const struct input_device_id *id_table; struct list_head h_list; struct list_head node; };}hjqsbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjPubj\)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM,hjPubj)}(hhh](j)}(h!``private`` driver-specific data h](j)}(h ``private``h]j)}(hjh]hprivate}(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\)}(hdriver-specific datah]hdriver-specific data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1jhjhMhjubj)}(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.}(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)hMhjubj)}(hQ``filter`` similar to **event**; separates normal event handlers from "filters". h](j)}(h ``filter``h]j)}(hjNh]hfilter}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjHubj)}(hhh]j\)}(hEsimilar to **event**; separates normal event handlers from "filters".h](h similar to }(hjghhhNhNubj)}(h **event**h]hevent}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh5; separates normal event handlers from “filters”.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchMhjubj)}(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)}(hjh]hmatch}(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\)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM!hjubj)}(h?``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.hhM"hjubj)}(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[hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h7``disconnect`` disconnects a handler from input device h](j)}(h``disconnect``h]j)}(hj h]h disconnect}(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\)}(h'disconnects a handler from input deviceh]h'disconnects a handler from input device}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj"hM#hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hM#hjubj)}(h``start`` starts handler for given handle. This function is called by input core when device is open and ready to process events, and also when device is uninhibited or when a process that "grabbed" a device releases it h](j)}(h ``start``h]j)}(hjFh]hstart}(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\)}(hstarts handler for given handle. This function is called by input core when device is open and ready to process events, and also when device is uninhibited or when a process that "grabbed" a device releases ith]hstarts handler for given handle. This function is called by input core when device is open and ready to process events, and also when device is uninhibited or when a process that “grabbed” a device releases it}(hj_hhhNhNubah}(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'hjubj)}(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)}(hjh]hpassive_observer}(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+hjzubj)}(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 }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 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}(hjhhhNhNubeh}(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&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubj)}(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,hjubj)}(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}(hj0hhhNhNubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hM.hjubj)}(hF``name`` name of the handler, to be shown in /proc/bus/input/handlers h](j)}(h``name``h]j)}(hjQh]hname}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM/hjKubj)}(hhh]j\)}(hubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM6hhhhubj\)}(hInput handlers attach to input devices and create input handles. There are likely several handlers attached to any given input device at the same time. All of them will get their copy of input event generated by the device.h]hInput handlers attach to input devices and create input handles. There are likely several handlers attached to any given input device at the same time. All of them will get their copy of input event generated by the device.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM3hhhhubj\)}(hXThe very same structure is used to implement input filters. Input core allows filters to run first and will not pass event to regular handlers if any of the filters indicate that the event should be filtered (by returning ``true`` from their filter() method).h](hThe very same structure is used to implement input filters. Input core allows filters to run first and will not pass event to regular handlers if any of the filters indicate that the event should be filtered (by returning }(hjehhhNhNubj)}(h``true``h]htrue}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh from their filter() method).}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM8hhhhubj\)}(hLNote that input core serializes calls to connect() and disconnect() methods.h]hLNote that input core serializes calls to connect() and disconnect() methods.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM=hhhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_handle (C struct)c.input_handlehNtauh1hhhhhhhhNubh)}(hhh](h)}(h input_handleh]h)}(hstruct input_handleh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMCubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMCubj#)}(h input_handleh]j))}(hjh]h input_handle}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMCubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMCubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMChjhhubjW)}(hhh]j\)}(h(links input device with an input handlerh]h(links input device with an input handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMZhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMCubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhhhhhNubj)}(hX**Definition**:: struct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; unsigned int (*handle_events)(struct input_handle *handle, struct input_value *vals, unsigned int count); struct list_head d_node; struct list_head h_node; }; **Members** ``private`` handler-specific data ``open`` counter showing whether the handle is 'open', i.e. should deliver events from its device ``name`` name given to the handle by handler that created it ``dev`` input device the handle is attached to ``handler`` handler that works with the device through this handle ``handle_events`` event sequence handler. It is set up by the input core according to event handling method specified in the **handler**. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. ``d_node`` used to put the handle on device's list of attached handles ``h_node`` used to put the handle on handler's list of handles from which it gets eventsh](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.hhM^hj ubj)}(hXCstruct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; unsigned int (*handle_events)(struct input_handle *handle, struct input_value *vals, unsigned int count); struct list_head d_node; struct list_head h_node; };h]hXCstruct input_handle { void *private; int open; const char *name; struct input_dev *dev; struct input_handler *handler; unsigned int (*handle_events)(struct input_handle *handle, struct input_value *vals, unsigned int count); struct list_head d_node; struct list_head h_node; };}hj-sbah}(h]h ]h"]h$]h&]j@jAuh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM`hj 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.hhMkhj ubj)}(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.hhM\hjWubj)}(hhh]j\)}(hhandler-specific datah]hhandler-specific data}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjrhM\hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM\hjTubj)}(hb``open`` counter showing whether the handle is 'open', i.e. should deliver events from its device h](j)}(h``open``h]j)}(hjh]hopen}(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\)}(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}(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^hjTubj)}(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.hhM_hjubj)}(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[hjhM_hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM_hjTubj)}(h/``dev`` input device the handle is attached to h](j)}(h``dev``h]j)}(hj h]hdev}(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&input device the handle is attached toh]h&input device the handle is attached to}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM`hjTubj)}(hC``handler`` handler that works with the device through this handle h](j)}(h ``handler``h]j)}(hjBh]hhandler}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMahj<ubj)}(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[hjWhMahjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMahjTubj)}(hX4``handle_events`` event sequence handler. It is set up by the input core according to event handling method specified in the **handler**. See input_handle_setup_event_handler(). This method is being called by the input core with interrupts disabled and dev->event_lock spinlock held and so it may not sleep. h](j)}(h``handle_events``h]j)}(hj{h]h handle_events}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMfhjuubj)}(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 }(hjhhhNhNubj)}(h **handler**h]hhandler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. 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.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMbhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjTubj)}(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.hhMghjubj)}(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[hjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjTubj)}(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.hhMhhjubj)}(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[hjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjTubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(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&]uh1jYhjUhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjjhMubj#)}(hinput_set_events_per_packeth]j))}(hinput_set_events_per_packeth]hinput_set_events_per_packet}(hj}hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjyubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjUhhhjjhMubhdesc_parameterlist)}(h%(struct input_dev *dev, int n_events)h](hdesc_parameter)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftype identifier reftargetjmodnameN classnameNjm jp )}js ]jn ASTIdentifier)}jjsbc.input_set_events_per_packetasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(h int n_eventsh](jZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hn_eventsh]hn_events}(hj2hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjUhhhjjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjQhhhjjhMubah}(h]jLah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjjhMhjNhhubjW)}(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.hhMhjYhhubah}(h]h ]h"]h$]h&]uh1jVhjNhhhjjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jtj|jtj}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)}(hj~h]h Parameters}(hjhhhNhNubah}(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.hhMhjxubj)}(hhh](j)}(h>``struct input_dev *dev`` the input device used by the driver 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&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjubj)}(hhh]j\)}(h#the input device used by the driverh]h#the input device used by the driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjxubj\)}(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.hhMhjxubj\)}(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.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMhjxubeh}(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}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjchMubj#)}(h ff_deviceh]j))}(hjPh]h ff_device}(hjvhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjrubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjRhhhjchMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjNhhhjchMubah}(h]jIah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjchMhjKhhubjW)}(hhh]j\)}(h&force-feedback part of an input deviceh]h&force-feedback part of an input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jVhjKhhhjchMubeh}(h]h ](justructeh"]h$]h&]jzjuj{jj|jj}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&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM$hjubj)}(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&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.hhM6hjubj)}(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.hhM"hjubj)}(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[hjhM"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(h0``erase`` Called to erase an effect from device h](j)}(h ``erase``h]j)}(hj>h]herase}(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#hj8ubj)}(hhh]j\)}(h%Called to erase an effect from deviceh]h%Called to erase an effect from device}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjShM#hjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM#hjubj)}(hH``playback`` Called to request device to start playing specified effect h](j)}(h ``playback``h]j)}(hjwh]hplayback}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM$hjqubj)}(hhh]j\)}(h:Called to request device to start playing specified effecth]h:Called to request device to start playing specified effect}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(h*``set_gain`` Called to set specified gain h](j)}(h ``set_gain``h]j)}(hjh]hset_gain}(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 set specified gainh]hCalled to set specified gain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubj)}(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)}(hj"h]hdestroy}(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\)}(h@called by input core when parent input device is being destroyedh]h@called by input core when parent input device is being destroyed}(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)}(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&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM*hjVubj)}(hhh]j\)}(hCcalled by input core when parent input device is being unregisteredh]hCcalled by input core when parent input device is being unregistered}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM)hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjqhM*hjubj)}(h>``private`` driver-specific data, will be freed automatically h](j)}(h ``private``h]j)}(hjh]hprivate}(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\)}(h1driver-specific data, will be freed automaticallyh]h1driver-specific data, will be freed automatically}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+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)}(hj h]hmutex}(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*mutex for serializing access to the deviceh]h*mutex for serializing access to the device}(hj"hhhNhNubah}(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)}(hjBh]h max_effects}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM/hj<ubj)}(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[hjWhM/hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM/hjubj)}(hH``effects`` pointer to an array of effects currently loaded into device h](j)}(h ``effects``h]j)}(hj{h]heffects}(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.hhM0hjuubj)}(hhh]j\)}(h;pointer to an array of effects currently loaded into deviceh]h;pointer to an array of effects currently loaded into device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubj)}(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)}(hjh]h effect_owners}(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.hhM1hjubj)}(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[hjhM1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM1hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(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.hhM5hhhhubj\)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hU/var/lib/git/docbuild/linux/Documentation/driver-api/input:7: ./include/linux/input.hhM2hhhhubj\)}(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.hhM7hhhhubh)}(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](jZ)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj?hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMwubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhjQhMwubj#)}(h input_eventh]j))}(h input_eventh]h input_event}(hjdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj`ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj?hhhjQhMwubj)}(hH(struct input_dev *dev, unsigned int type, unsigned int code, int value)h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjfsb c.input_eventasbuh1hhj|ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj|ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjxubj)}(hunsigned int typeh](jZ)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(htypeh]htype}(hj*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjxubj)}(hunsigned int codeh](jZ)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj?ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjZ)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj?ubj)}(h h]h }(hjmhhhNhNubah}(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@jAuh1jhjxubj)}(h int valueh](jZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjxubeh}(h]h ]h"]h$]h&]j@jAuh1jhj?hhhjQhMwubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj;hhhjQhMwubah}(h]j6ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjQhMwhj8hhubjW)}(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&]uh1jVhj8hhhjQhMwubeh}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj0hMxhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMxhjubj)}(h(``unsigned int type`` type of the event h](j)}(h``unsigned int type``h]j)}(hjTh]hunsigned int type}(hjVhhhNhNubah}(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.chMyhjNubj)}(hhh]j\)}(htype of the eventh]htype of the event}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihMyhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMyhjubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hjh]hunsigned int code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMzhjubj)}(hhh]j\)}(h event codeh]h event code}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubj)}(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)}(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.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.}(hj>hhhNhNubah}(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](jZ)}(hvoidh]hvoid}(hjmhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjihhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj{hMubj#)}(hinput_inject_eventh]j))}(hinput_inject_eventh]hinput_inject_event}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjihhhj{hMubj)}(hN(struct input_handle *handle, unsigned int type, unsigned int code, int value)h](j)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_handleh]h input_handle}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsbc.input_inject_eventasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hhandleh]hhandle}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int typeh](jZ)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubj)}(h h]h }(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjZ)}(hinth]hint}(hj8 hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubj)}(h h]h }(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj))}(htypeh]htype}(hjT hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int codeh](jZ)}(hunsignedh]hunsigned}(hjm hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhji ubj)}(h h]h }(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubjZ)}(hinth]hint}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhji ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubj))}(hcodeh]hcode}(hj hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hji ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(h int valueh](jZ)}(hinth]hint}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj 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@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjihhhj{hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjehhhj{hMubah}(h]j`ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj{hMhjbhhubjW)}(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&]uh1jVhjbhhhj{hMubeh}(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)}(hjE!h]hstruct input_handle *handle}(hjG!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC!ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.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[hjZ!hMhj[!ubah}(h]h ]h"]h$]h&]uh1jhj?!ubeh}(h]h ]h"]h$]h&]uh1jhjZ!hMhj'ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjY'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@'hhhjY'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)}(hjL(h]hstruct input_handle *handle}(hjN(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ(ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjF(ubj)}(hhh]j\)}(h)input handle that wants to own the deviceh]h)input handle that wants to own the device}(hje(hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hja(hMhjb(ubah}(h]h ]h"]h$]h&]uh1jhjF(ubeh}(h]h ]h"]h$]h&]uh1jhja(hMhjC(ubah}(h]h ]h"]h$]h&]uh1jhj'(ubj\)}(h**Description**h]j)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'(ubj\)}(hWhen a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.h]hWhen a device is grabbed by an input handle all events generated by the device are delivered only to this handle. Also events injected by other input handles are ignored while device is grabbed.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj'(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h!input_release_device (C function)c.input_release_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(h7void input_release_device (struct input_handle *handle)h]h)}(h6void input_release_device(struct input_handle *handle)h](jZ)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj(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*ubj)}(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 }(hjG)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]h*}(hjU)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj))}(hhandleh]hhandle}(hjb)hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj)ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj)ubah}(h]h ]h"]h$]h&]j@jAuh1jhj(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}(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)}(hXg**Parameters** ``struct input_handle *handle`` input handle that owns the device **Description** Releases previously grabbed device so that other input handles can start receiving input events. Upon release all handlers attached to the device have their start() method called so they have a change to synchronize device state with the rest of the system.h](j\)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]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)}(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&]uh1jhj)ubj\)}(h**Description**h]j)}(hj*h]h Description}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM-hj)ubj\)}(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,hj)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](jZ)}(hinth]hint}(hjM*hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjI*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&]uh1jhjI*hhhj[*hMubj#)}(hinput_open_deviceh]j))}(hinput_open_deviceh]hinput_open_device}(hjn*hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjj*ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjI*hhhj[*hMubj)}(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)}jjp*sbc.input_open_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@jAuh1jhj*ubah}(h]h ]h"]h$]h&]j@jAuh1jhjI*hhhj[*hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjE*hhhj[*hMubah}(h]j@*ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj[*hMhjB*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.chMhj +hhubah}(h]h ]h"]h$]h&]uh1jVhjB*hhhj[*hMubeh}(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}(hj1+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)}(hN``struct input_handle *handle`` handle through which device is being accessed h](j)}(h``struct input_handle *handle``h]j)}(hjN+h]hstruct input_handle *handle}(hjP+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL+ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjH+ubj)}(hhh]j\)}(h-handle through which device is being accessedh]h-handle through which device is being accessed}(hjg+hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjc+hMhjd+ubah}(h]h ]h"]h$]h&]uh1jhjH+ubeh}(h]h ]h"]h$]h&]uh1jhjc+hMhjE+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\)}(hpThis function should be called by input handlers when they want to start receive events from given input device.h]hpThis function should be called by input handlers when they want to start receive events from given input device.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj)+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](jZ)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj+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_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+hMubj)}(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 }(hjI,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]h*}(hjW,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj))}(hhandleh]hhandle}(hjd,hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj,ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj,ubah}(h]h ]h"]h$]h&]j@jAuh1jhj+hhhj+hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj+hhhj+hMubah}(h]j+ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj+hMhj+hhubjW)}(hhh]j\)}(hclose input deviceh]hclose input device}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jVhj+hhhj+hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j,j|j,j}j~juh1hhhhhhNhNubj)}(h**Parameters** ``struct input_handle *handle`` handle through which device is being accessed **Description** This function should be called by input handlers when they want to stop receive events from given input device.h](j\)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj,ubj)}(hhh]j)}(hN``struct input_handle *handle`` handle through which device is being accessed h](j)}(h``struct input_handle *handle``h]j)}(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-handle through which device is being accessedh]h-handle through which device is being accessed}(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\)}(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.chMhj,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](jZ)}(hinth]hint}(hjO-hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjK-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&]uh1jhjK-hhhj]-hMubj#)}(hinput_scancode_to_scalarh]j))}(hinput_scancode_to_scalarh]hinput_scancode_to_scalar}(hjp-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjl-ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjK-hhhj]-hMubj)}(h=(const struct input_keymap_entry *ke, unsigned int *scancode)h](j)}(h#const struct input_keymap_entry *keh](j)}(hj$h]hconst}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj-hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj-ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj-modnameN classnameNjm jp )}js ]j)}jjr-sbc.input_scancode_to_scalarasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj))}(hkeh]hke}(hj.hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj-ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj-ubj)}(hunsigned int *scancodeh](jZ)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj.ubj)}(h h]h }(hj'.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjZ)}(hinth]hint}(hj5.hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj.ubj)}(h h]h }(hjC.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]h*}(hjQ.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@jAuh1jhj-ubeh}(h]h ]h"]h$]h&]j@jAuh1jhjK-hhhj]-hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjG-hhhj]-hMubah}(h]jB-ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj]-hMhjD-hhubjW)}(hhh]j\)}(hMconverts scancode in :c:type:`struct input_keymap_entry `h](hconverts scancode in }(hj.hhhNhNubh)}(h8:c:type:`struct input_keymap_entry `h]j)}(hj.h]hstruct input_keymap_entry}(hj.hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jp )}js ]j-c.input_scancode_to_scalarasbju input_keymap_entryuh1hhjQhMwhj.ubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj.hhubah}(h]h ]h"]h$]h&]uh1jVhjD-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` 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 }(hjx/hhhNhNubh)}(h,:c:type:`struct keymap_entry `h]j)}(hj/h]hstruct keymap_entry}(hj/hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju keymap_entryuh1hhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjx/ubh into scalar form understood by legacy keymap handling methods. These methods expect scancodes to be represented as ‘unsigned int’.}(hjx/hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj/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](jZ)}(hinth]hint}(hj/hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj/hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMcubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hMcubj#)}(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/hMcubj)}(hW(struct input_dev *dev, const struct input_keymap_entry *ke, unsigned int *old_keycode)h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j))}(h input_devh]h input_dev}(hj%0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj"0ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj'0modnameN classnameNjm jp )}js ]j)}jj/sbc.input_default_setkeycodeasbuh1hhj0ubj)}(h h]h }(hjE0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]h*}(hjS0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj))}(hdevh]hdev}(hj`0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj/ubj)}(h#const struct input_keymap_entry *keh](j)}(hj$h]hconst}(hjy0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhju0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju0ubj)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhju0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju0ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj0ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj0modnameN classnameNjm jp )}js ]jA0c.input_default_setkeycodeasbuh1hhju0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju0ubj)}(hjh]h*}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju0ubj))}(hkeh]hke}(hj0hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hju0ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj/ubj)}(hunsigned int *old_keycodeh](jZ)}(hunsignedh]hunsigned}(hj1hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjZ)}(hinth]hint}(hj 1hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj1ubj)}(h h]h }(hj.1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hj<1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj))}(h old_keycodeh]h old_keycode}(hjI1hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj/ubeh}(h]h ]h"]h$]h&]j@jAuh1jhj/hhhj/hMcubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj/hhhj/hMcubah}(h]j/ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj/hMchj/hhubjW)}(hhh]j\)}(hdefault setkeycode methodh]hdefault setkeycode method}(hjs1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMchjp1hhubah}(h]h ]h"]h$]h&]uh1jVhj/hhhj/hMcubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j1j|j1j}j~juh1hhhhhhNhNubj)}(hXz**Parameters** ``struct input_dev *dev`` input device which keymap is being updated. ``const struct input_keymap_entry *ke`` new keymap entry. ``unsigned int *old_keycode`` pointer to the location where old keycode should be stored. **Description** This function is the default implementation of :c:type:`input_dev.setkeycode\(\) ` method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it. The function must be called with :c:type:`input_dev.event_lock ` held. **Return** 0 on success, or a negative error code on failure.h](j\)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMghj1ubj)}(hhh](j)}(hF``struct input_dev *dev`` input device which keymap is being updated. h](j)}(h``struct input_dev *dev``h]j)}(hj1h]hstruct input_dev *dev}(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.chMdhj1ubj)}(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[hj1hMdhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMdhj1ubj)}(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.chMehj1ubj)}(hhh]j\)}(hnew keymap entry.h]hnew keymap entry.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj2hMehj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj2hMehj1ubj)}(hZ``unsigned int *old_keycode`` pointer to the location where old keycode should be stored. h](j)}(h``unsigned int *old_keycode``h]j)}(hj&2h]hunsigned int *old_keycode}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$2ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMfhj 2ubj)}(hhh]j\)}(h;pointer to the location where old keycode should be stored.h]h;pointer to the location where old keycode should be stored.}(hj?2hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj;2hMfhj<2ubah}(h]h ]h"]h$]h&]uh1jhj 2ubeh}(h]h ]h"]h$]h&]uh1jhj;2hMfhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1ubj\)}(h**Description**h]j)}(hja2h]h Description}(hjc2hhhNhNubah}(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.chMhhj1ubj\)}(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 }(hjw2hhhNhNubh)}(h.:c:type:`input_dev.setkeycode\(\) `h]j)}(hj2h]hinput_dev.setkeycode()}(hj2hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj2ubah}(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.chMghjw2ubh method. It is typically used when a driver does not provide its own implementation, but it is also exported so drivers can extend it.}(hjw2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj2hMghj1ubj\)}(hQThe function must be called with :c:type:`input_dev.event_lock ` held.h](h!The function must be called with }(hj2hhhNhNubh)}(h*:c:type:`input_dev.event_lock `h]j)}(hj2h]hinput_dev.event_lock}(hj2hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhj2ubah}(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.chMkhj2ubh held.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj2hMkhj1ubj\)}(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.chMmhj1ubj\)}(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.chMnhj1ubeh}(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](jZ)}(hinth]hint}(hj"3hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj3hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj13hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj03hMubj#)}(hinput_get_keycodeh]j))}(hinput_get_keycodeh]hinput_get_keycode}(hjC3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj?3ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj3hhhj03hMubj)}(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 }(hjl3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[3ubh)}(hhh]j))}(h input_devh]h input_dev}(hj}3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjz3ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj3modnameN classnameNjm jp )}js ]j)}jjE3sbc.input_get_keycodeasbuh1hhj[3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[3ubj))}(hdevh]hdev}(hj3hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj[3ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjW3ubj)}(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 ]j3c.input_get_keycodeasbuh1hhj3ubj)}(h h]h }(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj))}(hkeh]hke}(hj(4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj3ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjW3ubeh}(h]h ]h"]h$]h&]j@jAuh1jhj3hhhj03hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj3hhhj03hMubah}(h]j3ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj03hMhj3hhubjW)}(hhh]j\)}(h5retrieve keycode currently mapped to a given scancodeh]h5retrieve keycode currently mapped to a given scancode}(hjR4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjO4hhubah}(h]h ]h"]h$]h&]uh1jVhj3hhhj03hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj4j|jj4j}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)}(hjt4h]h Parameters}(hjv4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr4ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjn4ubj)}(hhh](j)}(hE``struct input_dev *dev`` input device which keymap is being queried h](j)}(h``struct input_dev *dev``h]j)}(hj4h]hstruct input_dev *dev}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj4ubj)}(hhh]j\)}(h*input device which keymap is being queriedh]h*input device which keymap is being queried}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubj)}(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.chMhj4ubj)}(hhh]j\)}(h keymap entryh]h keymap entry}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hMhj4ubeh}(h]h ]h"]h$]h&]uh1jhjn4ubj\)}(h**Description**h]j)}(hj5h]h Description}(hj 5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjn4ubj\)}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjn4ubeh}(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](jZ)}(hinth]hint}(hjL5hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjH5hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj[5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH5hhhjZ5hMubj#)}(hinput_set_keycodeh]j))}(hinput_set_keycodeh]hinput_set_keycode}(hjm5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hji5ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjH5hhhjZ5hMubj)}(h<(struct input_dev *dev, const struct input_keymap_entry *ke)h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j))}(h input_devh]h input_dev}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj5modnameN classnameNjm jp )}js ]j)}jjo5sbc.input_set_keycodeasbuh1hhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj))}(hdevh]hdev}(hj5hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj5ubj)}(h#const struct input_keymap_entry *keh](j)}(hj$h]hconst}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj5ubj)}(h h]h }(hj#6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j))}(hinput_keymap_entryh]hinput_keymap_entry}(hj46hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj16ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj66modnameN classnameNjm jp )}js ]j5c.input_set_keycodeasbuh1hhj5ubj)}(h h]h }(hjR6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]h*}(hj`6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj))}(hkeh]hke}(hjm6hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj5ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj5ubeh}(h]h ]h"]h$]h&]j@jAuh1jhjH5hhhjZ5hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjD5hhhjZ5hMubah}(h]j?5ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjZ5hMhjA5hhubjW)}(hhh]j\)}(h'attribute a keycode to a given scancodeh]h'attribute a keycode to a given scancode}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jVhjA5hhhjZ5hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j6j|j6j}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&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6ubj)}(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)}(hj7h]h#const struct input_keymap_entry *ke}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj 7ubj)}(hhh]j\)}(hnew keymap entryh]hnew keymap entry}(hj*7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj&7hMhj'7ubah}(h]h ]h"]h$]h&]uh1jhj 7ubeh}(h]h ]h"]h$]h&]uh1jhj&7hMhj6ubeh}(h]h ]h"]h$]h&]uh1jhj6ubj\)}(h**Description**h]j)}(hjL7h]h Description}(hjN7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ7ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6ubj\)}(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.}(hjb7hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj6ubeh}(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](jZ)}(hvoidh]hvoid}(hj7hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj7hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7hhhj7hMubj#)}(hinput_reset_deviceh]j))}(hinput_reset_deviceh]hinput_reset_device}(hj7hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj7ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj7hhhj7hMubj)}(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)}jj7sbc.input_reset_deviceasbuh1hhj7ubj)}(h h]h }(hj 8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hjh]h*}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj))}(hdevh]hdev}(hj'8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj7ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj7ubah}(h]h ]h"]h$]h&]j@jAuh1jhj7hhhj7hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj7hhhj7hMubah}(h]j7ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj7hMhj7hhubjW)}(hhh]j\)}(h'reset/restore the state of input deviceh]h'reset/restore the state of input device}(hjQ8hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjN8hhubah}(h]h ]h"]h$]h&]uh1jVhj7hhhj7hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{ji8j|ji8j}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)}(hjs8h]h Parameters}(hju8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq8ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjm8ubj)}(hhh]j)}(hE``struct input_dev *dev`` input device whose state needs to be reset h](j)}(h``struct input_dev *dev``h]j)}(hj8h]hstruct input_dev *dev}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj8ubj)}(hhh]j\)}(h*input device whose state needs to be reseth]h*input device whose state needs to be reset}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjm8ubj\)}(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.chMhjm8ubj\)}(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.chMhjm8ubeh}(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}(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj9hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMubj)}(h h]h }(hj 9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMubh)}(hhh]j))}(h input_devh]h input_dev}(hj19hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj.9ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj39modnameN classnameNjm jp )}js ]j)}jinput_allocate_devicesbc.input_allocate_deviceasbuh1hhj9hhhj9hMubj)}(h h]h }(hjR9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMubj)}(hjh]h*}(hj`9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj9hMubj#)}(hinput_allocate_deviceh]j))}(hjO9h]hinput_allocate_device}(hjq9hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjm9ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj9hhhj9hMubj)}(h(void)h]j)}(hvoidh]jZ)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj9ubah}(h]h ]h"]h$]h&]noemphj@jAuh1jhj9ubah}(h]h ]h"]h$]h&]j@jAuh1jhj9hhhj9hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj 9hhhj9hMubah}(h]j9ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj9hMhj9hhubjW)}(hhh]j\)}(h$allocate memory for new input deviceh]h$allocate memory for new input device}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9hhubah}(h]h ]h"]h$]h&]uh1jVhj9hhhj9hMubeh}(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.chMhj9ubj)}(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}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj :hKhj :ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj :hKhj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubj\)}(h**Description**h]j)}(hj2:h]h Description}(hj4:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0:ubah}(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 }(hjH:hhhNhNubj)}(h``NULL``h]hNULL}(hjP:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH:ubh.}(hjH:hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubj\)}(h**NOTE**h]j)}(hjk:h]hNOTE}(hjm:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji:ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubj\)}(hUse input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.h]hUse input_free_device() to free devices that have not been registered; input_unregister_device() should be used for already registered devices.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'devm_input_allocate_device (C function)c.devm_input_allocate_devicehNtauh1hhhhhhNhNubh)}(hhh](h)}(hBstruct input_dev * devm_input_allocate_device (struct device *dev)h]h)}(h@struct input_dev *devm_input_allocate_device(struct device *dev)h](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj: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: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_deviceasbuh1hhj:hhhj:hMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMubj)}(hjh]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhj:hMubj#)}(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"hj:hhhj:hMubj)}(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 }(hj7;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&;ubh)}(hhh]j))}(hdeviceh]hdevice}(hjH;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjE;ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjJ;modnameN classnameNjm jp )}js ]j:c.devm_input_allocate_deviceasbuh1hhj&;ubj)}(h h]h }(hjf;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&;ubj)}(hjh]h*}(hjt;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@jAuh1jhj";ubah}(h]h ]h"]h$]h&]j@jAuh1jhj:hhhj:hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj:hhhj:hMubah}(h]j:ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj:hMhj:hhubjW)}(hhh]j\)}(hallocate managed input deviceh]hallocate managed input device}(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 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}(hjE<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)}(hjo<h]hNOTE}(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.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.}(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_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](jZ)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj<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_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"hj<hhhj<hMubj)}(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}(hjJ=hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj<ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj<ubah}(h]h ]h"]h$]h&]j@jAuh1jhj<hhhj<hMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj<hhhj<hMubah}(h]j<ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj<hMhj<hhubjW)}(hhh]j\)}(h+free memory occupied by input_dev structureh]h+free memory occupied by input_dev structure}(hjt=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhjq=hhubah}(h]h ]h"]h$]h&]uh1jVhj<hhhj<hMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j=j|j=j}j~juh1hhhhhhNhNubj)}(hX**Parameters** ``struct input_dev *dev`` input device to free **Description** This function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped. Device should be allocated by input_allocate_device(). **NOTE** If there are references to the input device then memory will not be freed until last reference is dropped.h](j\)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj)}(hhh]j)}(h/``struct input_dev *dev`` input device to free h](j)}(h``struct input_dev *dev``h]j)}(hj=h]hstruct input_dev *dev}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj)}(hhh]j\)}(hinput device to freeh]hinput device to free}(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\)}(hThis function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped.h]hThis function should only be used if input_register_device() was not called yet or if it failed. Once device was registered use input_unregister_device() and memory will be freed once last reference to the device is dropped.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(h6Device should be allocated by input_allocate_device().h]h6Device should be allocated by input_allocate_device().}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(h**NOTE**h]j)}(hj&>h]hNOTE}(hj(>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$>ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubj\)}(hjIf there are references to the input device then memory will not be freed until last reference is dropped.h]hjIf there are references to the input device then memory will not be freed until last reference is dropped.}(hj<>hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_set_timestamp (C function)c.input_set_timestamphNtauh1hhhhhhNhNubh)}(hhh](h)}(hCvoid input_set_timestamp (struct input_dev *dev, ktime_t timestamp)h]h)}(hBvoid input_set_timestamp(struct input_dev *dev, ktime_t timestamp)h](jZ)}(hvoidh]hvoid}(hjk>hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjg>hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM-ubj)}(h h]h }(hjz>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg>hhhjy>hM-ubj#)}(hinput_set_timestamph]j))}(hinput_set_timestamph]hinput_set_timestamp}(hj>hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjg>hhhjy>hM-ubj)}(h*(struct input_dev *dev, ktime_t timestamp)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_set_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@jAuh1jhj>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}(hjI?hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj?ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj>ubeh}(h]h ]h"]h$]h&]j@jAuh1jhjg>hhhjy>hM-ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjc>hhhjy>hM-ubah}(h]j^>ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjy>hM-hj`>hhubjW)}(hhh]j\)}(hset timestamp for input eventsh]hset timestamp for input events}(hjs?hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM-hjp?hhubah}(h]h ]h"]h$]h&]uh1jVhj`>hhhjy>hM-ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j?j|j?j}j~juh1hhhhhhNhNubj)}(hX=**Parameters** ``struct input_dev *dev`` input device to set timestamp for ``ktime_t timestamp`` the time at which the event has occurred in CLOCK_MONOTONIC **Description** This function is intended to provide to the input system a more accurate time of when an event actually occurred. The driver should call this function as soon as a timestamp is acquired ensuring clock conversions in input_set_timestamp are done correctly. The system entering suspend state between timestamp acquisition and calling input_set_timestamp can result in inaccurate conversions.h](j\)}(h**Parameters**h]j)}(hj?h]h Parameters}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM1hj?ubj)}(hhh](j)}(h<``struct input_dev *dev`` input device to set timestamp for h](j)}(h``struct input_dev *dev``h]j)}(hj?h]hstruct input_dev *dev}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM.hj?ubj)}(hhh]j\)}(h!input device to set timestamp forh]h!input device to set timestamp for}(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?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.chM0hj?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.chM/hj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hM0hj?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.chM2hj?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.chM1hj?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.}(hjN@hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM6hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_get_timestamp (C function)c.input_get_timestamphNtauh1hhhhhhNhNubh)}(hhh](h)}(h5ktime_t * input_get_timestamp (struct input_dev *dev)h]h)}(h3ktime_t *input_get_timestamp(struct input_dev *dev)h](h)}(hhh]j))}(hktime_th]hktime_t}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj}@ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj@modnameN classnameNjm jp )}js ]j)}jinput_get_timestampsbc.input_get_timestampasbuh1hhjy@hhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMDubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy@hhhj@hMDubj)}(hjh]h*}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy@hhhj@hMDubj#)}(hinput_get_timestamph]j))}(hj@h]hinput_get_timestamp}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjy@hhhj@hMDubj)}(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@c.input_get_timestampasbuh1hhj@ubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]h*}(hj&AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj))}(hdevh]hdev}(hj3AhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj@ubah}(h]h ]h"]h$]h&]j@jAuh1jhjy@hhhj@hMDubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhju@hhhj@hMDubah}(h]jp@ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj@hMDhjr@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.chMDhjZAhhubah}(h]h ]h"]h$]h&]uh1jVhjr@hhhj@hMDubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{juAj|juAj}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)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Aubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMHhjyAubj)}(hhh]j)}(h=``struct input_dev *dev`` input device to get timestamp from h](j)}(h``struct input_dev *dev``h]j)}(hjAh]hstruct input_dev *dev}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMEhjAubj)}(hhh]j\)}(h"input device to get timestamp fromh]h"input device to get timestamp from}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjAhMEhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMEhjAubah}(h]h ]h"]h$]h&]uh1jhjyAubj\)}(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.chMGhjyAubj\)}(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.chMFhjyAubeh}(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](jZ)}(hvoidh]hvoid}(hjBhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjBhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMUubj)}(h h]h }(hj-BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj,BhMUubj#)}(hinput_set_capabilityh]j))}(hinput_set_capabilityh]hinput_set_capability}(hj?BhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj;Bubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjBhhhj,BhMUubj)}(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&]uh1hhjWBubj)}(h h]h }(hjhBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWBubh)}(hhh]j))}(h input_devh]h input_dev}(hjyBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjvBubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj{BmodnameN classnameNjm jp )}js ]j)}jjABsbc.input_set_capabilityasbuh1hhjWBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWBubj)}(hjh]h*}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWBubj))}(hdevh]hdev}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWBubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjSBubj)}(hunsigned int typeh](jZ)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjZ)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj))}(htypeh]htype}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjBubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjSBubj)}(hunsigned int codeh](jZ)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjCubj)}(h h]h }(hj,ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjZ)}(hinth]hint}(hj:ChhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjCubj)}(h h]h }(hjHChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj))}(hcodeh]hcode}(hjVChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjCubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjSBubeh}(h]h ]h"]h$]h&]j@jAuh1jhjBhhhj,BhMUubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjBhhhj,BhMUubah}(h]jBah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj,BhMUhjBhhubjW)}(hhh]j\)}(h)mark device as capable of a certain eventh]h)mark device as capable of a certain event}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMUhj}Chhubah}(h]h ]h"]h$]h&]uh1jVhjBhhhj,BhMUubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jCj|jCj}j~juh1hhhhhhNhNubj)}(hXN**Parameters** ``struct input_dev *dev`` device that is capable of emitting or accepting event ``unsigned int type`` type of the event (EV_KEY, EV_REL, etc...) ``unsigned int code`` event code **Description** In addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.h](j\)}(h**Parameters**h]j)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMYhjCubj)}(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.chMVhjCubj)}(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[hjChMVhjCubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjChMVhjCubj)}(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.chMWhjCubj)}(hhh]j\)}(h*type of the event (EV_KEY, EV_REL, etc...)h]h*type of the event (EV_KEY, EV_REL, etc...)}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjDhMWhjDubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhjDhMWhjCubj)}(h!``unsigned int code`` event code h](j)}(h``unsigned int code``h]j)}(hj3Dh]hunsigned int code}(hj5DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Dubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMXhj-Dubj)}(hhh]j\)}(h event codeh]h event code}(hjLDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjHDhMXhjIDubah}(h]h ]h"]h$]h&]uh1jhj-Dubeh}(h]h ]h"]h$]h&]uh1jhjHDhMXhjCubeh}(h]h ]h"]h$]h&]uh1jhjCubj\)}(h**Description**h]j)}(hjnDh]h Description}(hjpDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlDubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMZhjCubj\)}(hrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.h]hrIn addition to setting up corresponding bit in appropriate capability bitmap the function also adjusts dev->evbit.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMYhjCubeh}(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](jZ)}(hvoidh]hvoid}(hjDhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjDhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjDhM ubj#)}(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"hjDhhhjDhM ubj)}(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}(hjEhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj Eubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjEmodnameN classnameNjm jp )}js ]j)}jjDsbc.input_enable_softrepeatasbuh1hhjDubj)}(h h]h }(hj.EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hjh]h*}(hj 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.}(hjbHhhhNhNubah}(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.}(hjqHhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chME 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](jZ)}(hvoidh]hvoid}(hjHhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjHhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjHhM 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"hjHhhhjHhM ubj)}(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 }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hjh]h*}(hj)IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj))}(hdevh]hdev}(hj6IhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjHubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjHubah}(h]h ]h"]h$]h&]j@jAuh1jhjHhhhjHhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjHhhhjHhM ubah}(h]jHah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjHhM hjHhhubjW)}(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.chM hj]Ihhubah}(h]h ]h"]h$]h&]uh1jVhjHhhhjHhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jxIj|jxIj}j~juh1hhhhhhNhNubj)}(h**Parameters** ``struct input_dev *dev`` device to be unregistered **Description** This function unregisters an input device. Once device is unregistered the caller should not try to access it as it may get freed at any moment.h](j\)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj|Iubj)}(hhh]j)}(h4``struct input_dev *dev`` device to be unregistered h](j)}(h``struct input_dev *dev``h]j)}(hjIh]hstruct input_dev *dev}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjIubj)}(hhh]j\)}(hdevice to be unregisteredh]hdevice to be unregistered}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhj|Iubj\)}(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.chM hj|Iubj\)}(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.chM hj|Iubeh}(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](jZ)}(hinth]hint}(hj!JhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjJhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hj0JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj/JhM ubj#)}(hinput_register_handlerh]j))}(hinput_register_handlerh]hinput_register_handler}(hjBJhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>Jubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjJhhhj/JhM ubj)}(h(struct input_handler *handler)Xh]j)}(hstruct input_handler *handlerh](j)}(hjh]hstruct}(hj^JhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjZJubj)}(h h]h }(hjkJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZJubh)}(hhh]j))}(h input_handlerh]h input_handler}(hj|JhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjyJubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj~JmodnameN classnameNjm jp )}js ]j)}jjDJsbc.input_register_handlerasbuh1hhjZJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZJubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZJubj))}(hhandlerh]hhandler}(hjJhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjZJubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjVJubah}(h]h ]h"]h$]h&]j@jAuh1jhjJhhhj/JhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjJhhhj/JhM ubah}(h]jJah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj/JhM hjJhhubjW)}(hhh]j\)}(hregister a new input handlerh]hregister a new input handler}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjJhhubah}(h]h ]h"]h$]h&]uh1jVhjJhhhj/JhM 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)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(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)}(hj"Kh]hstruct input_handler *handler}(hj$KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Kubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjKubj)}(hhh]j\)}(hhandler to be registeredh]hhandler to be registered}(hj;KhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj7KhM hj8Kubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhj7KhM hjKubah}(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.}(hjsKhhhNhNubah}(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)}(hNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj))}(hfnh]hfn}(hjKNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjNubj)}(h)h]h)}(hjYNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hj2Nh]h(}(hjgNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hjh]hstruct}(hjtNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j))}(h input_handleh]h input_handle}(hjNhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjNubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjNmodnameN classnameNjm jp )}js ]jMc.input_handler_for_each_handleasbuh1hhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h,h]h,}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjZ)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjNubj)}(hjh]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hj[Nh]h)}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjXMubeh}(h]h ]h"]h$]h&]j@jAuh1jhjMhhhj1MhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjMhhhj1MhM ubah}(h]jMah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj1MhM hjMhhubjW)}(hhh]j\)}(hhandle iteratorh]hhandle iterator}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjOhhubah}(h]h ]h"]h$]h&]uh1jVhjMhhhj1MhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j5Oj|j5Oj}j~juh1hhhhhhNhNubj)}(hX**Parameters** ``struct input_handler *handler`` input handler to iterate ``void *data`` data for the callback ``int (*fn)(struct input_handle *, void *)`` function to be called for each handle **Description** Iterate over **bus**'s list of devices, and call **fn** for each, passing it **data** and stop when **fn** returns a non-zero value. The function is using RCU to traverse the list and therefore may be using in atomic contexts. The **fn** callback is invoked from RCU critical section and thus must not sleep.h](j\)}(h**Parameters**h]j)}(hj?Oh]h Parameters}(hjAOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Oubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj9Oubj)}(hhh](j)}(h;``struct input_handler *handler`` input handler to iterate h](j)}(h!``struct input_handler *handler``h]j)}(hj^Oh]hstruct input_handler *handler}(hj`OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Oubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjXOubj)}(hhh]j\)}(hinput handler to iterateh]hinput handler to iterate}(hjwOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjsOhM hjtOubah}(h]h ]h"]h$]h&]uh1jhjXOubeh}(h]h ]h"]h$]h&]uh1jhjsOhM hjUOubj)}(h%``void *data`` data for the callback h](j)}(h``void *data``h]j)}(hjOh]h void *data}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjOubj)}(hhh]j\)}(hdata for the callbackh]hdata for the callback}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOhM hjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhM hjUOubj)}(hS``int (*fn)(struct input_handle *, void *)`` function to be called for each handle h](j)}(h,``int (*fn)(struct input_handle *, void *)``h]j)}(hjOh]h(int (*fn)(struct input_handle *, void *)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjOubj)}(hhh]j\)}(h%function to be called for each handleh]h%function to be called for each handle}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjOhM hjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhM hjUOubeh}(h]h ]h"]h$]h&]uh1jhj9Oubj\)}(h**Description**h]j)}(hj Ph]h Description}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Pubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj9Oubj\)}(hX4Iterate over **bus**'s list of devices, and call **fn** for each, passing it **data** and stop when **fn** returns a non-zero value. The function is using RCU to traverse the list and therefore may be using in atomic contexts. The **fn** callback is invoked from RCU critical section and thus must not sleep.h](h Iterate over }(hj!PhhhNhNubj)}(h**bus**h]hbus}(hj)PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Pubh’s list of devices, and call }(hj!PhhhNhNubj)}(h**fn**h]hfn}(hj;PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Pubh for each, passing it }(hj!PhhhNhNubj)}(h**data**h]hdata}(hjMPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Pubh and stop when }(hj!PhhhNhNubj)}(h**fn**h]hfn}(hj_PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Pubh} returns a non-zero value. The function is using RCU to traverse the list and therefore may be using in atomic contexts. The }(hj!PhhhNhNubj)}(h**fn**h]hfn}(hjqPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!PubhG callback is invoked from RCU critical section and thus must not sleep.}(hj!PhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj9Oubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h"input_register_handle (C function)c.input_register_handlehNtauh1hhhhhhNhNubh)}(hhh](h)}(h7int input_register_handle (struct input_handle *handle)h]h)}(h6int input_register_handle(struct input_handle *handle)h](jZ)}(hinth]hint}(hjPhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjPhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMp ubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhjPhMp ubj#)}(hinput_register_handleh]j))}(hinput_register_handleh]hinput_register_handle}(hjPhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjPhhhjPhMp ubj)}(h(struct input_handle *handle)h]j)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubh)}(hhh]j))}(h input_handleh]h input_handle}(hjQhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjQubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjQmodnameN classnameNjm jp )}js ]j)}jjPsbc.input_register_handleasbuh1hhjPubj)}(h h]h }(hj%QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hjh]h*}(hj3QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj))}(hhandleh]hhandle}(hj@QhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjPubah}(h]h ]h"]h$]h&]j@jAuh1jhjPhhhjPhMp ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjPhhhjPhMp ubah}(h]jPah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjPhMp hjPhhubjW)}(hhh]j\)}(hregister a new input handleh]hregister a new input handle}(hjjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMp hjgQhhubah}(h]h ]h"]h$]h&]uh1jVhjPhhhjPhMp ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jQj|jQj}j~juh1hhhhhhNhNubj)}(hX7**Parameters** ``struct input_handle *handle`` handle to register **Description** This function puts a new input handle onto device's and handler's lists so that events can flow through it once it is opened using input_open_device(). This function is supposed to be called from handler's connect() method.h](j\)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMt hjQubj)}(hhh]j)}(h3``struct input_handle *handle`` handle to register h](j)}(h``struct input_handle *handle``h]j)}(hjQh]hstruct input_handle *handle}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMq hjQubj)}(hhh]j\)}(hhandle to registerh]hhandle to register}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQhMq hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjQhMq hjQubah}(h]h ]h"]h$]h&]uh1jhjQubj\)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMs hjQubj\)}(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.chMr hjQubj\)}(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.}(hj RhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chMv hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhhhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h$input_unregister_handle (C function)c.input_unregister_handlehNtauh1hhhhhhNhNubh)}(hhh](h)}(h:void input_unregister_handle (struct input_handle *handle)h]h)}(h9void input_unregister_handle(struct input_handle *handle)h](jZ)}(hvoidh]hvoid}(hj:RhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj6RhhhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM ubj)}(h h]h }(hjIRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6RhhhjHRhM ubj#)}(hinput_unregister_handleh]j))}(hinput_unregister_handleh]hinput_unregister_handle}(hj[RhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjWRubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj6RhhhjHRhM ubj)}(h(struct input_handle *handle)h]j)}(hstruct input_handle *handleh](j)}(hjh]hstruct}(hjwRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjsRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsRubh)}(hhh]j))}(h input_handleh]h input_handle}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjRubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjRmodnameN classnameNjm jp )}js ]j)}jj]Rsbc.input_unregister_handleasbuh1hhjsRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsRubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsRubj))}(hhandleh]hhandle}(hjRhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjsRubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjoRubah}(h]h ]h"]h$]h&]j@jAuh1jhj6RhhhjHRhM ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj2RhhhjHRhM ubah}(h]j-Rah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjHRhM hj/RhhubjW)}(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.chM hjRhhubah}(h]h ]h"]h$]h&]uh1jVhj/RhhhjHRhM ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jSj|jSj}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)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubj)}(hhh]j)}(h5``struct input_handle *handle`` handle to unregister h](j)}(h``struct input_handle *handle``h]j)}(hj;Sh]hstruct input_handle *handle}(hj=ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Subah}(h]h ]h"]h$]h&]uh1jhV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hj5Subj)}(hhh]j\)}(hhandle to unregisterh]hhandle to unregister}(hjTShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjPShM hjQSubah}(h]h ]h"]h$]h&]uh1jhj5Subeh}(h]h ]h"]h$]h&]uh1jhjPShM hj2Subah}(h]h ]h"]h$]h&]uh1jhjSubj\)}(h**Description**h]j)}(hjvSh]h Description}(hjxShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtSubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubj\)}(hEThis function removes input handle from device's and handler's lists.h]hIThis function removes input handle from device’s and handler’s lists.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubj\)}(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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j[hV/var/lib/git/docbuild/linux/Documentation/driver-api/input:10: ./drivers/input/input.chM hjSubeh}(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](jZ)}(hinth]hint}(hjShhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjShhhV/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 ubj)}(h>(int legacy_base, unsigned int legacy_num, bool allow_dynamic)h](j)}(hint legacy_baseh](jZ)}(hinth]hint}(hjThhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjTubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj))}(h legacy_baseh]h legacy_base}(hj#ThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjTubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjSubj)}(hunsigned int legacy_numh](jZ)}(hunsignedh]hunsigned}(hjffbit** should be already set up before calling this function. Once ff device is created you need to setup its upload, erase, playback and other handlers before registering input deviceh](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}(hjahhhNhNubah}(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}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjahMhjaubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjahMhj`ubj)}(hO``unsigned int max_effects`` maximum number of effects supported by the device h](j)}(h``unsigned int max_effects``h]j)}(hj7ah]hunsigned int max_effects}(hj9ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5aubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMhj1aubj)}(hhh]j\)}(h1maximum number of effects supported by the deviceh]h1maximum number of effects supported by the device}(hjPahhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjLahMhjMaubah}(h]h ]h"]h$]h&]uh1jhj1aubeh}(h]h ]h"]h$]h&]uh1jhjLahMhj`ubeh}(h]h ]h"]h$]h&]uh1jhj`ubj\)}(h**Description**h]j)}(hjrah]h Description}(hjtahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpaubah}(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. }(hjahhhNhNubj)}(h**dev->ffbit**h]h dev->ffbit}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh should be already set up before calling this function. Once ff device is created you need to setup its upload, erase, playback and other handlers before registering input device}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.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](jZ)}(hvoidh]hvoid}(hjahhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjahhhX/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"hjahhhjahMPubj)}(h(struct input_dev *dev)h]j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjbubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubh)}(hhh]j))}(h input_devh]h input_dev}(hj$bhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj!bubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj&bmodnameN classnameNjm jp )}js ]j)}jjasbc.input_ff_destroyasbuh1hhjbubj)}(h h]h }(hjDbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hjh]h*}(hjRbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj))}(hdevh]hdev}(hj_bhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjbubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjaubah}(h]h ]h"]h$]h&]j@jAuh1jhjahhhjahMPubeh}(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}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMPhjbhhubah}(h]h ]h"]h$]h&]uh1jVhjahhhjahMPubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jbj|jbj}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)}(hjbh]h Parameters}(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.chMThjbubj)}(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&]uh1jhjbubj\)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMShjbubj\)}(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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j[hX/var/lib/git/docbuild/linux/Documentation/driver-api/input:13: ./drivers/input/ff-core.chMRhjbubeh}(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](jZ)}(hinth]hint}(hjJchhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjFchhh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMubj)}(h h]h }(hjYchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFchhhjXchMubj#)}(hinput_ff_create_memlessh]j))}(hinput_ff_create_memlessh]hinput_ff_create_memless}(hjkchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjgcubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjFchhhjXchMubj)}(hd(struct input_dev *dev, void *data, int (*play_effect)(struct input_dev*, void*, struct ff_effect*))h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j))}(h input_devh]h input_dev}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjcmodnameN classnameNjm jp )}js ]j)}jjmcsbc.input_ff_create_memlessasbuh1hhjcubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj))}(hdevh]hdev}(hjchhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjcubj)}(h void *datah](jZ)}(hvoidh]hvoid}(hjchhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjcubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj))}(hdatah]hdata}(hj"dhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjcubj)}(h?int (*play_effect)(struct input_dev*, void*, struct ff_effect*)h](jZ)}(hinth]hint}(hj;dhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj7dubj)}(h h]h }(hjIdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hj2Nh]h(}(hjWdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hjh]h*}(hjddhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj))}(h play_effecth]h play_effect}(hjqdhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj7dubj)}(hj[Nh]h)}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hj2Nh]h(}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7dubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubh)}(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 ]jcc.input_ff_create_memlessasbuh1hhj7dubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hjNh]h,}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubjZ)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj7dubj)}(hjh]h*}(hj ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hjNh]h,}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(h h]h }(hj%ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hjh]hstruct}(hj3ehhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj7dubj)}(h h]h }(hj@ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubh)}(hhh]j))}(h ff_effecth]h ff_effect}(hjQehhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjNeubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjSemodnameN classnameNjm jp )}js ]jcc.input_ff_create_memlessasbuh1hhj7dubj)}(hjh]h*}(hjoehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubj)}(hj[Nh]h)}(hj|ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7dubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjcubeh}(h]h ]h"]h$]h&]j@jAuh1jhjFchhhjXchMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjBchhhjXchMubah}(h]j=cah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjXchMhj?chhubjW)}(hhh]j\)}(h'create memoryless force-feedback deviceh]h'create memoryless force-feedback device}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjehhubah}(h]h ]h"]h$]h&]uh1jVhj?chhhjXchMubeh}(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)}(hjfh]h void *data}(hj!fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhjfubj)}(hhh]j\)}(h6driver-specific data to be passed into **play_effect**h](h'driver-specific data to be passed into }(hj8fhhhNhNubj)}(h**play_effect**h]h play_effect}(hj@fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8fubeh}(h]h ]h"]h$]h&]uh1j[hj4fhMhj5fubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jhj4fhMhjeubj)}(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)}(hjffh]hBint (*play_effect)(struct input_dev *, void *, struct ff_effect *)}(hjhfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdfubah}(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}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h[/var/lib/git/docbuild/linux/Documentation/driver-api/input:16: ./drivers/input/ff-memless.chMhj|fubah}(h]h ]h"]h$]h&]uh1jhj`fubeh}(h]h ]h"]h$]h&]uh1jhj{fhMhjeubeh}(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}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhhhhhKubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt_slot (C struct)c.input_mt_slothNtauh1hhjfhhhNhNubh)}(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}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjghhubah}(h]h ]h"]h$]h&]uh1jVhjfhhhjfhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{j3gj|j3gj}j~juh1hhhhjfhNhNubj)}(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}(hj?ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;gubh:}(hj;ghhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhj7gubj)}(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; };}hjXgsbah}(h]h ]h"]h$]h&]j@jAuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhj7gubj\)}(h **Members**h]j)}(hjigh]hMembers}(hjkghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjggubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK#hj7gubj)}(hhh](j)}(h:``abs`` holds current values of ABS_MT axes for this slot h](j)}(h``abs``h]j)}(hjgh]habs}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjgubj)}(hhh]j\)}(h1holds current values of ABS_MT axes for this sloth]h1holds current values of ABS_MT axes for this slot}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjghKhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjghKhjgubj)}(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&]uh1jhjghKhjgubj)}(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}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKhjhubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jhjhhKhjgubeh}(h]h ]h"]h$]h&]uh1jhj7gubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt (C struct) c.input_mthNtauh1hhjfhhhNhNubh)}(hhh](h)}(hinput_mth]h)}(hstruct input_mth](j)}(hjh]hstruct}(hjThhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjPhhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK!ubj)}(h h]h }(hjbhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhhhjahhK!ubj#)}(hinput_mth]j))}(hjNhh]hinput_mt}(hjthhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjphubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjPhhhhjahhK!ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjLhhhhjahhK!ubah}(h]jGhah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjahhK!hjIhhhubjW)}(hhh]j\)}(hstate of tracked contactsh]hstate of tracked contacts}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK#hjhhhubah}(h]h ]h"]h$]h&]uh1jVhjIhhhhjahhK!ubeh}(h]h ](justructeh"]h$]h&]jzjuj{jhj|jhj}j~juh1hhhhjfhNhNubj)}(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&]uh1jhjhubh:}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK'hjhubj)}(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)hjhubj\)}(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.hhK3hjhubj)}(hhh](j)}(h5``trkid`` stores MT tracking ID for the next contact h](j)}(h ``trkid``h]j)}(hjih]htrkid}(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*stores MT tracking ID for the next contacth]h*stores MT tracking ID for the next contact}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK%hjiubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjihK%hjhubj)}(h1``num_slots`` number of MT slots the device uses h](j)}(h ``num_slots``h]j)}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:iubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK&hj6iubj)}(hhh]j\)}(h"number of MT slots the device usesh]h"number of MT slots the device uses}(hjUihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjQihK&hjRiubah}(h]h ]h"]h$]h&]uh1jhj6iubeh}(h]h ]h"]h$]h&]uh1jhjQihK&hjhubj)}(h-``slot`` MT slot currently being transmitted h](j)}(h``slot``h]j)}(hjuih]hslot}(hjwihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsiubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK'hjoiubj)}(hhh]j\)}(h#MT slot currently being transmittedh]h#MT slot currently being transmitted}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK'hjiubah}(h]h ]h"]h$]h&]uh1jhjoiubeh}(h]h ]h"]h$]h&]uh1jhjihK'hjhubj)}(h#``flags`` input_mt operation flags h](j)}(h ``flags``h]j)}(hjih]hflags}(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\)}(hinput_mt operation flagsh]hinput_mt operation flags}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjihK(hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(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}(hjjhhhNhNubah}(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)}(hj jh]hred}(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\)}(h*reduced cost matrix for in-kernel trackingh]h*reduced cost matrix for in-kernel tracking}(hj9jhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj5jhK*hj6jubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhj5jhK*hjhubj)}(hC``slots`` array of slots holding current values of tracked contactsh](j)}(h ``slots``h]j)}(hjYjh]hslots}(hj[jhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWjubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK*hjSjubj)}(hhh]j\)}(h9array of slots holding current values of tracked contactsh]h9array of slots holding current values of tracked contacts}(hjrjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK+hjojubah}(h]h ]h"]h$]h&]uh1jhjSjubeh}(h]h ]h"]h$]h&]uh1jhjnjhK*hjhubeh}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hinput_mt_pos (C struct)c.input_mt_poshNtauh1hhjfhhhNhNubh)}(hhh](h)}(h input_mt_posh]h)}(hstruct input_mt_posh](j)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjjhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK1ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhK1ubj#)}(h input_mt_posh]j))}(hjjh]h input_mt_pos}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjjhhhjjhK1ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjjhhhjjhK1ubah}(h]jjah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjjhK1hjjhhubjW)}(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&]uh1jVhjjhhhjjhK1ubeh}(h]h ](justructeh"]h$]h&]jzjuj{j kj|j kj}j~juh1hhhhjfhNhNubj)}(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}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh:}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKxhjkubj)}(h&struct input_mt_pos { s16 x, y; };h]h&struct input_mt_pos { s16 x, y; };}hj2ksbah}(h]h ]h"]h$]h&]j@jAuh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKzhjkubj\)}(h **Members**h]j)}(hjCkh]hMembers}(hjEkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAkubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhK~hjkubj)}(hhh](j)}(h``x`` horizontal coordinate h](j)}(h``x``h]j)}(hjbkh]hx}(hjdkhhhNhNubah}(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}(hj{khhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjwkhKvhjxkubah}(h]h ]h"]h$]h&]uh1jhj\kubeh}(h]h ]h"]h$]h&]uh1jhjwkhKvhjYkubj)}(h``y`` vertical coordinateh](j)}(h``y``h]j)}(hjkh]hy}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKvhjkubj)}(hhh]j\)}(hvertical coordinateh]hvertical coordinate}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:22: ./include/linux/input/mt.hhKwhjkubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1jhjkhKvhjYkubeh}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h input_mt_init_slots (C function)c.input_mt_init_slotshNtauh1hhjfhhhNhNubh)}(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](jZ)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjkhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjlhKubj#)}(hinput_mt_init_slotsh]j))}(hinput_mt_init_slotsh]hinput_mt_init_slots}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjkhhhjlhKubj)}(hC(struct input_dev *dev, unsigned int num_slots, unsigned int flags)h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hj2lhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj.lubj)}(h h]h }(hj?lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.lubh)}(hhh]j))}(h input_devh]h input_dev}(hjPlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjMlubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjRlmodnameN classnameNjm jp )}js ]j)}jjlsbc.input_mt_init_slotsasbuh1hhj.lubj)}(h h]h }(hjplhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.lubj)}(hjh]h*}(hj~lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.lubj))}(hdevh]hdev}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj.lubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj*lubj)}(hunsigned int num_slotsh](jZ)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjZ)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjlubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj))}(h num_slotsh]h num_slots}(hjlhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj*lubj)}(hunsigned int flagsh](jZ)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjlubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjZ)}(hinth]hint}(hjmhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjlubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj))}(hflagsh]hflags}(hj-mhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj*lubeh}(h]h ]h"]h$]h&]j@jAuh1jhjkhhhjlhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjkhhhjlhKubah}(h]jkah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjlhKhjkhhubjW)}(hhh]j\)}(hinitialize MT input slotsh]hinitialize MT input slots}(hjWmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjTmhhubah}(h]h ]h"]h$]h&]uh1jVhjkhhhjlhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jomj|jomj}j~juh1hhhhjfhNhNubj)}(hXe**Parameters** ``struct input_dev *dev`` input device supporting MT events and finger tracking ``unsigned int num_slots`` number of slots used by the device ``unsigned int flags`` mt tasks to handle in core **Description** This function allocates all necessary memory for MT slot handling in the input device, prepares the ABS_MT_SLOT and ABS_MT_TRACKING_ID events for use and sets up appropriate buffers. Depending on the flags set, it also performs pointer emulation and frame synchronization. May be called repeatedly. Returns -EINVAL if attempting to reinitialize with a different number of slots.h](j\)}(h**Parameters**h]j)}(hjymh]h Parameters}(hj{mhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwmubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjsmubj)}(hhh](j)}(hP``struct input_dev *dev`` input device supporting MT events and finger tracking h](j)}(h``struct input_dev *dev``h]j)}(hjmh]hstruct input_dev *dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjmubj)}(hhh]j\)}(h5input device supporting MT events and finger trackingh]h5input device supporting MT events and finger tracking}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjmubj)}(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&]uh1jhjmhKhjmubj)}(h2``unsigned int flags`` mt tasks to handle in core h](j)}(h``unsigned int flags``h]j)}(hj nh]hunsigned int flags}(hj nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjnubj)}(hhh]j\)}(hmt tasks to handle in coreh]hmt tasks to handle in core}(hj#nhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjnhKhj nubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jhjnhKhjmubeh}(h]h ]h"]h$]h&]uh1jhjsmubj\)}(h**Description**h]j)}(hjEnh]h Description}(hjGnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCnubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKhjsmubj\)}(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.chKhjsmubj\)}(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.}(hjjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chK#hjsmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h#input_mt_destroy_slots (C function)c.input_mt_destroy_slotshNtauh1hhjfhhhNhNubh)}(hhh](h)}(h3void input_mt_destroy_slots (struct input_dev *dev)h]h)}(h2void input_mt_destroy_slots(struct input_dev *dev)h](jZ)}(hvoidh]hvoid}(hjnhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjnhhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKiubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjnhKiubj#)}(hinput_mt_destroy_slotsh]j))}(hinput_mt_destroy_slotsh]hinput_mt_destroy_slots}(hjnhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjnhhhjnhKiubj)}(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 }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj)}(hjh]h*}(hj"ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubj))}(hdevh]hdev}(hj/ohhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjnubah}(h]h ]h"]h$]h&]j@jAuh1jhjnhhhjnhKiubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjnhhhjnhKiubah}(h]jnah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjnhKihjnhhubjW)}(hhh]j\)}(h&frees the MT slots of the input deviceh]h&frees the MT slots of the input device}(hjYohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKihjVohhubah}(h]h ]h"]h$]h&]uh1jVhjnhhhjnhKiubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jqoj|jqoj}j~juh1hhhhjfhNhNubj)}(h**Parameters** ``struct input_dev *dev`` input device with allocated MT slots **Description** This function is only needed in error path as the input core will automatically free the MT slots when the device is destroyed.h](j\)}(h**Parameters**h]j)}(hj{oh]h Parameters}(hj}ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyoubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKmhjuoubj)}(hhh]j)}(h?``struct input_dev *dev`` input device with allocated MT slots h](j)}(h``struct input_dev *dev``h]j)}(hjoh]hstruct input_dev *dev}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKjhjoubj)}(hhh]j\)}(h$input device with allocated MT slotsh]h$input device with allocated MT slots}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjohKjhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjohKjhjoubah}(h]h ]h"]h$]h&]uh1jhjuoubj\)}(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.chKlhjuoubj\)}(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.chKkhjuoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'input_mt_report_slot_state (C function)c.input_mt_report_slot_statehNtauh1hhjfhhhNhNubh)}(hhh](h)}(h\bool input_mt_report_slot_state (struct input_dev *dev, unsigned int tool_type, bool active)h]h)}(h[bool input_mt_report_slot_state(struct input_dev *dev, unsigned int tool_type, bool active)h](jZ)}(hjTh]hbool}(hjphhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjphhhY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chKzubj)}(h h]h }(hj(phhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhj'phKzubj#)}(hinput_mt_report_slot_stateh]j))}(hinput_mt_report_slot_stateh]hinput_mt_report_slot_state}(hj:phhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj6pubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjphhhj'phKzubj)}(h<(struct input_dev *dev, unsigned int tool_type, bool active)h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjVphhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjRpubj)}(h h]h }(hjcphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRpubh)}(hhh]j))}(h input_devh]h input_dev}(hjtphhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjqpubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjvpmodnameN classnameNjm jp )}js ]j)}jjReturns zero on success, or negative error in case of failure.h]h>Returns zero on success, or negative error in case of failure.}(hj(}hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hY/var/lib/git/docbuild/linux/Documentation/driver-api/input:25: ./drivers/input/input-mt.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h%input_mt_get_slot_by_key (C function)c.input_mt_get_slot_by_keyhNtauh1hhjfhhhNhNubh)}(hhh](h)}(h=int input_mt_get_slot_by_key (struct input_dev *dev, int key)h]h)}(h``keymap_size`` number of entries (initialized) in this keymaph](j)}(h``keymap_size``h]j)}(hjXh]h keymap_size}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjRubj)}(hhh]j\)}(h.number of entries (initialized) in this keymaph]h.number of entries (initialized) in this keymap}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjDhhhjchNubj\)}(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:31: ./include/linux/input/matrix_keypad.hhKhjDhhubj\)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:31: ./include/linux/input/matrix_keypad.hhKhjDhhubeh}(h]matrix-keyboards-keypadsah ]h"]matrix keyboards/keypadsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSparse keymap supporth]hSparse keymap support}(hjˀhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȀhhhhhK#ubh)}(hhh]h}(h]h ]h"]h$]h&]entries](hkey_entry (C struct) c.key_entryhNtauh1hhjȀhhhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhNubh)}(hhh](h)}(h key_entryh]h)}(hstruct key_entryh](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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj#)}(h key_entryh]j))}(hjh]h key_entry}(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%keymap entry for use in sparse keymaph]h%keymap entry for use in sparse keymap}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhj2hhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKubeh}(h]h ](justructeh"]h$]h&]jzjuj{jMj|jMj}j~juh1hhhhjȀhjhNubj)}(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}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh:}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjQubj)}(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; }; };}hjrsbah}(h]h ]h"]h$]h&]j@jAuh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjQubj\)}(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:37: ./include/linux/input/sparse-keymap.hhK#hjQubj)}(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)}(hjh]htype}(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\)}(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.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h<``code`` Device-specific data identifying the button/switch h](j)}(h``code``h]j)}(hj܁h]hcode}(hjށhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjځubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjցubj)}(hhh]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&]uh1jhjցubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj)}(hhh]j\)}(h anonymoush]h anonymous}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj*hKhjubj)}(h0``keycode`` KEY_* code assigned to a key/button h](j)}(h ``keycode``h]j)}(hjNh]hkeycode}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjHubj)}(hhh]j\)}(h#KEY_* code assigned to a key/buttonh]h#KEY_* code assigned to a key/button}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjchKhjdubah}(h]h ]h"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]uh1jhjchKhjubj)}(h7``sw`` struct with code/value used by KE_SW and KE_VSW h](j)}(h``sw``h]j)}(hjh]hsw}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h+``sw.code`` SW_* code assigned to a switch h](j)}(h ``sw.code``h]j)}(hjh]hsw.code}(hj‚hhhNhNubah}(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}(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``sw.value`` Value that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h](j)}(h ``sw.value``h]j)}(hjh]hsw.value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubj)}(hhh]j\)}(hValue that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.h]hValue that should be sent in an input even when KE_SW switch is toggled. KE_VSW switches ignore this field and expect driver to supply value for the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjȀhhhjhNubj\)}(h**Description**h]j)}(hj<h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjȀhhubj\)}(hThis structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.h]hThis structure defines an entry in a sparse keymap used by some input devices for which traditional table-based approach is not suitable.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hd/var/lib/git/docbuild/linux/Documentation/driver-api/input:37: ./include/linux/input/sparse-keymap.hhKhjȀhhubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h.sparse_keymap_entry_from_scancode (C function)#c.sparse_keymap_entry_from_scancodehNtauh1hhjȀhhhNhNubh)}(hhh](h)}(h_struct key_entry * sparse_keymap_entry_from_scancode (struct input_dev *dev, unsigned int code)h]h)}(h]struct key_entry *sparse_keymap_entry_from_scancode(struct input_dev *dev, unsigned int code)h](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjvhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhK7ubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}j!sparse_keymap_entry_from_scancodesb#c.sparse_keymap_entry_from_scancodeasbuh1hhjvhhhjhK7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhK7ubj)}(hjh]h*}(hjȃhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjhK7ubj#)}(h!sparse_keymap_entry_from_scancodeh]j))}(hjh]h!sparse_keymap_entry_from_scancode}(hjكhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjՃubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjvhhhjhK7ubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j#c.sparse_keymap_entry_from_scancodeasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int codeh](jZ)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj`ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj))}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj`ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjvhhhjhK7ubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjrhhhjhK7ubah}(h]jmah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhK7hjohhubjW)}(hhh]j\)}(hperform sparse keymap lookuph]hperform sparse keymap lookup}(hjƄhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK7hjÄhhubah}(h]h ]h"]h$]h&]uh1jVhjohhhjhK7ubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jބj|jބj}j~juh1hhhhjȀhNhNubj)}(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)}(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.chK8hjubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK8hjubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hj@h]hunsigned int code}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK9hj:ubj)}(hhh]j\)}(h Scan codeh]h Scan code}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjUhK9hjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhK9hjubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(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 }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjh]hstruct key_entry}(hjhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chK:hjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhK:hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjȀhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h-sparse_keymap_entry_from_keycode (C function)"c.sparse_keymap_entry_from_keycodehNtauh1hhjȀhhhNhNubh)}(hhh](h)}(hastruct key_entry * sparse_keymap_entry_from_keycode (struct input_dev *dev, unsigned int keycode)h]h)}(h_struct key_entry *sparse_keymap_entry_from_keycode(struct input_dev *dev, unsigned int keycode)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj߅hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߅hhhjhKLubh)}(hhh]j))}(h key_entryh]h key_entry}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}j sparse_keymap_entry_from_keycodesb"c.sparse_keymap_entry_from_keycodeasbuh1hhj߅hhhjhKLubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߅hhhjhKLubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj߅hhhjhKLubj#)}(h sparse_keymap_entry_from_keycodeh]j))}(hj h]h sparse_keymap_entry_from_keycode}(hjBhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj>ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj߅hhhjhKLubj)}(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&]uh1hhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j))}(h input_devh]h input_dev}(hj{hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjxubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj}modnameN classnameNjm jp )}js ]j"c.sparse_keymap_entry_from_keycodeasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjYubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjUubj)}(hunsigned int keycodeh](jZ)}(hunsignedh]hunsigned}(hj͆hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjɆubj)}(h h]h }(hjۆhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɆubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjɆubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjɆubj))}(hkeycodeh]hkeycode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjɆubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjUubeh}(h]h ]h"]h$]h&]j@jAuh1jhj߅hhhjhKLubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjۅhhhjhKLubah}(h]jօah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKLhj؅hhubjW)}(hhh]j\)}(hperform sparse keymap lookuph]hperform sparse keymap lookup}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKLhj,hhubah}(h]h ]h"]h$]h&]uh1jVhj؅hhhjhKLubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jGj|jGj}j~juh1hhhhjȀhNhNubj)}(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)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKPhjKubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjph]hstruct input_dev *dev}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKMhjjubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhKMhjgubj)}(h"``unsigned int keycode`` Key code h](j)}(h``unsigned int keycode``h]j)}(hjh]hunsigned int keycode}(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.chKNhjubj)}(hhh]j\)}(hKey codeh]hKey code}(hj‡hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKNhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubj\)}(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.chKPhjKubj\)}(hvThis function is used to perform :c:type:`struct key_entry ` lookup in an input device using sparse keymap.h](h!This function is used to perform }(hjhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjh]hstruct key_entry}(hjhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjg refdomainjureftypetype refexplicitrefwarnjm jq ju key_entryuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKOhjubh/ lookup in an input device using sparse keymap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hj!hKOhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjȀhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h sparse_keymap_setup (C function)c.sparse_keymap_setuphNtauh1hhjȀhhhNhNubh)}(hhh](h)}(hint sparse_keymap_setup (struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev *, struct key_entry *))h]h)}(hint sparse_keymap_setup(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))h](jZ)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjHhhh^/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&]uh1jhjHhhhjZhKubj#)}(hsparse_keymap_setuph]j))}(hsparse_keymap_setuph]hsparse_keymap_setup}(hjmhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjiubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjHhhhjZhKubj)}(hk(struct input_dev *dev, const struct key_entry *keymap, int (*setup)(struct input_dev*, struct key_entry*))h](j)}(hstruct input_dev *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjosbc.sparse_keymap_setupasbuh1hhjubj)}(h h]h }(hjLjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjՈhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hconst struct key_entry *keymaph](j)}(hj$h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h key_entryh]h key_entry}(hj4hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj6modnameN classnameNjm jp )}js ]jÈc.sparse_keymap_setupasbuh1hhjubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hkeymaph]hkeymap}(hjmhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(h2int (*setup)(struct input_dev*, struct key_entry*)h](jZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj2Nh]h(}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hsetuph]hsetup}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubj)}(hj[Nh]h)}(hjʉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj2Nh]h(}(hj׉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jÈc.sparse_keymap_setupasbuh1hhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjNh]h,}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h key_entryh]h key_entry}(hjfhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjcubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjhmodnameN classnameNjm jp )}js ]jÈc.sparse_keymap_setupasbuh1hhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj[Nh]h)}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjHhhhjZhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjDhhhjZhKubah}(h]j?ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjZhKhjAhhubjW)}(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.chKhjhhubah}(h]h ]h"]h$]h&]uh1jVhjAhhhjZhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jҊj|jҊj}j~juh1hhhhjȀhNhNubj)}(hXC**Parameters** ``struct input_dev *dev`` Input device ``const struct key_entry *keymap`` Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entry ``int (*setup)(struct input_dev *, struct key_entry *)`` Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL`` **Description** The function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.h](j\)}(h**Parameters**h]j)}(hj܊h]h Parameters}(hjފhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڊubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj֊ubj)}(hhh](j)}(h'``struct input_dev *dev`` Input device h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]j\)}(h Input deviceh]h Input device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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)}(hj4h]hconst struct key_entry *keymap}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj.ubj)}(hhh]j\)}(h[Keymap in form of array of :c:type:`key_entry` structures ending with ``KE_END`` type entryh](hKeymap in form of array of }(hjMhhhNhNubh)}(h:c:type:`key_entry`h]j)}(hjWh]h key_entry}(hjYhhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjUubah}(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.chKhjMubh structures ending with }(hjMhhhNhNubj)}(h ``KE_END``h]hKE_END}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh type entry}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjthKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhjIhKhjubj)}(h``int (*setup)(struct input_dev *, struct key_entry *)`` Function that can be used to adjust keymap entries depending on device's needs, may be ``NULL`` h](j)}(h8``int (*setup)(struct input_dev *, struct key_entry *)``h]j)}(hjh]h4int (*setup)(struct input_dev *, struct key_entry *)}(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_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}(hjċhhhNhNubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj֊ubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj֊ubj\)}(hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.h]hThe function calculates size and allocates copy of the original keymap after which sets up input device event bits appropriately. The allocated copy of the keymap is automatically freed when it is no longer needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj֊ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjȀhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sparse_keymap_report_entry (C function)c.sparse_keymap_report_entryhNtauh1hhjȀhhhNhNubh)}(hhh](h)}(hyvoid sparse_keymap_report_entry (struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h]h)}(hxvoid sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)h](jZ)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj.hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj@hKubj#)}(hsparse_keymap_report_entryh]j))}(hsparse_keymap_report_entryh]hsparse_keymap_report_entry}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjOubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj.hhhj@hKubj)}(hY(struct input_dev *dev, const struct key_entry *ke, unsigned int value, bool autorelease)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}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjUsbc.sparse_keymap_report_entryasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj))}(hdevh]hdev}(hjȌhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjkubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjgubj)}(hconst struct key_entry *keh](j)}(hj$h]hconst}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj݌ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݌ubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj݌ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݌ubh)}(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_report_entryasbuh1hhj݌ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݌ubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݌ubj))}(hkeh]hke}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj݌ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjgubj)}(hunsigned int valueh](jZ)}(hunsignedh]hunsigned}(hjlhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj))}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjhubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjgubj)}(hbool autoreleaseh](jZ)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjʍhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(h autoreleaseh]h autorelease}(hj؍hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjgubeh}(h]h ]h"]h$]h&]j@jAuh1jhj.hhhj@hKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj*hhhj@hKubah}(h]j%ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhj@hKhj'hhubjW)}(hhh]j\)}(h-report event corresponding to given key entryh]h-report event corresponding to given key entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjhhubah}(h]h ]h"]h$]h&]uh1jVhj'hhhj@hKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}j~juh1hhhhjȀhNhNubj)}(hX **Parameters** ``struct input_dev *dev`` Input device for which event should be reported ``const struct key_entry *ke`` key entry describing event ``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) ``bool autorelease`` Signals whether release event should be emitted for ``KE_KEY`` entries right after reporting press event, ignored by all other entries **Description** This function is used to report input event described by given :c:type:`struct key_entry `.h](j\)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.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)}(hjCh]hstruct input_dev *dev}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhj=ubj)}(hhh]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[hjXhKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhKhj:ubj)}(h:``const struct key_entry *ke`` key entry describing event h](j)}(h``const struct key_entry *ke``h]j)}(hj|h]hconst struct key_entry *ke}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjvubj)}(hhh]j\)}(hkey entry describing eventh]hkey entry describing event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhKhj:ubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjh]hunsigned int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chKhjubj)}(hhh]j\)}(h`.h](h?This function is used to report input event described by given }(hjdhhhNhNubh)}(h&:c:type:`struct key_entry `h]j)}(hjnh]hstruct key_entry}(hjphhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjlubah}(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.chKhjdubh.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjȀhhhNhNubh)}(hhh]h}(h]h ]h"]h$]h&]entries](h'sparse_keymap_report_event (C function)c.sparse_keymap_report_eventhNtauh1hhjȀhhhNhNubh)}(hhh](h)}(hpbool sparse_keymap_report_event (struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h]h)}(hobool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, unsigned int value, bool autorelease)h](jZ)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMubj)}(h h]h }(hjďhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjÏhMubj#)}(hsparse_keymap_report_eventh]j))}(hsparse_keymap_report_eventh]hsparse_keymap_report_event}(hj֏hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjҏubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjÏhMubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(h input_devh]h input_dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jj؏sbc.sparse_keymap_report_eventasbuh1hhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdevh]hdev}(hjKhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int codeh](jZ)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj`ubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj))}(hcodeh]hcode}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj`ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int valueh](jZ)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjÐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjZ)}(hinth]hint}(hjѐhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjߐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hvalueh]hvalue}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hbool autoreleaseh](jZ)}(hjTh]hbool}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(h autoreleaseh]h autorelease}(hj!hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjhhhjÏhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjÏhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjÏhMhjhhubjW)}(hhh]j\)}(h,report event corresponding to given scancodeh]h,report event corresponding to given scancode}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjÏhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jcj|jcj}j~juh1hhhhjȀhNhNubj)}(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)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1j[h^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chM hjgubj)}(hhh](j)}(h;``struct input_dev *dev`` Input device using sparse keymap h](j)}(h``struct input_dev *dev``h]j)}(hjh]hstruct input_dev *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(h Input device using sparse keymaph]h Input device using sparse keymap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h ``unsigned int code`` Scan code h](j)}(h``unsigned int code``h]j)}(hjőh]hunsigned int code}(hjǑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjÑubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(h Scan codeh]h Scan code}(hjޑhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjڑhMhjۑubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjڑhMhjubj)}(hT``unsigned int value`` Value that should be reported (ignored by ``KE_SW`` entries) h](j)}(h``unsigned int value``h]j)}(hjh]hunsigned int value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/input:40: ./drivers/input/sparse-keymap.chMhjubj)}(hhh]j\)}(h`) of the received data byte ``receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](j\)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjϔhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˔ubh:}(hj˔hhhNhNubeh}(h]h ]h"]h$]h&]uh1j[hW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjǔubj)}(hXstruct ps2dev { struct serio *serio; struct mutex cmd_mutex; wait_queue_head_t wait; unsigned long flags; u8 cmdbuf[8]; u8 cmdcnt; u8 nak; ps2_pre_receive_handler_t pre_receive_handler; ps2_receive_handler_t receive_handler; };h]hXstruct ps2dev { struct serio *serio; struct mutex cmd_mutex; wait_queue_head_t wait; unsigned long flags; u8 cmdbuf[8]; u8 cmdcnt; u8 nak; ps2_pre_receive_handler_t pre_receive_handler; ps2_receive_handler_t receive_handler; };}hjsbah}(h]h ]h"]h$]h&]j@jAuh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjǔubj\)}(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.hhK5hjǔubj)}(hhh](j)}(h/``serio`` a serio port used by the PS/2 device h](j)}(h ``serio``h]j)}(hjh]hserio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK%hjubj)}(hhh]j\)}(h$a serio port used by the PS/2 deviceh]h$a serio port used by the PS/2 device}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj-hK%hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hK%hjubj)}(hL``cmd_mutex`` a mutex ensuring that only one command is executing at a time h](j)}(h ``cmd_mutex``h]j)}(hjQh]h cmd_mutex}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK&hjKubj)}(hhh]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}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjfhK&hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhK&hjubj)}(hP``wait`` a waitqueue used to signal completion from the serio interrupt handler h](j)}(h``wait``h]j)}(hjh]hwait}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK'hjubj)}(hhh]j\)}(hFa waitqueue used to signal completion from the serio interrupt handlerh]hFa waitqueue used to signal completion from the serio interrupt handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK'hjubj)}(hM``flags`` various internal flags indicating stages of PS/2 command execution h](j)}(h ``flags``h]j)}(hjÕh]hflags}(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\)}(hBvarious internal flags indicating stages of PS/2 command executionh]hBvarious internal flags indicating stages of PS/2 command execution}(hjܕhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjؕhK(hjٕubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjؕhK(hjubj)}(h+``cmdbuf`` buffer holding command response h](j)}(h ``cmdbuf``h]j)}(hjh]hcmdbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK)hjubj)}(hhh]j\)}(hbuffer holding command responseh]hbuffer holding command response}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK)hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK)hjubj)}(h?``cmdcnt`` outstanding number of bytes of the command response h](j)}(h ``cmdcnt``h]j)}(hj5h]hcmdcnt}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK*hj/ubj)}(hhh]j\)}(h3outstanding number of bytes of the command responseh]h3outstanding number of bytes of the command response}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjJhK*hjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhK*hjubj)}(hA``nak`` a byte transmitted by the device when it refuses command h](j)}(h``nak``h]j)}(hjnh]hnak}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK+hjhubj)}(hhh]j\)}(h8a byte transmitted by the device when it refuses commandh]h8a byte transmitted by the device when it refuses command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhK+hjubj)}(h``pre_receive_handler`` checks communication errors and returns disposition (:c:type:`enum ps2_disposition `) of the received data byte h](j)}(h``pre_receive_handler``h]j)}(hjh]hpre_receive_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK-hjubj)}(hhh]j\)}(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)}(hjʖh]henum ps2_disposition}(hj̖hhhNhNubah}(h]h ](j[ juc-typeeh"]h$]h&]uh1jhjȖubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK-hjubj)}(h```receive_handler`` main handler of particular PS/2 protocol, such as keyboard or mouse protocolh](j)}(h``receive_handler``h]j)}(hjh]hreceive_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhW/var/lib/git/docbuild/linux/Documentation/driver-api/input:45: ./include/linux/libps2.hhK.hjubj)}(hhh]j\)}(hLmain handler of particular PS/2 protocol, such as keyboard or mouse protocolh]hLmain handler of particular PS/2 protocol, such as keyboard or mouse protocol}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK.hjubeh}(h]h ]h"]h$]h&]uh1jhjǔubeh}(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](jZ)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjYhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjkhKbubj#)}(h ps2_sendbyteh]j))}(h ps2_sendbyteh]h ps2_sendbyte}(hj~hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjzubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjYhhhjkhKbubj)}(h6(struct ps2dev *ps2dev, u8 byte, unsigned int timeout)h](j)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j)}jjsbc.ps2_sendbyteasbuh1hhjubj)}(h h]h }(hjؗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hu8 byteh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jԗc.ps2_sendbyteasbuh1hhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hbyteh]hbyte}(hj;hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int timeouth](jZ)}(hunsignedh]hunsigned}(hjThhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjPubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubjZ)}(hinth]hint}(hjphhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjPubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj))}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjYhhhjkhKbubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjUhhhjkhKbubah}(h]jPah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjkhKbhjRhhubjW)}(hhh]j\)}(h7sends a byte to the device and wait for acknowledgementh]h7sends a byte to the device and wait for acknowledgement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKbhjhhubah}(h]h ]h"]h$]h&]uh1jVhjRhhhjkhKbubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jΘj|jΘj}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)}(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.chKfhjҘubj)}(hhh](j)}(h<``struct ps2dev *ps2dev`` a PS/2 device to send the data to h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKchjubj)}(hhh]j\)}(h!a PS/2 device to send the data toh]h!a PS/2 device to send the data to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[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)}(hj0h]hu8 byte}(hj2hhhNhNubah}(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.chKdhj*ubj)}(hhh]j\)}(hdata to be sent to the deviceh]hdata to be sent to the device}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjEhKdhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhKdhjubj)}(hS``unsigned int timeout`` timeout for sending the data and receiving an acknowledge h](j)}(h``unsigned int timeout``h]j)}(hjih]hunsigned int timeout}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKehjcubj)}(hhh]j\)}(h9timeout for sending the data and receiving an acknowledgeh]h9timeout for sending the data and receiving an acknowledge}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj~hKehjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hKehjubeh}(h]h ]h"]h$]h&]uh1jhjҘubj\)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKghjҘubj\)}(h\The function doesn't handle retransmission, the caller is expected to handle it when needed.h]h^The function doesn’t handle retransmission, the caller is expected to handle it when needed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKfhjҘubj\)}(h9ps2_sendbyte() can only be called from a process context.h]h9ps2_sendbyte() can only be called from a process context.}(hjəhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKihjҘubeh}(h]h ] kernelindentah"]h$]h&]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](jZ)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKzubj#)}(hps2_begin_commandh]j))}(hps2_begin_commandh]hps2_begin_command}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhKzubj)}(h(struct ps2dev *ps2dev)h]j)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j))}(hps2devh]hps2dev}(hjShhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjPubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjUmodnameN classnameNjm jp )}js ]j)}jjsbc.ps2_begin_commandasbuh1hhj1ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj1ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj-ubah}(h]h ]h"]h$]h&]j@jAuh1jhjhhhjhKzubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhKzubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKzhjhhubjW)}(hhh]j\)}(h0mark beginning of execution of a complex commandh]h0mark beginning 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.chKzhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhKzubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jКj|jКj}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)}(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.chK~hjԚubj)}(hhh]j)}(h>``struct ps2dev *ps2dev`` a PS/2 device executing the command h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjh]hstruct ps2dev *ps2dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK{hjubj)}(hhh]j\)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhK{hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK{hjubah}(h]h ]h"]h$]h&]uh1jhjԚubj\)}(h**Description**h]j)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK}hjԚubj\)}(hcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.h]hcSerializes a complex/compound command. Once command is finished ps2_end_command() should be called.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chK|hjԚubeh}(h]h ] kernelindentah"]h$]h&]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](jZ)}(hvoidh]hvoid}(hjyhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjuhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuhhhjhKubj#)}(hps2_end_commandh]j))}(hps2_end_commandh]hps2_end_command}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjuhhhjhKubj)}(h(struct ps2dev *ps2dev)h]j)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hjÛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hps2devh]hps2dev}(hjԛhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjћubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj֛modnameN classnameNjm jp )}js ]j)}jjsbc.ps2_end_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@jAuh1jhjubah}(h]h ]h"]h$]h&]j@jAuh1jhjuhhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjqhhhjhKubah}(h]jlah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhjnhhubjW)}(hhh]j\)}(h*mark end of execution of a complex commandh]h*mark end of execution of a complex command}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj6hhubah}(h]h ]h"]h$]h&]uh1jVhjnhhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jQj|jQj}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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjUubj)}(hhh]j)}(h=``struct ps2dev *ps2dev`` a PS/2 device executing the commandh](j)}(h``struct ps2dev *ps2dev``h]j)}(hjzh]hstruct ps2dev *ps2dev}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjtubj)}(hhh]j\)}(h#a PS/2 device executing the commandh]h#a PS/2 device executing the command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhKhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(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](jZ)}(hvoidh]hvoid}(hjԜhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjМhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjМhhhjhKubj#)}(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"hjМhhhjhKubj)}(h>(struct ps2dev *ps2dev, size_t maxbytes, unsigned int timeout)h](j)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj ubj)}(h h]h }(hjhhhNhNubah}(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 reftargetj1modnameN classnameNjm jp )}js ]j)}jjsb c.ps2_drainasbuh1hhj ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj))}(hps2devh]hps2dev}(hjjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj ubj)}(hsize_t maxbytesh](h)}(hhh]j))}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]jK c.ps2_drainasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hmaxbytesh]hmaxbytes}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj ubj)}(hunsigned int timeouth](jZ)}(hunsignedh]hunsigned}(hj˝hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjǝubj)}(h h]h }(hjٝhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǝubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjǝubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjǝubj))}(htimeouth]htimeout}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjǝubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj ubeh}(h]h ]h"]h$]h&]j@jAuh1jhjМhhhjhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj̜hhhjhKubah}(h]jǜah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhKhjɜhhubjW)}(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}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj*hhubah}(h]h ]h"]h$]h&]uh1jVhjɜhhhjhKubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jEj|jEj}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)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjIubj)}(hhh](j)}(hA``struct ps2dev *ps2dev`` the PS/2 device that should be drained h](j)}(h``struct ps2dev *ps2dev``h]j)}(hjnh]hstruct ps2dev *ps2dev}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjhubj)}(hhh]j\)}(h&the PS/2 device that should be drainedh]h&the PS/2 device that should be drained}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhKhjeubj)}(h:``size_t maxbytes`` maximum number of bytes to be drained h](j)}(h``size_t maxbytes``h]j)}(hjh]hsize_t maxbytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjubj)}(hhh]j\)}(h%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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjeubj)}(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&]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\)}(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&]uh1jhjڞubeh}(h]h ]h"]h$]h&]uh1jhjhKhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubeh}(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](jZ)}(hjTh]hbool}(hj:hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj6hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjGhKubj#)}(hps2_is_keyboard_idh]j))}(hps2_is_keyboard_idh]hps2_is_keyboard_id}(hjZhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjVubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj6hhhjGhKubj)}(h (u8 id_byte)h]j)}(h u8 id_byteh](h)}(hhh]j))}(hu8h]hu8}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjvubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj{modnameN classnameNjm jp )}js ]j)}jj\sbc.ps2_is_keyboard_idasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj))}(hid_byteh]hid_byte}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjrubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjnubah}(h]h ]h"]h$]h&]j@jAuh1jhj6hhhjGhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhj2hhhjGhKubah}(h]j-ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjGhKhj/hhubjW)}(hhh]j\)}(h>checks received ID byte against the list of known keyboard IDsh]h>checks received ID byte against the list of known keyboard IDs}(hjџhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjΟhhubah}(h]h ]h"]h$]h&]uh1jVhj/hhhjGhKubeh}(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.chװKhjubj)}(hhh]j)}(h/``u8 id_byte`` data byte that should be checkedh](j)}(h``u8 id_byte``h]j)}(hjh]h u8 id_byte}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhj ubj)}(hhh]j\)}(h data byte that should be checkedh]h data byte that should be checked}(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 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](jZ)}(hinth]hint}(hjlhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjzhKubj#)}(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"hjhhhhjzhKubj)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int 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(hjĠubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjɠmodnameN classnameNjm jp )}js ]j)}jjsbc.__ps2_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@jAuh1jhjubj)}(h u8 *paramh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetj modnameN classnameNjm jp )}js ]jc.__ps2_commandasbuh1hhjubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hparamh]hparam}(hjWhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int commandh](jZ)}(hunsignedh]hunsigned}(hjphhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjlubj)}(h h]h }(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjlubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj))}(hcommandh]hcommand}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjlubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhjhhhhjzhKubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjdhhhjzhKubah}(h]j_ah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjzhKhjahhubjW)}(hhh]j\)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hjҡhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjϡhhubah}(h]h ]h"]h$]h&]uh1jVhjahhhjzhKubeh}(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)}(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.chKhj ubj)}(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(hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(h``u8 *param`` a buffer containing parameters to be sent along with the command, or place where the results of the command execution will be deposited, or both h](j)}(h ``u8 *param``h]j)}(hjLh]h u8 *param}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chKhjFubj)}(hhh]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}(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&]uh1jhjahKhj ubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hjh]hunsigned int command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]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.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(h**Description**h]j)}(hj¢h]h Description}(hjĢhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.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.}(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_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](jZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj#)}(h ps2_commandh]j))}(h ps2_commandh]h ps2_command}(hj(hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj$ubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMubj)}(h8(struct ps2dev *ps2dev, u8 *param, unsigned int command)h](j)}(hstruct ps2dev *ps2devh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhj@ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubh)}(hhh]j))}(hps2devh]hps2dev}(hjbhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj_ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjdmodnameN classnameNjm jp )}js ]j)}jj*sb c.ps2_commandasbuh1hhj@ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj))}(hps2devh]hps2dev}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj@ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj<ubj)}(h u8 *paramh](h)}(hhh]j))}(hu8h]hu8}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j~ c.ps2_commandasbuh1hhjubj)}(h h]h }(hjףhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hparamh]hparam}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj<ubj)}(hunsigned int commandh](jZ)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjZ)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hcommandh]hcommand}(hjChhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj<ubeh}(h]h ]h"]h$]h&]j@jAuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMhjhhubjW)}(hhh]j\)}(hsend a command to PS/2 deviceh]hsend a command to PS/2 device}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jj|jj}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)}(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 *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}(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&]uh1jhjhMhjubj)}(h``unsigned int command`` command word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response h](j)}(h``unsigned int command``h]j)}(hj!h]hunsigned int command}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]j\)}(hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command responseh]hcommand word that encodes the command itself, as well as number of additional parameter bytes that should be sent to the device and expected length of the command response}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj\)}(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.chMhjubj\)}(hps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.h]hps2_command() serializes the command execution so that only one command can be executed at a time for either individual port or the entire 8042 controller.}(hjshhhNhNubah}(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_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](jZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj#)}(hps2_sliced_commandh]j))}(hps2_sliced_commandh]hps2_sliced_command}(hjåhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMubj)}(h#(struct ps2dev *ps2dev, u8 command)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)}jjťsbc.ps2_sliced_commandasbuh1hhjۥ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}(hj8hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjۥubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjץubj)}(h u8 commandh](h)}(hhh]j))}(hu8h]hu8}(hjThhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjQubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjVmodnameN classnameNjm jp )}js ]jc.ps2_sliced_commandasbuh1hhjMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj))}(hcommandh]hcommand}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjMubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjץubeh}(h]h ]h"]h$]h&]j@jAuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMhjhhubjW)}(hhh]j\)}(h)sends an extended PS/2 command to a mouseh]h)sends an extended PS/2 command to a mouse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjhhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j¦j|j¦j}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)}(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.chMhjƦubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u8 command`` command byte h](j)}(h``u8 command``h]j)}(hj$h]h u8 command}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]j\)}(h command byteh]h command byte}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj9hMhj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubeh}(h]h ]h"]h$]h&]uh1jhjƦubj\)}(h**Description**h]j)}(hj_h]h Description}(hjahhhNhNubah}(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.chMhjƦubj\)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjƦubeh}(h]h ] kernelindentah"]h$]h&]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](jZ)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj#)}(hps2_inith]j))}(hps2_inith]hps2_init}(hjŧhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hjhhhjhMubj)}(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&]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)}jjǧsb c.ps2_initasbuh1hhjݧubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݧubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjݧubj))}(hps2devh]hps2dev}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjݧubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj٧ubj)}(hstruct serio *serioh](j)}(hjh]hstruct}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjOubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubh)}(hhh]j))}(hserioh]hserio}(hjqhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjnubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjsmodnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjOubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj))}(hserioh]hserio}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjOubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj٧ubj)}(h-ps2_pre_receive_handler_t pre_receive_handlerh](h)}(hhh]j))}(hps2_pre_receive_handler_th]hps2_pre_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_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@jAuh1jhj٧ubj)}(h%ps2_receive_handler_t receive_handlerh](h)}(hhh]j))}(hps2_receive_handler_th]hps2_receive_handler_t}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjmodnameN classnameNjm jp )}js ]j c.ps2_initasbuh1hhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hreceive_handlerh]hreceive_handler}(hj:hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhj٧ubeh}(h]h ]h"]h$]h&]j@jAuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjhhhjhMubah}(h]jah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMhjhhubjW)}(hhh]j\)}(hinitializes ps2dev structureh]hinitializes ps2dev structure}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjahhubah}(h]h ]h"]h$]h&]uh1jVhjhhhjhMubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{j|j|j|j}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)}(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)}(h6``struct ps2dev *ps2dev`` structure to be initialized 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\)}(hstructure to be initializedh]hstructure to be initialized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hC``struct serio *serio`` serio port associated with the PS/2 device h](j)}(h``struct serio *serio``h]j)}(hjީh]hstruct serio *serio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܩubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjةubj)}(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&]uh1jhjةubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hh``ps2_pre_receive_handler_t pre_receive_handler`` validation handler to check basic communication state h](j)}(h1``ps2_pre_receive_handler_t pre_receive_handler``h]j)}(hjh]h-ps2_pre_receive_handler_t pre_receive_handler}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjubj)}(hhh]j\)}(h5validation handler to check basic communication stateh]h5validation handler to check basic communication state}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(h@``ps2_receive_handler_t receive_handler`` main protocol handler h](j)}(h)``ps2_receive_handler_t receive_handler``h]j)}(hjPh]h%ps2_receive_handler_t receive_handler}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMhjJubj)}(hhh]j\)}(hmain protocol handlerh]hmain protocol handler}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjehMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(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\)}(h>Prepares ps2dev structure for use in drivers for PS/2 devices.h]h>Prepares ps2dev structure for use in drivers for PS/2 devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]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_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}(hjӪhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjЪubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjժmodnameN classnameNjm jp )}js ]j)}j ps2_interruptsbc.ps2_interruptasbuh1hhj̪hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̪hhhjhMEubj#)}(h ps2_interrupth]j))}(hjh]h ps2_interrupt}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubah}(h]h ](j;j<eh"]h$]h&]j@jAuh1j"hj̪hhhjhMEubj)}(h2(struct serio *serio, u8 data, unsigned int flags)h](j)}(hstruct serio *serioh](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]j ah"]h$]h&]uh1hhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j))}(hserioh]hserio}(hj@hhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj=ubah}(h]h ]h"]h$]h&] refdomainjureftypej reftargetjBmodnameN classnameNjm jp )}js ]jc.ps2_interruptasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hserioh]hserio}(hjyhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hu8 datah](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_interruptasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj))}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubj)}(hunsigned int flagsh](jZ)}(hunsignedh]hunsigned}(hjګhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj֫ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֫ubjZ)}(hinth]hint}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj֫ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֫ubj))}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]j4ah"]h$]h&]uh1j(hj֫ubeh}(h]h ]h"]h$]h&]noemphj@jAuh1jhjubeh}(h]h ]h"]h$]h&]j@jAuh1jhj̪hhhjhMEubeh}(h]h ]h"]h$]h&]j@jAjHuh1hjIjJhjȪhhhjhMEubah}(h]jêah ](jNjOeh"]h$]h&]jSjT)jUhuh1hhjhMEhjŪhhubjW)}(hhh]j\)}(h)common interrupt handler for PS/2 devicesh]h)common interrupt handler for PS/2 devices}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMEhj9hhubah}(h]h ]h"]h$]h&]uh1jVhjŪhhhjhMEubeh}(h]h ](jufunctioneh"]h$]h&]jzjuj{jTj|jTj}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.chMIhjXubj)}(hhh](j)}(h2``struct serio *serio`` serio port for the device h](j)}(h``struct serio *serio``h]j)}(hj}h]hstruct serio *serio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMFhjwubj)}(hhh]j\)}(hserio port for the deviceh]hserio port for the device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjtubj)}(h1``u8 data`` a data byte received from the device h](j)}(h ``u8 data``h]j)}(hjh]hu8 data}(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.chMGhjubj)}(hhh]j\)}(h$a data byte received from the deviceh]h$a data byte received from the device}(hjϬhhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjˬhMGhj̬ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjˬhMGhjtubj)}(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 }(hjhhhNhNubj)}(h``SERIO_PARITY``h]h SERIO_PARITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh or }(hjhhhNhNubj)}(h``SERIO_TIMEOUT``h]h SERIO_TIMEOUT}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& indicating state of the data transfer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMHhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMIhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubj\)}(h**Description**h]j)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMKhjXubj\)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j[h]/var/lib/git/docbuild/linux/Documentation/driver-api/input:48: ./drivers/input/serio/libps2.chMJhjXubeh}(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_handlerjerror_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}(jjjfjfjAj>jŀj€jjjj}u nametypes}(jjfjAjŀjjuh}(jhjfhhhjjjjjjjLjQjIjNj6j;j`jejc"jh"j#j#j>'jC'j(j(j@*jE*j+j+jB-jG-j/j/j3j3j?5jD5j7j7j9j 9j:j:j<j<j^>jc>jp@ju@jBjBjDjDjGjGjHjHjJjJjKjKjMjMjPjPj-Rj2RjSjSjVj"Vj}WjWj*Zj/Zj\j\j_j_jajaj=cjBcj>jfjfjfjGhjLhjjjjjkjkjnjnj pjpjrjrjtjtjvjvjxjxjyjyjJ}jO}j€jDjajgjjȀjjjmjrjօjۅj?jDj%j*jjj}jj jj\jajPjUjjjljqjǜj̜j-j2j_jdjjjjjjjêjȪu 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.