mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-10 17:41:54 +00:00
Integrate with power/common.c -- a real state machine now. Also remove duplicate and unused functions/consts. BUG=chrome-os-partner:24831 BRANCH=nyan TEST=on nyan rev 3.12. re-plug AC: PASS, power on 2 reboot: PASS, power on 2 power off (S5), power on: PASS, power off 4, power on 5 power off (G3), power on: PASS, power off 4, power on 5 lid close / power off (S5)/ lid open: PASS, power on 3 lid close / power off (G3)/ lid open: PASS, power on 3 press power button and release: nothing happens after 15s. button off (S5)/ on: PASS, power off 3, power on 4 button off (G3)/ on: PASS, power off 3, power on 4 power off (S5)/ button on: PASS, power off 4, power on 4 power off (G3)/ button on: PASS, power off 4, power on 4 button off (S5)/ power on: PASS, power off 3, power on 5 button off (G3)/ power on: PASS, power off 3, power on 4 button off (S5)/ lid open: PASS, power off 3, power on 3 button off (G3)/ lid open: PASS, power off 3, power on 3 is off, long press button (60s): power on 4, too long, shutdown, stay off is on, long press button (60s): power off 3, stay off apreset cold: entered to S5, power off 3, power on 5 apreset warm: power state is not changed, but reboots to BIOS. Change-Id: Ie12fa4f79b6156f71f89155b2b01880914809c75 Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/182348 Reviewed-by: Randall Spangler <rspangler@chromium.org>
100 lines
2.6 KiB
C
100 lines
2.6 KiB
C
/* Copyright (c) 2013 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.
|
|
*/
|
|
|
|
/* Common power interface for all chipsets */
|
|
|
|
#ifndef __CROS_EC_POWER_H
|
|
#define __CROS_EC_POWER_H
|
|
|
|
#include "common.h"
|
|
#include "gpio.h"
|
|
|
|
enum power_state {
|
|
/* Steady states */
|
|
POWER_G3 = 0, /*
|
|
* System is off (not technically all the way into G3,
|
|
* which means totally unpowered...)
|
|
*/
|
|
POWER_S5, /* System is soft-off */
|
|
POWER_S3, /* Suspend; RAM on, processor is asleep */
|
|
POWER_S0, /* System is on */
|
|
|
|
/* Transitions */
|
|
POWER_G3S5, /* G3 -> S5 (at system init time) */
|
|
POWER_S5S3, /* S5 -> S3 */
|
|
POWER_S3S0, /* S3 -> S0 */
|
|
POWER_S0S3, /* S0 -> S3 */
|
|
POWER_S3S5, /* S3 -> S5 */
|
|
POWER_S5G3, /* S5 -> G3 */
|
|
};
|
|
|
|
/* Information on an power signal */
|
|
struct power_signal_info {
|
|
enum gpio_signal gpio; /* GPIO for signal */
|
|
int level; /* GPIO level which sets signal bit */
|
|
const char *name; /* Name of signal */
|
|
};
|
|
|
|
/*
|
|
* Each board must provide its signal list and a corresponding enum
|
|
* power_signal.
|
|
*/
|
|
extern const struct power_signal_info power_signal_list[];
|
|
|
|
/* Convert enum power_signal to a mask for signal functions */
|
|
#define POWER_SIGNAL_MASK(signal) (1 << (signal))
|
|
|
|
/**
|
|
* Return current input signal state (one or more POWER_SIGNAL_MASK()s).
|
|
*/
|
|
uint32_t power_get_signals(void);
|
|
|
|
/**
|
|
* Check for required inputs
|
|
*
|
|
* @param want Mask of signals which must be present (one or more
|
|
* POWER_SIGNAL_MASK()s).
|
|
*
|
|
* @return Non-zero if all present; zero if a required signal is missing.
|
|
*/
|
|
int power_has_signals(uint32_t want);
|
|
|
|
/**
|
|
* Wait for power input signals to be present
|
|
*
|
|
* @param want Mask of signals which must be present (one or more
|
|
* POWER_SIGNAL_MASK()s). If want=0, stops waiting for
|
|
* signals.
|
|
* @return EC_SUCCESS when all inputs are present, or ERROR_TIMEOUT if timeout
|
|
* before reaching the desired state.
|
|
*/
|
|
int power_wait_signals(uint32_t want);
|
|
|
|
/**
|
|
* Chipset-specific initialization
|
|
*
|
|
* @return The state the chipset should start in. Usually POWER_G3, but may
|
|
* be POWER_G0 if the chipset was already on and we've jumped to this image.
|
|
*/
|
|
enum power_state power_chipset_init(void);
|
|
|
|
/**
|
|
* Chipset-specific state handler
|
|
*
|
|
* @return The updated state for the chipset.
|
|
*/
|
|
enum power_state power_handle_state(enum power_state state);
|
|
|
|
/**
|
|
* Interrupt handler for chipset GPIOs.
|
|
*/
|
|
#if defined(CONFIG_CHIPSET_X86) || defined(CONFIG_CHIPSET_TEGRA)
|
|
void power_signal_interrupt(enum gpio_signal signal);
|
|
#else
|
|
#define power_signal_interrupt NULL
|
|
#endif
|
|
|
|
#endif /* __CROS_EC_POWER_H */
|