blob: f1a11f5d5dee5009d84099d9796071b891d8656a [file] [log] [blame]
# Copyright (c) 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.
"""Driver for power_state for parrot boards.
import time
import power_state
class parrotPower(power_state.PowerStateDriver):
"""Power-state driver for Parrot.
On Parrot, uncontrolled assertion of `cold_reset` sometimes
leaves the DUT unresponsive. The `_cold_reset()` method
implemented in this class is the only known, reliable way to
assert the `cold_reset` signal on Parrot.
Also, the `rec_mode` signal on Parrot is finicky. These are the
1. You can't read or write the signal unless the DUT is on.
2. The setting of the signal is only sampled during a cold
reset. The sampled setting applies to every boot until the
next cold reset.
3. After cold reset, the signal is turned off.
N.B. Rule 3 is subtle. Although `rec_mode` is off after reset,
because of rule 2, the DUT will continue to boot with the prior
recovery mode setting until the next cold reset.
# _PWR_BUTTON_READY_TIME: This represents the time after cold
# reset until the EC will be able to see a power button press.
# Used in _power_off().
# _REC_MODE_READY_TIME: This represents the time after power on
# until the EC will be able to see changes to rec_mode. Used
# in _power_on().
def _cold_reset(self):
# The sequence here leaves the DUT powered on, similar to
# Chrome EC devices.
self._interface.set('pwr_button', 'press')
super(parrotPower, self)._cold_reset()
self._interface.set('pwr_button', 'release')
def _power_off(self):
def _power_on(self, rec_mode):
self._interface.set('rec_mode', rec_mode)