summaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@google.com>2020-12-02 09:11:55 +0100
committerGreg Kroah-Hartman <gregkh@google.com>2020-12-02 09:11:55 +0100
commit72ce9d84b53f69669f7085d298c98fc329a3447e (patch)
tree7733f3613f1ee30fa953d351e7d04827782fa018 /drivers/input
parentb0dc0348f1c294d7406532594d740e40869986d4 (diff)
parent0f586dbaf10f0cf74f663f0e26b398f1ce4e8727 (diff)
Merge 4.4.247 into android-4.4-p
Changes in 4.4.247 btrfs: tree-checker: Enhance chunk checker to validate chunk profile btrfs: inode: Verify inode mode to avoid NULL pointer dereference HID: cypress: Support Varmilo Keyboards' media hotkeys Input: i8042 - allow insmod to succeed on devices without an i8042 controller HID: hid-sensor-hub: Fix issue with devices with no report ID x86/xen: don't unbind uninitialized lock_kicker_irq proc: don't allow async path resolution of /proc/self components dmaengine: pl330: _prep_dma_memcpy: Fix wrong burst size scsi: libiscsi: Fix NOP race condition scsi: target: iscsi: Fix cmd abort fabric stop race scsi: ufs: Fix race between shutdown and runtime resume flow bnxt_en: fix error return code in bnxt_init_board() video: hyperv_fb: Fix the cache type when mapping the VRAM bnxt_en: Release PCI regions when DMA mask setup fails during probe. IB/mthca: fix return value of error branch in mthca_init_cq() nfc: s3fwrn5: use signed integer for parsing GPIO numbers efivarfs: revert "fix memory leak in efivarfs_create()" perf probe: Fix to die_entrypc() returns error correctly USB: core: Change %pK for __user pointers to %px x86/speculation: Fix prctl() when spectre_v2_user={seccomp,prctl},ibpb USB: core: add endpoint-blacklist quirk USB: core: Fix regression in Hercules audio card btrfs: fix lockdep splat when reading qgroup config on mount Linux 4.4.247 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I8e8603322c7bf2a54d2758e3ab7a5424758a6548
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/serio/i8042.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index c84c685056b9..6b648339733f 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -125,6 +125,7 @@ module_param_named(unmask_kbd_data, i8042_unmask_kbd_data, bool, 0600);
MODULE_PARM_DESC(unmask_kbd_data, "Unconditional enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-condition: i8042.debug=1 enabled]");
#endif
+static bool i8042_present;
static bool i8042_bypass_aux_irq_test;
static char i8042_kbd_firmware_id[128];
static char i8042_aux_firmware_id[128];
@@ -343,6 +344,9 @@ int i8042_command(unsigned char *param, int command)
unsigned long flags;
int retval;
+ if (!i8042_present)
+ return -1;
+
spin_lock_irqsave(&i8042_lock, flags);
retval = __i8042_command(param, command);
spin_unlock_irqrestore(&i8042_lock, flags);
@@ -1597,12 +1601,15 @@ static int __init i8042_init(void)
err = i8042_platform_init();
if (err)
- return err;
+ return (err == -ENODEV) ? 0 : err;
err = i8042_controller_check();
if (err)
goto err_platform_exit;
+ /* Set this before creating the dev to allow i8042_command to work right away */
+ i8042_present = true;
+
pdev = platform_create_bundle(&i8042_driver, i8042_probe, NULL, 0, NULL, 0);
if (IS_ERR(pdev)) {
err = PTR_ERR(pdev);
@@ -1621,6 +1628,9 @@ static int __init i8042_init(void)
static void __exit i8042_exit(void)
{
+ if (!i8042_present)
+ return;
+
platform_device_unregister(i8042_platform_device);
platform_driver_unregister(&i8042_driver);
i8042_platform_exit();