04 Jan, 2012

1 commit


26 May, 2011

1 commit


12 May, 2011

1 commit


19 Apr, 2011

1 commit


19 Mar, 2011

1 commit


03 Feb, 2011

1 commit

  • This reverts commit 5fdbe44d033d059cc56c2803e6b4dbd8cb4e5e39.

    Apparently there exist userspace programs that expect to be able to
    "loop back" and distribute to readers events written into
    /dev/input/eventX and this change made for the benefit of SysRq
    handler broke them. Now that SysRq uses alternative method to suppress
    filtering of the events it re-injects we can safely revert this change.

    Reported-by: Kristen Carlson Accardi
    Cc: stable@kernel.org
    Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     

01 Feb, 2011

1 commit


08 Jan, 2011

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (58 commits)
    Input: wacom_w8001 - support pen or touch only devices
    Input: wacom_w8001 - use __set_bit to set keybits
    Input: bu21013_ts - fix misuse of logical operation in place of bitop
    Input: i8042 - add Acer Aspire 5100 to the Dritek list
    Input: wacom - add support for digitizer in Lenovo W700
    Input: psmouse - disable the synaptics extension on OLPC machines
    Input: psmouse - fix up Synaptics comment
    Input: synaptics - ignore bogus mt packet
    Input: synaptics - add multi-finger and semi-mt support
    Input: synaptics - report clickpad property
    input: mt: Document interface updates
    Input: fix double equality sign in uevent
    Input: introduce device properties
    hid: egalax: Add support for Wetab (726b)
    Input: include MT library as source for kerneldoc
    MAINTAINERS: Update input-mt entry
    hid: egalax: Add support for Samsung NB30 netbook
    hid: egalax: Document the new devices in Kconfig
    hid: egalax: Add support for Wetab
    hid: egalax: Convert to MT slots
    ...

    Fixed up trivial conflict in drivers/input/keyboard/Kconfig

    Linus Torvalds
     

07 Jan, 2011

1 commit


28 Dec, 2010

1 commit


20 Dec, 2010

2 commits

  • Looking at the uevent stream for input devices, all properties are on
    the form "A=B" except the bitmap values, which are on the form
    "A==B". This bug has been around at least since 2007, and the input
    uevent code has been untouched since. The recent addition of device
    properties suggests this is a good time for a remedy.

    Acked-by: Dmitry Torokhov
    Signed-off-by: Henrik Rydberg

    Henrik Rydberg
     
  • Today, userspace sets up an input device based on the data it emits.
    This is not always enough; a tablet and a touchscreen may emit exactly
    the same data, for instance, but the former should be set up with a
    pointer whereas the latter does not need to. Recently, a new type of
    touchpad has emerged where the buttons are under the pad, which
    changes logic without changing the emitted data. This patch introduces
    a new ioctl, EVIOCGPROP, which enables user access to a set of device
    properties useful during setup. The properties are given as a bitmap
    in the same fashion as the event types, and are also made available
    via sysfs, uevent and /proc/bus/input/devices.

    Acked-by: Ping Cheng
    Acked-by: Chase Douglas
    Acked-by: Dmitry Torokhov
    Signed-off-by: Henrik Rydberg

    Henrik Rydberg
     

17 Dec, 2010

1 commit


16 Dec, 2010

1 commit


01 Dec, 2010

1 commit


20 Nov, 2010

1 commit


19 Nov, 2010

1 commit


18 Nov, 2010

1 commit


11 Nov, 2010

1 commit

  • Sometimes input handlers (as opposed to input devices) have a need to
    inject (or re-inject) events back into input core. For example sysrq
    filter may want to inject previously suppressed Alt-SysRq so that user
    can take a screen print. In this case we do not want to pass such events
    back to the same same handler that injected them to avoid loops.

    Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     

04 Nov, 2010

1 commit

  • KGDB, much like the resume process, needs to be able to mark all keys that
    were pressed at the time we dropped into the debuggers as "released", since
    it is unlikely that the keys stay pressed for the entire duration of the
    debug session.

    Also we need to make sure that input_reset_device() and input_dev_suspend()
    only attempt to change state of currenlt opened devices since closed devices
    may not be ready to accept IO requests.

    Tested-by: Jason Wessel
    Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     

25 Oct, 2010

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (75 commits)
    Input: wacom - specify Cinitq supported tools
    Input: ab8500-ponkey - fix IRQ freeing in error path
    Input: adp5588-keys - use more obvious i2c_device_id name string
    Input: ad7877 - switch to using threaded IRQ
    Input: ad7877 - use attribute group to control visibility of attributes
    Input: serio - add support for PS2Mult multiplexer protocol
    Input: wacom - properly enable runtime PM
    Input: ad7877 - filter events where pressure is beyond the maximum
    Input: ad7877 - implement EV_KEY:BTN_TOUCH reporting
    Input: ad7877 - implement specified chip select behavior
    Input: hp680_ts_input - use cancel_delayed_work_sync()
    Input: mousedev - correct lockdep annotation
    Input: ads7846 - switch to using threaded IRQ
    Input: serio - support multiple child devices per single parent
    Input: synaptics - simplify pass-through port handling
    Input: add ROHM BU21013 touch panel controller support
    Input: omap4-keypad - wake-up on events & long presses
    Input: omap4-keypad - fix interrupt line configuration
    Input: omap4-keypad - SYSCONFIG register configuration
    Input: omap4-keypad - use platform device helpers
    ...

    Linus Torvalds
     

15 Oct, 2010

1 commit

  • All file_operations should get a .llseek operation so we can make
    nonseekable_open the default for future file operations without a
    .llseek pointer.

    The three cases that we can automatically detect are no_llseek, seq_lseek
    and default_llseek. For cases where we can we can automatically prove that
    the file offset is always ignored, we use noop_llseek, which maintains
    the current behavior of not returning an error from a seek.

    New drivers should normally not use noop_llseek but instead use no_llseek
    and call nonseekable_open at open time. Existing drivers can be converted
    to do the same when the maintainer knows for certain that no user code
    relies on calling seek on the device file.

    The generated code is often incorrectly indented and right now contains
    comments that clarify for each added line why a specific variant was
    chosen. In the version that gets submitted upstream, the comments will
    be gone and I will manually fix the indentation, because there does not
    seem to be a way to do that using coccinelle.

    Some amount of new code is currently sitting in linux-next that should get
    the same modifications, which I will do at the end of the merge window.

    Many thanks to Julia Lawall for helping me learn to write a semantic
    patch that does all this.

    ===== begin semantic patch =====
    // This adds an llseek= method to all file operations,
    // as a preparation for making no_llseek the default.
    //
    // The rules are
    // - use no_llseek explicitly if we do nonseekable_open
    // - use seq_lseek for sequential files
    // - use default_llseek if we know we access f_pos
    // - use noop_llseek if we know we don't access f_pos,
    // but we still want to allow users to call lseek
    //
    @ open1 exists @
    identifier nested_open;
    @@
    nested_open(...)
    {

    }

    @ open exists@
    identifier open_f;
    identifier i, f;
    identifier open1.nested_open;
    @@
    int open_f(struct inode *i, struct file *f)
    {

    }

    @ read disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {

    }

    @ read_no_fpos disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ write @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {

    }

    @ write_no_fpos @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ fops0 @
    identifier fops;
    @@
    struct file_operations fops = {
    ...
    };

    @ has_llseek depends on fops0 @
    identifier fops0.fops;
    identifier llseek_f;
    @@
    struct file_operations fops = {
    ...
    .llseek = llseek_f,
    ...
    };

    @ has_read depends on fops0 @
    identifier fops0.fops;
    identifier read_f;
    @@
    struct file_operations fops = {
    ...
    .read = read_f,
    ...
    };

    @ has_write depends on fops0 @
    identifier fops0.fops;
    identifier write_f;
    @@
    struct file_operations fops = {
    ...
    .write = write_f,
    ...
    };

    @ has_open depends on fops0 @
    identifier fops0.fops;
    identifier open_f;
    @@
    struct file_operations fops = {
    ...
    .open = open_f,
    ...
    };

    // use no_llseek if we call nonseekable_open
    ////////////////////////////////////////////
    @ nonseekable1 depends on !has_llseek && has_open @
    identifier fops0.fops;
    identifier nso ~= "nonseekable_open";
    @@
    struct file_operations fops = {
    ... .open = nso, ...
    +.llseek = no_llseek, /* nonseekable */
    };

    @ nonseekable2 depends on !has_llseek @
    identifier fops0.fops;
    identifier open.open_f;
    @@
    struct file_operations fops = {
    ... .open = open_f, ...
    +.llseek = no_llseek, /* open uses nonseekable */
    };

    // use seq_lseek for sequential files
    /////////////////////////////////////
    @ seq depends on !has_llseek @
    identifier fops0.fops;
    identifier sr ~= "seq_read";
    @@
    struct file_operations fops = {
    ... .read = sr, ...
    +.llseek = seq_lseek, /* we have seq_read */
    };

    // use default_llseek if there is a readdir
    ///////////////////////////////////////////
    @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier readdir_e;
    @@
    // any other fop is used that changes pos
    struct file_operations fops = {
    ... .readdir = readdir_e, ...
    +.llseek = default_llseek, /* readdir is present */
    };

    // use default_llseek if at least one of read/write touches f_pos
    /////////////////////////////////////////////////////////////////
    @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read.read_f;
    @@
    // read fops use offset
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = default_llseek, /* read accesses f_pos */
    };

    @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ... .write = write_f, ...
    + .llseek = default_llseek, /* write accesses f_pos */
    };

    // Use noop_llseek if neither read nor write accesses f_pos
    ///////////////////////////////////////////////////////////

    @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    identifier write_no_fpos.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ...
    .write = write_f,
    .read = read_f,
    ...
    +.llseek = noop_llseek, /* read and write both use no f_pos */
    };

    @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write_no_fpos.write_f;
    @@
    struct file_operations fops = {
    ... .write = write_f, ...
    +.llseek = noop_llseek, /* write uses no f_pos */
    };

    @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    @@
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = noop_llseek, /* read uses no f_pos */
    };

    @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    @@
    struct file_operations fops = {
    ...
    +.llseek = noop_llseek, /* no read or write fn */
    };
    ===== End semantic patch =====

    Signed-off-by: Arnd Bergmann
    Cc: Julia Lawall
    Cc: Christoph Hellwig

    Arnd Bergmann
     

10 Sep, 2010

1 commit

  • Several devices use a high number of bits for scancodes. One important
    group is the Remote Controllers. Some new protocols like RC-6 define a
    scancode space of 64 bits.

    The current EVIO[CS]GKEYCODE ioctls allow replace the scancode/keycode
    translation tables, but it is limited to up to 32 bits for scancode.

    Also, if userspace wants to clean the existing table, replacing it by
    a new one, it needs to run a loop calling the ioctls over the entire
    sparse scancode space.

    To solve those problems, this patch extends the ioctls to allow drivers
    handle scancodes up to 32 bytes long (the length could be extended in
    the future should such need arise) and allow userspace to query and set
    scancode to keycode mappings not only by scancode but also by index.

    Compatibility code were also added to handle the old format of
    EVIO[CS]GKEYCODE ioctls.

    Folded fixes by:
    - Dan Carpenter: locking fixes for the original implementation
    - Jarod Wilson: fix crash when setting keycode and wiring up get/set
    handlers in original implementation.
    - Dmitry Torokhov: rework to consolidate old and new scancode handling,
    provide options to act either by index or scancode.

    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Dan Carpenter
    Signed-off-by: Jarod Wilson
    Signed-off-by: Dmitry Torokhov

    Mauro Carvalho Chehab
     

06 Sep, 2010

1 commit


29 Aug, 2010

1 commit

  • For MT slots, the ABS_MT_TRACKING_ID determines whether a slot is in use,
    but currently leaves initialization up to the drivers. This patch sets the
    slot state to unused upon creation.

    Signed-off-by: Henrik Rydberg
    Signed-off-by: Dmitry Torokhov

    Henrik Rydberg
     

03 Aug, 2010

2 commits

  • As all callers are now changed to only use the input_abs_*() access
    helpers, switching over to dynamically allocated ABS information is
    easy. This reduces size of struct input_dev from 3152 to 1640 on
    64 bit architectures.

    Signed-off-by: Daniel Mack
    Signed-off-by: Dmitry Torokhov

    Daniel Mack
     
  • Change all call sites in drivers/input to not access the ABS axis
    information directly anymore. Make them use the access helpers instead.

    Also use input_set_abs_params() when possible.
    Did some code refactoring as I was on it.

    Signed-off-by: Daniel Mack
    Cc: Dmitry Torokhov
    Signed-off-by: Dmitry Torokhov

    Daniel Mack
     

16 Jul, 2010

2 commits

  • Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     
  • With the rapidly increasing number of intelligent multi-contact and
    multi-user devices, the need to send digested, filtered information
    from a set of different sources within the same device is imminent.
    This patch adds the concept of slots to the MT protocol. The slots
    enumerate a set of identified sources, such that all MT events
    can be passed independently and selectively per identified source.

    The protocol works like this: Instead of sending a SYN_MT_REPORT
    event immediately after the contact data, one sends an ABS_MT_SLOT
    event immediately before the contact data. The input core will only
    emit events for slots with modified MT events. It is assumed that
    the same slot is used for the duration of an initiated contact.

    Acked-by: Ping Cheng
    Acked-by: Chase Douglas
    Acked-by: Rafi Rubin
    Signed-off-by: Henrik Rydberg
    Signed-off-by: Dmitry Torokhov

    Henrik Rydberg
     

14 Jul, 2010

1 commit


04 Jul, 2010

1 commit


16 Apr, 2010

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: wacom - switch mode upon system resume
    Revert "Input: wacom - merge out and in prox events"
    Input: matrix_keypad - allow platform to disable key autorepeat
    Input: ALPS - add signature for HP Pavilion dm3 laptops
    Input: i8042 - spelling fix
    Input: sparse-keymap - implement safer freeing of the keymap
    Input: update the status of the Multitouch X driver project
    Input: clarify the no-finger event in multitouch protocol
    Input: bcm5974 - retract efi-broken suspend_resume
    Input: sparse-keymap - free the right keymap on error

    Linus Torvalds
     

30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

22 Mar, 2010

1 commit


10 Mar, 2010

1 commit

  • Holding the BKL in input_open_file seems pointless because it does not
    protect against updates of input_table, and all open functions from the
    underlying drivers have proper mutex locking.

    This makes input_open_file take the input_mutex when accessing
    the table and no lock when calling into the lower function.

    Signed-off-by: Arnd Bergmann
    Acked-by: Thadeu Lima de Souza Cascardo
    Signed-off-by: Dmitry Torokhov

    Arnd Bergmann
     

09 Mar, 2010

1 commit

  • The HID layer has some scan codes of the form 0xffbc0000 for logitech
    devices which do not work if scancode is typed as signed int, so we need
    to switch to unsigned it instead. While at it keycode being signed does
    not make much sense either.

    Acked-by: Márton Németh
    Acked-by: Matthew Garrett
    Acked-by: Jiri Kosina
    Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     

01 Mar, 2010

1 commit


04 Feb, 2010

1 commit


30 Jan, 2010

1 commit

  • Sometimes it is desirable to suppress certain events from reaching
    input handlers and thus user space. One such example is Mac mouse
    button emulation code which catches certain key presses and converts
    them into button clicks as if they were emitted by a virtual mouse.
    The original key press events should be completely suppressed,
    otherwise user space will be confused, and while keyboard driver
    does it on its own evdev is blissfully unaware of this arrangement.

    This patch adds notion of 'filter' to the standard input handlers,
    which may flag event as filtered thus preventing it from reaching
    other input handlers. Filters don't (nor will they ever) have a
    notion of priority relative to each other, input core will run all
    of them first and any one of them may mark event as filtered.

    This patch is inspired by similar patch by Matthew Garret but the
    implementation and intended usage are quite different.

    Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     

29 Jan, 2010

1 commit

  • For pressure-based multi-touch devices, a direct way to send sensor
    intensity data per finger is needed. This patch adds the ABS_MT_PRESSURE
    event to the MT protocol.

    Requested-by: Yoonyoung Shim
    Requested-by: Mika Kuoppala
    Requested-by: Peter Hutterer
    Signed-off-by: Henrik Rydberg
    Signed-off-by: Dmitry Torokhov

    Henrik Rydberg