Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Dmitry writes: "Input updates for v4.19-rc7 - we added a few scheduling points into various input interfaces to ensure that large writes will not cause RCU stalls - fixed configuring PS/2 keyboards as wakeup devices on newer platforms - added a new Xbox gamepad ID." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: uinput - add a schedule point in uinput_inject_events() Input: evdev - add a schedule point in evdev_write() Input: mousedev - add a schedule point in mousedev_write() Input: i8042 - enable keyboard wakeups by default when s2idle is used Input: xpad - add support for Xbox1 PDP Camo series gamepad
This commit is contained in:
Коммит
eb81bfb224
|
@ -564,6 +564,7 @@ static ssize_t evdev_write(struct file *file, const char __user *buffer,
|
|||
|
||||
input_inject_event(&evdev->handle,
|
||||
event.type, event.code, event.value);
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
out:
|
||||
|
|
|
@ -231,6 +231,7 @@ static const struct xpad_device {
|
|||
{ 0x0e6f, 0x0246, "Rock Candy Gamepad for Xbox One 2015", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x02ab, "PDP Controller for Xbox One", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x02a4, "PDP Wired Controller for Xbox One - Stealth Series", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x02a6, "PDP Wired Controller for Xbox One - Camo Series", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x0301, "Logic3 Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x0e6f, 0x0346, "Rock Candy Gamepad for Xbox One 2016", 0, XTYPE_XBOXONE },
|
||||
{ 0x0e6f, 0x0401, "Logic3 Controller", 0, XTYPE_XBOX360 },
|
||||
|
@ -530,6 +531,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = {
|
|||
XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init2),
|
||||
XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init1),
|
||||
XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init2),
|
||||
XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init1),
|
||||
XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init2),
|
||||
XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
|
||||
XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
|
||||
XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
|
||||
|
|
|
@ -598,6 +598,7 @@ static ssize_t uinput_inject_events(struct uinput_device *udev,
|
|||
|
||||
input_event(udev->dev, ev.type, ev.code, ev.value);
|
||||
bytes += input_event_size();
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
return bytes;
|
||||
|
|
|
@ -707,6 +707,7 @@ static ssize_t mousedev_write(struct file *file, const char __user *buffer,
|
|||
mousedev_generate_response(client, c);
|
||||
|
||||
spin_unlock_irq(&client->packet_lock);
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
kill_fasync(&client->fasync, SIGIO, POLL_IN);
|
||||
|
|
|
@ -1395,15 +1395,26 @@ static void __init i8042_register_ports(void)
|
|||
for (i = 0; i < I8042_NUM_PORTS; i++) {
|
||||
struct serio *serio = i8042_ports[i].serio;
|
||||
|
||||
if (serio) {
|
||||
printk(KERN_INFO "serio: %s at %#lx,%#lx irq %d\n",
|
||||
serio->name,
|
||||
(unsigned long) I8042_DATA_REG,
|
||||
(unsigned long) I8042_COMMAND_REG,
|
||||
i8042_ports[i].irq);
|
||||
serio_register_port(serio);
|
||||
device_set_wakeup_capable(&serio->dev, true);
|
||||
}
|
||||
if (!serio)
|
||||
continue;
|
||||
|
||||
printk(KERN_INFO "serio: %s at %#lx,%#lx irq %d\n",
|
||||
serio->name,
|
||||
(unsigned long) I8042_DATA_REG,
|
||||
(unsigned long) I8042_COMMAND_REG,
|
||||
i8042_ports[i].irq);
|
||||
serio_register_port(serio);
|
||||
device_set_wakeup_capable(&serio->dev, true);
|
||||
|
||||
/*
|
||||
* On platforms using suspend-to-idle, allow the keyboard to
|
||||
* wake up the system from sleep by enabling keyboard wakeups
|
||||
* by default. This is consistent with keyboard wakeup
|
||||
* behavior on many platforms using suspend-to-RAM (ACPI S3)
|
||||
* by default.
|
||||
*/
|
||||
if (pm_suspend_via_s2idle() && i == I8042_KBD_PORT_NO)
|
||||
device_set_wakeup_enable(&serio->dev, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -251,6 +251,7 @@ static inline bool idle_should_enter_s2idle(void)
|
|||
return unlikely(s2idle_state == S2IDLE_STATE_ENTER);
|
||||
}
|
||||
|
||||
extern bool pm_suspend_via_s2idle(void);
|
||||
extern void __init pm_states_init(void);
|
||||
extern void s2idle_set_ops(const struct platform_s2idle_ops *ops);
|
||||
extern void s2idle_wake(void);
|
||||
|
@ -282,6 +283,7 @@ static inline void pm_set_suspend_via_firmware(void) {}
|
|||
static inline void pm_set_resume_via_firmware(void) {}
|
||||
static inline bool pm_suspend_via_firmware(void) { return false; }
|
||||
static inline bool pm_resume_via_firmware(void) { return false; }
|
||||
static inline bool pm_suspend_via_s2idle(void) { return false; }
|
||||
|
||||
static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {}
|
||||
static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; }
|
||||
|
|
|
@ -63,6 +63,12 @@ static DECLARE_SWAIT_QUEUE_HEAD(s2idle_wait_head);
|
|||
enum s2idle_states __read_mostly s2idle_state;
|
||||
static DEFINE_RAW_SPINLOCK(s2idle_lock);
|
||||
|
||||
bool pm_suspend_via_s2idle(void)
|
||||
{
|
||||
return mem_sleep_current == PM_SUSPEND_TO_IDLE;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pm_suspend_via_s2idle);
|
||||
|
||||
void s2idle_set_ops(const struct platform_s2idle_ops *ops)
|
||||
{
|
||||
lock_system_sleep();
|
||||
|
|
Загрузка…
Ссылка в новой задаче