1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* 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);
/**
* Set the low-level power chipset state.
*
* @param new_state New chipset state.
*/
void power_set_state(enum power_state new_state);
/**
* 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 power signal GPIOs.
*/
#ifdef HAS_TASK_CHIPSET
void power_signal_interrupt(enum gpio_signal signal);
#else
#define power_signal_interrupt NULL
#endif
#endif /* __CROS_EC_POWER_H */
|