I've been having the same problem on and off for a while. Every time it happens, I see HSSPIController errors in /var/log/system.log (listed some of them below).
Power off, PRAM reset, SMC reset do not help. Recovery mode simply shows some pictures on how to power-on external keyboard & mouse. External keyboard & mouse work 🙂
There are quite a few reports of this issue, with the same error reports. Some have even reinstalled the OS and the problem still persists. However, there are quite a few reports of HSSPI cable replacement fixing the problem permanently. I haven't tried that myself, I'm just sharing the information I was able to find on this topic.
Aug 22 13:24:11 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 13:24:33 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 13:24:51 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 13:25:24 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 13:25:39 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 14:15:29 host kernel[0]: AppleHSSPIController::start Start Succeeded
Aug 22 14:15:29 host kernel[0]: Apple Internal Keyboard / Trackpad::start Start Succeeded
Aug 22 14:35:19 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 14:35:27 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 22 14:35:37 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 20:45:49 host kernel[0]: AppleHSSPIController::_enqueueSPICommandGated SPICommand timed out. Interface 3, transactionType 64, frameNumber 0
Aug 25 20:45:49 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 20:45:51 host kernel[0]: AppleHSSPIController::_enqueueSPICommandGated SPICommand timed out. Interface 3, transactionType 64, frameNumber 0
Aug 25 20:45:51 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 20:45:53 host kernel[0]: AppleHSSPIController::_enqueueSPICommandGated SPICommand timed out. Interface 3, transactionType 64, frameNumber 0
Aug 25 20:45:53 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 20:45:55 host kernel[0]: AppleHSSPIController::_enqueueSPICommandGated SPICommand timed out. Interface 0, transactionType 64, frameNumber 0
Aug 25 20:45:55 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 20:45:55 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 22:06:10 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 22:06:10 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device
Aug 25 22:06:10 host kernel[0]: AppleMultitouchTrackpadHIDEventDriver::_unleashDeviceGated() Failed to get device leash state. Error = 0xe00002be
Aug 25 22:06:12 host kernel[0]: AppleHSSPIController::_enqueueSPICommandGated SPICommand timed out. Interface 0, transactionType 64, frameNumber 0
Aug 25 22:06:12 host kernel[0]: Error: AppleHSSPIController::doSPITransfer ERR received from device