olpc.h 3.6 KB
Newer Older
1 2
/* OLPC machine specific definitions */

H
H. Peter Anvin 已提交
3 4
#ifndef _ASM_X86_OLPC_H
#define _ASM_X86_OLPC_H
5 6 7 8 9 10 11 12 13 14 15

#include <asm/geode.h>

struct olpc_platform_t {
	int flags;
	uint32_t boardrev;
	int ecver;
};

#define OLPC_F_PRESENT		0x01
#define OLPC_F_DCON		0x02
16
#define OLPC_F_EC_WIDE_SCI	0x04
17 18 19 20 21 22 23

#ifdef CONFIG_OLPC

extern struct olpc_platform_t olpc_platform_info;

/*
 * OLPC board IDs contain the major build number within the mask 0x0ff0,
L
Lucas De Marchi 已提交
24
 * and the minor build number within 0x000f.  Pre-builds have a minor
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
 * number less than 8, and normal builds start at 8.  For example, 0x0B10
 * is a PreB1, and 0x0C18 is a C1.
 */

static inline uint32_t olpc_board(uint8_t id)
{
	return (id << 4) | 0x8;
}

static inline uint32_t olpc_board_pre(uint8_t id)
{
	return id << 4;
}

static inline int machine_is_olpc(void)
{
	return (olpc_platform_info.flags & OLPC_F_PRESENT) ? 1 : 0;
}

/*
 * The DCON is OLPC's Display Controller.  It has a number of unique
 * features that we might want to take advantage of..
 */
static inline int olpc_has_dcon(void)
{
	return (olpc_platform_info.flags & OLPC_F_DCON) ? 1 : 0;
}

/*
 * The "Mass Production" version of OLPC's XO is identified as being model
 * C2.  During the prototype phase, the following models (in chronological
 * order) were created: A1, B1, B2, B3, B4, C1.  The A1 through B2 models
 * were based on Geode GX CPUs, and models after that were based upon
 * Geode LX CPUs.  There were also some hand-assembled models floating
 * around, referred to as PreB1, PreB2, etc.
 */
static inline int olpc_board_at_least(uint32_t rev)
{
	return olpc_platform_info.boardrev >= rev;
}

66 67 68 69 70 71 72
extern void olpc_ec_wakeup_set(u16 value);
extern void olpc_ec_wakeup_clear(u16 value);
extern bool olpc_ec_wakeup_available(void);

extern int olpc_ec_mask_write(u16 bits);
extern int olpc_ec_sci_query(u16 *sci_value);

73 74 75 76 77 78 79 80 81 82 83 84
#else

static inline int machine_is_olpc(void)
{
	return 0;
}

static inline int olpc_has_dcon(void)
{
	return 0;
}

85 86 87 88 89 90 91 92
static inline void olpc_ec_wakeup_set(u16 value) { }
static inline void olpc_ec_wakeup_clear(u16 value) { }

static inline bool olpc_ec_wakeup_available(void)
{
	return false;
}

93 94
#endif

95 96 97 98 99 100
#ifdef CONFIG_OLPC_XO1_PM
extern void do_olpc_suspend_lowlevel(void);
extern void olpc_xo1_pm_wakeup_set(u16 value);
extern void olpc_xo1_pm_wakeup_clear(u16 value);
#endif

101 102
extern int pci_olpc_init(void);

103 104 105 106 107 108 109
/* EC related functions */

extern int olpc_ec_cmd(unsigned char cmd, unsigned char *inbuf, size_t inlen,
		unsigned char *outbuf, size_t outlen);

/* EC commands */

110
#define EC_FIRMWARE_REV			0x08
111
#define EC_WRITE_SCI_MASK		0x1b
112 113
#define EC_WAKE_UP_WLAN			0x24
#define EC_WLAN_LEAVE_RESET		0x25
114
#define EC_READ_EB_MODE			0x2a
115 116 117
#define EC_SET_SCI_INHIBIT		0x32
#define EC_SET_SCI_INHIBIT_RELEASE	0x34
#define EC_WLAN_ENTER_RESET		0x35
118 119 120
#define EC_WRITE_EXT_SCI_MASK		0x38
#define EC_SCI_QUERY			0x84
#define EC_EXT_SCI_QUERY		0x85
121 122 123 124 125 126 127 128

/* SCI source values */

#define EC_SCI_SRC_EMPTY	0x00
#define EC_SCI_SRC_GAME		0x01
#define EC_SCI_SRC_BATTERY	0x02
#define EC_SCI_SRC_BATSOC	0x04
#define EC_SCI_SRC_BATERR	0x08
129 130
#define EC_SCI_SRC_EBOOK	0x10	/* XO-1 only */
#define EC_SCI_SRC_WLAN		0x20	/* XO-1 only */
131
#define EC_SCI_SRC_ACPWR	0x40
132 133 134
#define EC_SCI_SRC_BATCRIT	0x80
#define EC_SCI_SRC_GPWAKE	0x100	/* XO-1.5 only */
#define EC_SCI_SRC_ALL		0x1FF
135 136 137

/* GPIO assignments */

138
#define OLPC_GPIO_MIC_AC	1
139 140 141
#define OLPC_GPIO_DCON_STAT0	5
#define OLPC_GPIO_DCON_STAT1	6
#define OLPC_GPIO_DCON_IRQ	7
142
#define OLPC_GPIO_THRM_ALRM	geode_gpio(10)
143 144 145 146
#define OLPC_GPIO_DCON_LOAD    11
#define OLPC_GPIO_DCON_BLANK   12
#define OLPC_GPIO_SMB_CLK      14
#define OLPC_GPIO_SMB_DATA     15
147
#define OLPC_GPIO_WORKAUX	geode_gpio(24)
148 149
#define OLPC_GPIO_LID		26
#define OLPC_GPIO_ECSCI		27
150

H
H. Peter Anvin 已提交
151
#endif /* _ASM_X86_OLPC_H */