#9779 BLOC 1.5-sof: Wakeup key is repeated

Zarro Boogs per Child bugtracker at laptop.org
Sat Dec 5 07:49:44 EST 2009


#9779: Wakeup key is repeated
--------------------------------+-------------------------------------------
           Reporter:  cjb       |       Owner:  rsmith           
               Type:  defect    |      Status:  new              
           Priority:  blocker   |   Milestone:  1.5-software-beta
          Component:  kernel    |     Version:  not specified    
         Resolution:            |    Keywords:                   
        Next_action:  diagnose  |    Verified:  0                
Deployment_affected:            |   Blockedby:                   
           Blocking:            |  
--------------------------------+-------------------------------------------

Comment(by rsmith):

 I don't believe this is an EC problem.

 Enviroment:
 XO 1-5, B2, OS 51, My latest test EC code and OFW, echo mem >
 /sys/power/state via serial port,
 press 'a' key on XO keyboard

 Here is the EC log of the fail case with my comments.

 {{{
 235112:MO L             // Main on goes low S3
 Rk0C,Keyboard wake      // Press 'a' key (Make 0x1e, break 0x9e)
                         // Matrix address = 0x0c
 238096:SCI:01           // Wakeup
 238099:MO H             // Come out of S3
 K1E,                    // Send make code
 238114:-10,             // Post codes
 238130:-1D,             // Post codes
 RkF0,Rk0C,238196:-B3,   // Receive break Matrix address

 I60,D70,                // KBC Write CMD byte
                         // 0x70 = Xlate, Mouse Dis, KBD Dis
 I60,D52,                // 0x52 = Xlate, Mouse En, KBD Dis, Mouse int
 I60,D43,K9E,            // 0x43 = Xlate, Mouse En, KBD En, Mouse int, KBD
 int
                         // Send 0x9e break code.

 VF2,RkFA,RkAB,Rk41,KFA, // Cmd Keyboard ID response 0xab41
 KAB,                    // Send 0xAB
 K41,                    // Send 0x41
 VED,RkFA,KFA,           // Cmd write LED
 V00,RkFA,KFA,           // LED = 0x00
 VF3,RkFA,KFA,           // Cmd Repeat rate
 V00,RkFA,KFA,           // rate = 0x00
 VF4,RkFA,KFA,           // Cmd KBD enable
 VF3,RkFA,KFA,           // Repate rate = 0x00
 V00,RkFA,KFA,
 VED,RkFA,KFA,           // Set LED's = 0x00
 V00,RkFA,KFA,

 [The rest of the commands are sent to the touchpad]
 }}}

 Here is the pass case with fewer comments because as you can see they are
 virtually identical
 {{{
 411334:MO L
 Rk0C,K1E,               // Rx make send Make code
 Keyboard wake
 419437:SCI:01
 419440:MO H
 419470:-1D,
 RkF0,Rk0C,419539:-A3,   // Rx break
 419542:-B3,

 I60,D70,
 I60,D52,
 I60,D43,K9E,            // Send make
 VF2,RkFA,RkAB,Rk41,KFA,
 KAB,
 K41,
 VED,RkFA,KFA,
 V00,RkFA,KFA,
 VF3,RkFA,KFA,
 V00,RkFA,KFA,
 VF4,RkFA,KFA,
 VF3,RkFA,KFA,
 V00,RkFA,KFA,
 VED,RkFA,KFA,
 V00,RkFA,KFA,
 }}}

 In both cases the break code is sent at the same point in the stream.  One
 can argue that sending up the break code in the middle of the commands
 that Linux is sending is marginal but nothing seems invalid about the
 above streams.

 None of the commands that Linux sends above are necessary.  The keyboard
 is already fully operational at the time the wakeup key is pressed.

 Linux however has slightly different view:

 {{{
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.492921] libertas_sdio
 mmc2:0001:1: firmware: requesting sd8686_helper.bin
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.700114] usb 1-2: reset high
 speed USB device using ehci_hcd and address 2

   // Cmd byte writes start here:

 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.853402]
 drivers/input/serio/i8042.c: 60 -> i8042 (command) [169057]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.854558]
 drivers/input/serio/i8042.c: 70 -> i8042 (parameter) [169057]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.855456]
 drivers/input/serio/i8042.c: 60 -> i8042 (command) [169057]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.856456]
 drivers/input/serio/i8042.c: 52 -> i8042 (parameter) [169057]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.858184]
 drivers/input/serio/i8042.c: 60 -> i8042 (command) [169057]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.859391]
 drivers/input/serio/i8042.c: 43 -> i8042 (parameter) [169057]

   // Heres the make code
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.859409]
 drivers/input/serio/i8042.c: 1e <- i8042 (interrupt, 0, 0) [169057]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.859841] PM: Finishing wakeup.
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.859848] Restarting tasks ...
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.859975] hub 1-0:1.0: over-
 current change on port 1

   // Start of the ID command.
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.861120]
 drivers/input/serio/i8042.c: f2 -> i8042 (kbd-data) [169058]

   // Here's the break code.
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.861240]
 drivers/input/serio/i8042.c: 9e <- i8042 (interrupt, 0, 1) [169058]

 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.871708]
 drivers/input/serio/i8042.c: fa <- i8042 (interrupt, 0, 1) [169059]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.872798]
 drivers/input/serio/i8042.c: ab <- i8042 (interrupt, 0, 1) [169059]
 Dec  5 11:40:07 xo-73-23-26 kernel: [ 1693.873682]
 drivers/input/serio/i8042.c: 41 <- i8042 (interrupt, 0, 1) [169059]

 }}}

 Its not clear to me if Linux is expecting the next byte it gets after
 sending the 0xf2 command to be a 0x9e break code because the success case
 in Linux has exactly the same log.

-- 
Ticket URL: <http://dev.laptop.org/ticket/9779#comment:10>
One Laptop Per Child <http://laptop.org/>
OLPC bug tracking system


More information about the Bugs mailing list