- 27 10月, 2010 1 次提交
-
-
由 Paul Mundt 提交于
The ctrl_xxx routines are deprecated, switch over to the __raw_xxx versions. Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
-
- 25 10月, 2010 2 次提交
-
-
由 Ping Cheng 提交于
Cintiq, being a display tablet, doesn't have mouse and associated BTN_s. Make sure we do not specify them when registering Cintiq's input device so that userland can retrieve the exact tool set the device supports. Signed-off-by: NPing Cheng <pingc@wacom.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Nicolas Kaiser 提交于
Looks like an obvious typo to me. Signed-off-by: NNicolas Kaiser <nikai@nikai.net> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
- 23 10月, 2010 1 次提交
-
-
由 Dmitry Eremin-Solenikov 提交于
Make serport serio device to be a child of corresponding tty device instead of just hanging at /sys/devices/serioX. Signed-off-by: NDmitry Eremin-Solenikov <dbaryshkov@gmail.com> Acked-by: NDmitry Torokhov <dtor@mail.ru> Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
-
- 19 10月, 2010 4 次提交
-
-
由 Michael Hennerich 提交于
KBUILD_MODNAME normalizes "-" to "_". This is non-obvious and results in the id name for ADP5588 being "adp5588_keys" while the other supported id is "adp5587-keys". So avoid this define and use an explicit string as the id name. Signed-off-by: NMichael Hennerich <michael.hennerich@analog.com> Signed-off-by: NMike Frysinger <vapier@gentoo.org> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dmitry Torokhov 提交于
Instead of using asynchronous SPI API and then spinning waiting for SPI transfer to complete when disabling the device, let's use threaded IRQ model and spi_sync(). Acked-by: NMichael Hennerich <michael.hennerich@analog.com> Tested-by: NMichael Hennerich <michael.hennerich@analog.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dmitry Torokhov 提交于
Instead of manually creating one set of attributes or another set up is_visible method in attribute group structure to control whether aux3 or gpio3 attribute is presented to userspace. Acked-by: NMichael Hennerich <michael.hennerich@analog.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dmitry Eremin-Solenikov 提交于
PS2Mult is a simple serial protocol used for multiplexing several PS/2 streams into one serial data stream. It's used e.g. on TQM85xx series of boards. Signed-off-by: NDmitry Eremin-Solenikov <dbaryshkov@gmail.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
- 18 10月, 2010 10 次提交
-
-
由 Daniel Mack 提交于
448cd166 ("Input: evdev - rearrange ioctl handling") broke EVIOCSABS by checking for the wrong direction bit. Signed-off-by: NDaniel Mack <zonque@gmail.com> Reported-by: NSven Neumann <s.neumann@raumfeld.com> Tested-by: NSven Neumann <s.neumann@raumfeld.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Daniel Mack 提交于
This fixes a regression introduced by the dynamic allocation of absinfo for input devices. We need to bail out early for input devices which don't have absolute axis. [ 929.664303] Pid: 2989, comm: input Not tainted 2.6.36-rc8+ #14 MS-7260/MS-7260 [ 929.664318] EIP: 0060:[<c12bdc01>] EFLAGS: 00010246 CPU: 0 [ 929.664331] EIP is at evdev_ioctl+0x4f8/0x59f [ 929.664341] EAX: 00000040 EBX: 00000000 ECX: 00000006 EDX: f45a1efc [ 929.664355] ESI: 00000000 EDI: f45a1efc EBP: f45a1f24 ESP: f45a1eb8 [ 929.664369] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 [ 929.664402] f470da74 f6a30e78 f462c240 00000018 bfe4a260 00000000 f45b06fc 00000000 [ 929.664429] <0> 000000c4 b769d000 c3544620 f470da74 f45b06fc f45b06fc f45a1f38 c107dd1f [ 929.664458] <0> f4710b74 000000c4 00000000 00000000 00000000 0000029d 00000a74 f4710b74 [ 929.664500] [<c107dd1f>] ? handle_mm_fault+0x2be/0x59a [ 929.664513] [<c12bd709>] ? evdev_ioctl+0x0/0x59f [ 929.664524] [<c1099d30>] ? do_vfs_ioctl+0x494/0x4d9 [ 929.664538] [<c10432a1>] ? up_read+0x16/0x29 [ 929.664550] [<c101c818>] ? do_page_fault+0x2ff/0x32d [ 929.664564] [<c108d048>] ? do_sys_open+0xc5/0xcf [ 929.664575] [<c1099db6>] ? sys_ioctl+0x41/0x61 [ 929.664587] [<c1002710>] ? sysenter_do_call+0x12/0x36 [ 929.684570] ---[ end trace 11b83e923bd8f2bb ]--- Signed-off-by: NDaniel Mack <zonque@gmail.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Justin P. Mattock 提交于
The patch below updates broken web addresses in the kernel Signed-off-by: NJustin P. Mattock <justinmattock@gmail.com> Cc: Maciej W. Rozycki <macro@linux-mips.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Finn Thain <fthain@telegraphics.com.au> Cc: Randy Dunlap <rdunlap@xenotime.net> Cc: Matt Turner <mattst88@gmail.com> Cc: Dimitry Torokhov <dmitry.torokhov@gmail.com> Cc: Mike Frysinger <vapier.adi@gmail.com> Acked-by: NBen Pfaff <blp@cs.stanford.edu> Acked-by: NHans J. Koch <hjk@linutronix.de> Reviewed-by: NFinn Thain <fthain@telegraphics.com.au> Signed-off-by: NJiri Kosina <jkosina@suse.cz>
-
由 Dmitry Torokhov 提交于
We need to always call usb_autopm_put_interface() in wacom_open(), not only when initialization fails, otherwise the device will be marked as PM-busy and will never be put in suspended state. Based on patch by Oliver Neukum. Acked-by: NOliver Neukum <oneukum@suse.de> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Michael Hennerich 提交于
Suppress events where pressure > pressure_max. These events come typically along with inaccurate X and Y samples. Signed-off-by: NMichael Hennerich <michael.hennerich@analog.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Michael Hennerich 提交于
Some input users such as Android or X require BTN_TOUCH events. Implement EV_KEY:BTN_TOUCH and make sure that the release event is not erroneous scheduled without a preceding valid touch. Signed-off-by: NMichael Hennerich <michael.hennerich@analog.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Michael Hennerich 提交于
According to the AD7877 datasheet: Each transfer operation is 16-bit. If multiple read/write operations are to be performed, CS must be taken high after the end of each read/write operation before another read/write operation can be performed by taking CS low again. Make sure CS toggles after each transfer in the message. Signed-off-by: NMichael Hennerich <michael.hennerich@analog.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Tejun Heo 提交于
Make hp680_ts_init/exit() call cancel_delayed_work_sync() instead of calling cancel_delayed_work() followed by flush_scheduled_work(). This is to prepare for the deprecation and removal of flush_scheduled_work(). Signed-off-by: NTejun Heo <tj@kernel.org> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Hitoshi Mitake 提交于
When annotating mutex to avoid false lockdep reports we should not be using MOUSEDEV_MIX as lock subclass but rather SINGLE_DEPTH_NESTING. Signed-off-by: NHitoshi Mitake <mitake@dcl.info.waseda.ac.jp> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Jason Wang 提交于
Commit 91143379 introduces regulator operations in ads7846 touchscreen driver. Among these operations, some are called while holding a spinlock. On many platforms regulators reside on slow buses, such as I2C/SPI and require sleep while accessing them. The touchscreen itself is also a SPI device and currently relies on asynchronous SPI access to avoid sleeping in interrupt context. Let's switch to using threaded IRQ to be able to access SPI bus synchronously (which simplifies driver a bit); it also allows safe access to the regulators as well. This has been tested on the ti_omap3530evm board: 1) using ts_lib after normal boot 2) using ts_lib after "#echo 1/0 > /sys/bus/spi/devices/spi0.1/disable" 3) using ts_lib after "#echo mem > /sys/power/state" and "wake up" Also tested on pandora. Based on original patch by Dmitry Torokhov. Tested-by: NGrazvydas Ignotas <notasas@gmail.com> Signed-off-by: NJason Wang <jason77.wang@gmail.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
- 15 10月, 2010 1 次提交
-
-
由 Arnd Bergmann 提交于
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(...) { <+... nonseekable_open(...) ...+> } @ open exists@ identifier open_f; identifier i, f; identifier open1.nested_open; @@ int open_f(struct inode *i, struct file *f) { <+... ( nonseekable_open(...) | nested_open(...) ) ...+> } @ 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) { <+... ( *off = E | *off += E | func(..., off, ...) | E = *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) { <+... ( *off = E | *off += E | func(..., off, ...) | E = *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: NArnd Bergmann <arnd@arndb.de> Cc: Julia Lawall <julia@diku.dk> Cc: Christoph Hellwig <hch@infradead.org>
-
- 13 10月, 2010 12 次提交
-
-
由 Dmitry Eremin-Solenikov 提交于
Some (rare) serio devices need to have multiple serio children. One of the examples is PS/2 multiplexer present on several TQC STKxxx boards, which connect PS/2 keyboard and mouse to single tty port. Signed-off-by: NDmitry Eremin-Solenikov <dbaryshkov@gmail.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dmitry Torokhov 提交于
There was too much knowledge about internals if serio in the pass-through handling, clean it up. Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Naveen Kumar Gaddipati 提交于
Add the ROHM BU21013 capacitive touch panel controller support with i2c interface. Acked-by: NLinus Walleij <linus.walleij@stericsson.com> Signed-off-by: NNaveen Kumar Gaddipati <naveen.gaddipati@stericsson.com> Acked-by: NHenrik Rydberg <rydberg@euromail.se> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Mike Turquette 提交于
Program keyboard controller to generate a wake-up request on events and on long key presses. It will not generate wake-up requests on timeouts since driver code does not handle them. This allows keyboard to wake-up OMAP from suspend. Signed-off-by: NMike Turquette <mturquette@ti.com> Signed-off-by: NAbraham Arce <x0066660@ti.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Abraham Arce 提交于
Select correct interrupt line behaviour. Signed-off-by: NAbraham Arce <x0066660@ti.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Abraham Arce 提交于
Remove SYSCONFIG register configuration, omap hwmod framework will use internal API to modify as required. Other minor updates: - Change a variable name from DEF to VAL, this represents a value - Break line width to 80 characters Signed-off-by: NAbraham Arce <x0066660@ti.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Abraham Arce 提交于
Get mem and irq resources using platform helpers - platform_get_base - platform_get_irq Signed-off-by: NAbraham Arce <x0066660@ti.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Sundar Iyer 提交于
Add support for the keypad controller in the Scroll Key Encoder (SKE) module on the Nomadik family and the DB8500 SoC. Acked-by: NLinus Walleij <linus.walleij@stericsson.com> Signed-off-by: NSundar Iyer <sundar.iyer@stericsson.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dmitry Torokhov 提交于
We should not try to call free_irq() when request_irq() failed. Reported-by: NG, Manjunath Kondaiah <manjugk@ti.com> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Davidlohr Bueso 提交于
Instead of using -1 let's start using proper error codes. Signed-off-by: NDavidlohr Bueso <dave@gnu.org> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dmitry Torokhov 提交于
Rework emu_probe() to make sure we leave the device disabled if probe fails for any reason. Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
由 Dzianis Kahanovich 提交于
Signed-off-by: NDzianis Kahanovich <mahatma@eu.by> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
- 12 10月, 2010 3 次提交
-
-
由 Thomas Gleixner 提交于
Get rid of init_MUTEX[_LOCKED]() and use sema_init() instead. Signed-off-by: NThomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Christoph Hellwig <hch@infradead.org> Acked-by: NDmitry Torokhov <dtor@mail.ru> LKML-Reference: <20100907125055.079737758@linutronix.de>
-
由 Thomas Gleixner 提交于
Get rid of init_MUTEX[_LOCKED]() and use sema_init() instead. Signed-off-by: NThomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Christoph Hellwig <hch@infradead.org> Acked-by: NDmitry Torokhov <dtor@mail.ru> LKML-Reference: <20100907125054.985090435@linutronix.de>
-
由 Thomas Gleixner 提交于
Get rid of init_MUTEX[_LOCKED]() and use sema_init() instead. Signed-off-by: NThomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Christoph Hellwig <hch@infradead.org> Acked-by: NDmitry Torokhov <dtor@mail.ru> LKML-Reference: <20100907125054.888438853@linutronix.de>
-
- 11 10月, 2010 1 次提交
-
-
由 Aristeu Rozanski 提交于
Currently the pressure range in Cintiq 21UX2 is limited to half of the supported. This patch fixes the problem. Signed-off-by: NAristeu Rozanski <aris@redhat.com> Acked-by: NPing Cheng <pingc@wacom.com> CC: stable@kernel.org Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-
- 09 10月, 2010 3 次提交
-
-
由 Mark F. Brown 提交于
mach-mmp needs to clear wake event in order to clear the keypad interrupt Signed-off-by: NMark F. Brown <mark.brown314@gmail.com> Signed-off-by: NEric Miao <eric.y.miao@gmail.com>
-
由 Mark F. Brown 提交于
Signed-off-by: NMark F. Brown <mark.brown314@gmail.com> Signed-off-by: NEric Miao <eric.y.miao@gmail.com>
-
由 Mark F. Brown 提交于
mach-mmp utilizes pxa27x_keypad code so we need to move header to platform pxa directory. Signed-off-by: NMark F. Brown <mark.brown314@gmail.com> Signed-off-by: NEric Miao <eric.y.miao@gmail.com>
-
- 05 10月, 2010 2 次提交
-
-
由 Arnd Bergmann 提交于
All these files use the big kernel lock in a trivial way to serialize their private file operations, typically resulting from an earlier semi-automatic pushdown from VFS. None of these drivers appears to want to lock against other code, and they all use the BKL as the top-level lock in their file operations, meaning that there is no lock-order inversion problem. Consequently, we can remove the BKL completely, replacing it with a per-file mutex in every case. Using a scripted approach means we can avoid typos. These drivers do not seem to be under active maintainance from my brief investigation. Apologies to those maintainers that I have missed. file=$1 name=$2 if grep -q lock_kernel ${file} ; then if grep -q 'include.*linux.mutex.h' ${file} ; then sed -i '/include.*<linux\/smp_lock.h>/d' ${file} else sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file} fi sed -i ${file} \ -e "/^#include.*linux.mutex.h/,$ { 1,/^\(static\|int\|long\)/ { /^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex); } }" \ -e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \ -e '/[ ]*cycle_kernel_lock();/d' else sed -i -e '/include.*\<smp_lock.h\>/d' ${file} \ -e '/cycle_kernel_lock()/d' fi Signed-off-by: NArnd Bergmann <arnd@arndb.de>
-
由 Dmitry Torokhov 提交于
When runtime PM is enabled by default for input devices, X hangs in wacom open: [<ffffffff814a00ea>] mutex_lock+0x1a/0x40 [<ffffffffa02bc94b>] wacom_resume+0x3b/0x90 [wacom] [<ffffffff81327a32>] usb_resume_interface+0xd2/0x190 [<ffffffff81327b5d>] usb_resume_both+0x6d/0x110 [<ffffffff81327c24>] usb_runtime_resume+0x24/0x40 [<ffffffff8130a2cf>] __pm_runtime_resume+0x26f/0x450 [<ffffffff8130a23a>] __pm_runtime_resume+0x1da/0x450 [<ffffffff8130a53a>] pm_runtime_resume+0x2a/0x50 [<ffffffff81328176>] usb_autopm_get_interface+0x26/0x60 [<ffffffffa02bc626>] wacom_open+0x36/0x90 [wacom] wacom_open() takes wacom->lock and calls usb_autopm_get_interface(), which in turn calls wacom_resume() which tries to acquire the lock again. The fix is to call usb_autopm_get_interface() first, before we take the lock. Since we do not do usb_autopm_put_interface() until wacom_close() is called runtime PM is effectively disabled for the driver, however changing it now would risk regressions so the complete fix will have to wait till the next merge window. Reported-by: NJiri Slaby <jslaby@suse.cz> Acked-by: NOliver Neukum <oneukum@suse.de> Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
-