xref: /openbmc/linux/include/linux/olpc-ec.h (revision 454a3487)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2392a325cSAndres Salomon #ifndef _LINUX_OLPC_EC_H
3392a325cSAndres Salomon #define _LINUX_OLPC_EC_H
4392a325cSAndres Salomon 
58097548fSLubomir Rintel #include <linux/bits.h>
68097548fSLubomir Rintel 
7392a325cSAndres Salomon /* XO-1 EC commands */
8392a325cSAndres Salomon #define EC_FIRMWARE_REV			0x08
9392a325cSAndres Salomon #define EC_WRITE_SCI_MASK		0x1b
10392a325cSAndres Salomon #define EC_WAKE_UP_WLAN			0x24
11392a325cSAndres Salomon #define EC_WLAN_LEAVE_RESET		0x25
1298d4f93cSJens Frederich #define EC_DCON_POWER_MODE		0x26
13392a325cSAndres Salomon #define EC_READ_EB_MODE			0x2a
14392a325cSAndres Salomon #define EC_SET_SCI_INHIBIT		0x32
15392a325cSAndres Salomon #define EC_SET_SCI_INHIBIT_RELEASE	0x34
16392a325cSAndres Salomon #define EC_WLAN_ENTER_RESET		0x35
17392a325cSAndres Salomon #define EC_WRITE_EXT_SCI_MASK		0x38
18392a325cSAndres Salomon #define EC_SCI_QUERY			0x84
19392a325cSAndres Salomon #define EC_EXT_SCI_QUERY		0x85
20392a325cSAndres Salomon 
21ec9964b4SLubomir Rintel /* SCI source values */
228097548fSLubomir Rintel #define EC_SCI_SRC_GAME         BIT(0)
238097548fSLubomir Rintel #define EC_SCI_SRC_BATTERY      BIT(1)
248097548fSLubomir Rintel #define EC_SCI_SRC_BATSOC       BIT(2)
258097548fSLubomir Rintel #define EC_SCI_SRC_BATERR       BIT(3)
268097548fSLubomir Rintel #define EC_SCI_SRC_EBOOK        BIT(4)    /* XO-1 only */
278097548fSLubomir Rintel #define EC_SCI_SRC_WLAN         BIT(5)    /* XO-1 only */
288097548fSLubomir Rintel #define EC_SCI_SRC_ACPWR        BIT(6)
298097548fSLubomir Rintel #define EC_SCI_SRC_BATCRIT      BIT(7)
308097548fSLubomir Rintel #define EC_SCI_SRC_GPWAKE       BIT(8)   /* XO-1.5 only */
318097548fSLubomir Rintel #define EC_SCI_SRC_ALL          GENMASK(8, 0)
32ec9964b4SLubomir Rintel 
33ac250415SAndres Salomon struct platform_device;
34ac250415SAndres Salomon 
353d26c20bSAndres Salomon struct olpc_ec_driver {
36ac250415SAndres Salomon 	int (*suspend)(struct platform_device *);
37ac250415SAndres Salomon 	int (*resume)(struct platform_device *);
38ac250415SAndres Salomon 
393d26c20bSAndres Salomon 	int (*ec_cmd)(u8, u8 *, size_t, u8 *, size_t, void *);
40ec9964b4SLubomir Rintel 
41ec9964b4SLubomir Rintel 	bool wakeup_available;
423d26c20bSAndres Salomon };
433d26c20bSAndres Salomon 
440c3d931bSLubomir Rintel #ifdef CONFIG_OLPC_EC
45392a325cSAndres Salomon 
463d26c20bSAndres Salomon extern void olpc_ec_driver_register(struct olpc_ec_driver *drv, void *arg);
473d26c20bSAndres Salomon 
48392a325cSAndres Salomon extern int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf,
49392a325cSAndres Salomon 		size_t outlen);
50392a325cSAndres Salomon 
51ec9964b4SLubomir Rintel extern void olpc_ec_wakeup_set(u16 value);
52ec9964b4SLubomir Rintel extern void olpc_ec_wakeup_clear(u16 value);
53ec9964b4SLubomir Rintel 
54ec9964b4SLubomir Rintel extern int olpc_ec_mask_write(u16 bits);
55ec9964b4SLubomir Rintel extern int olpc_ec_sci_query(u16 *sci_value);
56ec9964b4SLubomir Rintel 
57ec9964b4SLubomir Rintel extern bool olpc_ec_wakeup_available(void);
58ec9964b4SLubomir Rintel 
59*454a3487SArnd Bergmann asmlinkage int xo1_do_sleep(u8 sleep_state);
60*454a3487SArnd Bergmann 
61392a325cSAndres Salomon #else
62392a325cSAndres Salomon 
olpc_ec_cmd(u8 cmd,u8 * inbuf,size_t inlen,u8 * outbuf,size_t outlen)63392a325cSAndres Salomon static inline int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf,
64392a325cSAndres Salomon 		size_t outlen) { return -ENODEV; }
65392a325cSAndres Salomon 
olpc_ec_wakeup_set(u16 value)66ec9964b4SLubomir Rintel static inline void olpc_ec_wakeup_set(u16 value) { }
olpc_ec_wakeup_clear(u16 value)67ec9964b4SLubomir Rintel static inline void olpc_ec_wakeup_clear(u16 value) { }
68ec9964b4SLubomir Rintel 
olpc_ec_wakeup_available(void)69ec9964b4SLubomir Rintel static inline bool olpc_ec_wakeup_available(void)
70ec9964b4SLubomir Rintel {
71ec9964b4SLubomir Rintel 	return false;
72ec9964b4SLubomir Rintel }
73ec9964b4SLubomir Rintel 
740c3d931bSLubomir Rintel #endif /* CONFIG_OLPC_EC */
75392a325cSAndres Salomon 
76392a325cSAndres Salomon #endif /* _LINUX_OLPC_EC_H */
77