2008-04-29 11:59:53 +04:00
/* OLPC machine specific definitions */
2008-10-23 09:26:29 +04:00
# ifndef _ASM_X86_OLPC_H
# define _ASM_X86_OLPC_H
2008-04-29 11:59:53 +04:00
# 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
2011-06-25 20:34:13 +04:00
# define OLPC_F_EC_WIDE_SCI 0x04
2008-04-29 11:59:53 +04:00
# ifdef CONFIG_OLPC
extern struct olpc_platform_t olpc_platform_info ;
/*
* OLPC board IDs contain the major build number within the mask 0x0ff0 ,
2011-03-17 22:24:16 +03:00
* and the minor build number within 0x000f . Pre - builds have a minor
2008-04-29 11:59:53 +04:00
* 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 ;
}
2011-06-25 20:34:13 +04:00
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 ) ;
2008-04-29 11:59:53 +04:00
# else
static inline int machine_is_olpc ( void )
{
return 0 ;
}
static inline int olpc_has_dcon ( void )
{
return 0 ;
}
2011-06-25 20:34:13 +04:00
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 ;
}
2008-04-29 11:59:53 +04:00
# endif
2011-06-25 20:34:11 +04:00
# 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
2010-02-22 16:42:04 +03:00
extern int pci_olpc_init ( void ) ;
2008-04-29 11:59:53 +04:00
/* 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 */
2011-06-25 20:34:11 +04:00
# define EC_FIRMWARE_REV 0x08
2011-06-25 20:34:13 +04:00
# define EC_WRITE_SCI_MASK 0x1b
2011-06-25 20:34:11 +04:00
# define EC_WAKE_UP_WLAN 0x24
# define EC_WLAN_LEAVE_RESET 0x25
# define EC_SET_SCI_INHIBIT 0x32
# define EC_SET_SCI_INHIBIT_RELEASE 0x34
# define EC_WLAN_ENTER_RESET 0x35
2011-06-25 20:34:13 +04:00
# define EC_WRITE_EXT_SCI_MASK 0x38
# define EC_SCI_QUERY 0x84
# define EC_EXT_SCI_QUERY 0x85
2008-04-29 11:59:53 +04:00
/* 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
2011-06-25 20:34:13 +04:00
# define EC_SCI_SRC_EBOOK 0x10 /* XO-1 only */
# define EC_SCI_SRC_WLAN 0x20 /* XO-1 only */
2008-04-29 11:59:53 +04:00
# define EC_SCI_SRC_ACPWR 0x40
2011-06-25 20:34:13 +04:00
# define EC_SCI_SRC_BATCRIT 0x80
# define EC_SCI_SRC_GPWAKE 0x100 /* XO-1.5 only */
# define EC_SCI_SRC_ALL 0x1FF
2008-04-29 11:59:53 +04:00
/* GPIO assignments */
2009-12-15 05:00:36 +03:00
# define OLPC_GPIO_MIC_AC 1
2011-01-13 04:00:11 +03:00
# define OLPC_GPIO_DCON_STAT0 5
# define OLPC_GPIO_DCON_STAT1 6
# define OLPC_GPIO_DCON_IRQ 7
2008-04-29 11:59:53 +04:00
# define OLPC_GPIO_THRM_ALRM geode_gpio(10)
2011-01-13 04:00:11 +03:00
# define OLPC_GPIO_DCON_LOAD 11
# define OLPC_GPIO_DCON_BLANK 12
# define OLPC_GPIO_SMB_CLK 14
# define OLPC_GPIO_SMB_DATA 15
2008-04-29 11:59:53 +04:00
# define OLPC_GPIO_WORKAUX geode_gpio(24)
# define OLPC_GPIO_LID geode_gpio(26)
# define OLPC_GPIO_ECSCI geode_gpio(27)
2008-10-23 09:26:29 +04:00
# endif /* _ASM_X86_OLPC_H */