Index: drivers/input/i8042prt/pnp.c =================================================================== --- drivers/input/i8042prt/pnp.c (revision 74212) +++ drivers/input/i8042prt/pnp.c (working copy) @@ -324,9 +324,16 @@ return Status; PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension; - DirqlMax = MAX( - PortDeviceExtension->KeyboardInterrupt.Dirql, - PortDeviceExtension->MouseInterrupt.Dirql); + if (PortDeviceExtension->HighestDIRQLInterrupt) + { + DirqlMax = MAX( + PortDeviceExtension->KeyboardInterrupt.Dirql, + PortDeviceExtension->MouseInterrupt.Dirql); + } + else + { + DirqlMax = PortDeviceExtension->MouseInterrupt.Dirql; + } INFO_(I8042PRT, "MouseInterrupt.Vector %lu\n", PortDeviceExtension->MouseInterrupt.Vector); @@ -477,16 +484,20 @@ WARN_(I8042PRT, "i8042ConnectMouseInterrupt failed: %lx\n", Status); } - /* Start the mouse */ - Irql = KeAcquireInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt); /* HACK: the mouse has already been reset in i8042DetectMouse. This second reset prevents some touchpads/mice from working (Dell D531, D600). See CORE-6901 */ if (!(i8042HwFlags & FL_INITHACK)) { + /* Start the mouse */ + Irql = KeAcquireInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt); i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE); + KeReleaseInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt, Irql); } - KeReleaseInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt, Irql); + else + { + WARN_(I8042PRT, "Skip mouse reset, because FL_INITHACK hardware is detected\n"); + } } return Status;