[autotest] Allow different delays of power button release in Servo

Different CrOS platforms have slightly different circuitry on their
power buttons.  These circuits create different delays for 'release'
which need to be accounted for in Servo's autotest power_key method.
This CL addresses the variability by including a sleep and re-read
loop.  A TODO has also been added for to address thoughts that it
might be more preferable to track these delays by platform in some
sort of data structure.

BUG=chrome-os-partner:5743
TEST=platform_LongPressPower run on platform which previously failed
and not it passes.

Change-Id: If51998c1da66426fda9c1cfb4a80743566fb5c43
Reviewed-on: http://gerrit.chromium.org/gerrit/6821
Reviewed-by: Nirnimesh <nirnimesh@chromium.org>
Tested-by: Todd Broch <tbroch@chromium.org>
diff --git a/server/cros/servo.py b/server/cros/servo.py
index 9459db1..6f30e45 100755
--- a/server/cros/servo.py
+++ b/server/cros/servo.py
@@ -28,6 +28,8 @@
     LONG_DELAY = 8
     SHORT_DELAY = 0.1
     NORMAL_TRANSITION_DELAY = 1.2
+    # Maximum number of times to re-read power button on release.
+    RELEASE_RETRY_MAX = 5
 
     # Delays to deal with computer transitions.
     SLEEP_DELAY = 6
@@ -100,7 +102,18 @@
         """
         self.set_nocheck('pwr_button', 'press')
         time.sleep(secs)
-        self.set('pwr_button', 'release')
+        self.set_nocheck('pwr_button', 'release')
+        # TODO(tbroch) Different systems have different release times on the
+        # power button that this loop addresses.  Longer term we may want to
+        # make this delay platform specific.
+        retry = 1
+        while True:
+            value = self.get('pwr_button')
+            if value == 'release' or retry > Servo.RELEASE_RETRY_MAX:
+                break
+            logging.info('Waiting for pwr_button to release, retry %d.' % retry)
+            retry += 1
+            time.sleep(Servo.SHORT_DELAY)
 
 
     def lid_open(self):