blob: a29aab781b9ec5768f6af9a980bf122fa9c98f62 [file] [log] [blame]
# Copyright 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import time
import power_state
class stormPower(power_state.PowerStateDriver):
"""Driver for power_state for storm-derived boards."""
# Time in seconds to allow the firmware to detect the 'rec_mode' signal
# after cold reset. How long holding the recovery button has different
# meanings:
# > 8 seconds, < 16 seconds: power wash
# > 16 seconds: enter recovery mode
_RECOVERY_DETECTION_DELAY = 20
def _power_on_rec(self):
"""Power on in recovery mode."""
self._interface.set('rec_mode', self.REC_ON)
self._reset_cycle()
time.sleep(self._RECOVERY_DETECTION_DELAY)
self._interface.set('rec_mode', self.REC_OFF)
def _power_on_normal(self):
"""Power on in normal mode, i.e., no recovery."""
self._interface.set('rec_mode', self.REC_OFF)
time.sleep(self._RECOVERY_DETECTION_DELAY)
self._reset_cycle()
def _power_on(self, rec_mode):
if rec_mode == self.REC_ON:
self._power_on_rec()
else:
self._power_on_normal()
def _power_off(self):
# There is no way turn off power on storm, so we hold cold_reset to on
# so the host acts as if it's off.
self._interface.set('cold_reset', 'on')