.. | .. |
---|
2 | 2 | #ifndef _LINUX_OLPC_EC_H |
---|
3 | 3 | #define _LINUX_OLPC_EC_H |
---|
4 | 4 | |
---|
| 5 | +#include <linux/bits.h> |
---|
| 6 | + |
---|
5 | 7 | /* XO-1 EC commands */ |
---|
6 | 8 | #define EC_FIRMWARE_REV 0x08 |
---|
7 | 9 | #define EC_WRITE_SCI_MASK 0x1b |
---|
.. | .. |
---|
16 | 18 | #define EC_SCI_QUERY 0x84 |
---|
17 | 19 | #define EC_EXT_SCI_QUERY 0x85 |
---|
18 | 20 | |
---|
| 21 | +/* SCI source values */ |
---|
| 22 | +#define EC_SCI_SRC_GAME BIT(0) |
---|
| 23 | +#define EC_SCI_SRC_BATTERY BIT(1) |
---|
| 24 | +#define EC_SCI_SRC_BATSOC BIT(2) |
---|
| 25 | +#define EC_SCI_SRC_BATERR BIT(3) |
---|
| 26 | +#define EC_SCI_SRC_EBOOK BIT(4) /* XO-1 only */ |
---|
| 27 | +#define EC_SCI_SRC_WLAN BIT(5) /* XO-1 only */ |
---|
| 28 | +#define EC_SCI_SRC_ACPWR BIT(6) |
---|
| 29 | +#define EC_SCI_SRC_BATCRIT BIT(7) |
---|
| 30 | +#define EC_SCI_SRC_GPWAKE BIT(8) /* XO-1.5 only */ |
---|
| 31 | +#define EC_SCI_SRC_ALL GENMASK(8, 0) |
---|
| 32 | + |
---|
19 | 33 | struct platform_device; |
---|
20 | 34 | |
---|
21 | 35 | struct olpc_ec_driver { |
---|
22 | | - int (*probe)(struct platform_device *); |
---|
23 | 36 | int (*suspend)(struct platform_device *); |
---|
24 | 37 | int (*resume)(struct platform_device *); |
---|
25 | 38 | |
---|
26 | 39 | int (*ec_cmd)(u8, u8 *, size_t, u8 *, size_t, void *); |
---|
| 40 | + |
---|
| 41 | + bool wakeup_available; |
---|
27 | 42 | }; |
---|
28 | 43 | |
---|
29 | | -#ifdef CONFIG_OLPC |
---|
| 44 | +#ifdef CONFIG_OLPC_EC |
---|
30 | 45 | |
---|
31 | 46 | extern void olpc_ec_driver_register(struct olpc_ec_driver *drv, void *arg); |
---|
32 | 47 | |
---|
33 | 48 | extern int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf, |
---|
34 | 49 | size_t outlen); |
---|
35 | 50 | |
---|
| 51 | +extern void olpc_ec_wakeup_set(u16 value); |
---|
| 52 | +extern void olpc_ec_wakeup_clear(u16 value); |
---|
| 53 | + |
---|
| 54 | +extern int olpc_ec_mask_write(u16 bits); |
---|
| 55 | +extern int olpc_ec_sci_query(u16 *sci_value); |
---|
| 56 | + |
---|
| 57 | +extern bool olpc_ec_wakeup_available(void); |
---|
| 58 | + |
---|
36 | 59 | #else |
---|
37 | 60 | |
---|
38 | 61 | static inline int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf, |
---|
39 | 62 | size_t outlen) { return -ENODEV; } |
---|
40 | 63 | |
---|
41 | | -#endif /* CONFIG_OLPC */ |
---|
| 64 | +static inline void olpc_ec_wakeup_set(u16 value) { } |
---|
| 65 | +static inline void olpc_ec_wakeup_clear(u16 value) { } |
---|
| 66 | + |
---|
| 67 | +static inline bool olpc_ec_wakeup_available(void) |
---|
| 68 | +{ |
---|
| 69 | + return false; |
---|
| 70 | +} |
---|
| 71 | + |
---|
| 72 | +#endif /* CONFIG_OLPC_EC */ |
---|
42 | 73 | |
---|
43 | 74 | #endif /* _LINUX_OLPC_EC_H */ |
---|