3 * Definitions for H3600 Handheld Computer
5 * Copyright 2000 Compaq Computer Corporation.
7 * Use consistent with the GNU GPL is permitted,
8 * provided that this copyright notice is
9 * preserved in its entirety in all copies and derived works.
11 * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
12 * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
13 * FITNESS FOR ANY PARTICULAR PURPOSE.
15 * Author: Jamey Hicks.
19 * 2001-10-?? Andrew Christian Added support for iPAQ H3800
23 #ifndef _INCLUDE_H3600_H_
24 #define _INCLUDE_H3600_H_
26 /* generalized support for H3xxx series Compaq Pocket PC's */
27 #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800())
29 /* Physical memory regions corresponding to chip selects */
30 #define H3600_EGPIO_PHYS (SA1100_CS5_PHYS + 0x01000000)
31 #define H3600_BANK_2_PHYS SA1100_CS2_PHYS
32 #define H3600_BANK_4_PHYS SA1100_CS4_PHYS
34 /* Virtual memory regions corresponding to chip selects 2 & 4 (used on sleeves) */
35 #define H3600_EGPIO_VIRT 0xf0000000
36 #define H3600_BANK_2_VIRT 0xf1000000
37 #define H3600_BANK_4_VIRT 0xf3800000
40 Machine-independent GPIO definitions
41 --- these are common across all current iPAQ platforms
44 #define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */
46 #define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10)
47 #define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11)
49 /* UDA1341 L3 Interface */
50 #define GPIO_H3600_L3_DATA GPIO_GPIO (14)
51 #define GPIO_H3600_L3_MODE GPIO_GPIO (15)
52 #define GPIO_H3600_L3_CLOCK GPIO_GPIO (16)
54 #define GPIO_H3600_PCMCIA_CD0 GPIO_GPIO (17)
55 #define GPIO_H3600_SYS_CLK GPIO_GPIO (19)
56 #define GPIO_H3600_PCMCIA_IRQ0 GPIO_GPIO (21)
58 #define GPIO_H3600_COM_DCD GPIO_GPIO (23)
59 #define GPIO_H3600_OPT_IRQ GPIO_GPIO (24)
60 #define GPIO_H3600_COM_CTS GPIO_GPIO (25)
61 #define GPIO_H3600_COM_RTS GPIO_GPIO (26)
63 #define IRQ_GPIO_H3600_NPOWER_BUTTON IRQ_GPIO0
64 #define IRQ_GPIO_H3600_PCMCIA_CD1 IRQ_GPIO10
65 #define IRQ_GPIO_H3600_PCMCIA_IRQ1 IRQ_GPIO11
66 #define IRQ_GPIO_H3600_PCMCIA_CD0 IRQ_GPIO17
67 #define IRQ_GPIO_H3600_PCMCIA_IRQ0 IRQ_GPIO21
68 #define IRQ_GPIO_H3600_COM_DCD IRQ_GPIO23
69 #define IRQ_GPIO_H3600_OPT_IRQ IRQ_GPIO24
70 #define IRQ_GPIO_H3600_COM_CTS IRQ_GPIO25
75 enum ipaq_egpio_type
{
76 IPAQ_EGPIO_LCD_POWER
, /* Power to the LCD panel */
77 IPAQ_EGPIO_CODEC_NRESET
, /* Clear to reset the audio codec (remember to return high) */
78 IPAQ_EGPIO_AUDIO_ON
, /* Audio power */
79 IPAQ_EGPIO_QMUTE
, /* Audio muting */
80 IPAQ_EGPIO_OPT_NVRAM_ON
, /* Non-volatile RAM on extension sleeves (SPI interface) */
81 IPAQ_EGPIO_OPT_ON
, /* Power to extension sleeves */
82 IPAQ_EGPIO_CARD_RESET
, /* Reset PCMCIA cards on extension sleeve (???) */
83 IPAQ_EGPIO_OPT_RESET
, /* Reset option pack (???) */
84 IPAQ_EGPIO_IR_ON
, /* IR sensor/emitter power */
85 IPAQ_EGPIO_IR_FSEL
, /* IR speed selection 1->fast, 0->slow */
86 IPAQ_EGPIO_RS232_ON
, /* Maxim RS232 chip power */
87 IPAQ_EGPIO_VPP_ON
, /* Turn on power to flash programming */
88 IPAQ_EGPIO_LCD_ENABLE
, /* Enable/disable LCD controller */
91 struct ipaq_model_ops
{
92 const char *generic_name
;
93 void (*control
)(enum ipaq_egpio_type
, int);
94 unsigned long (*read
)(void);
95 void (*blank_callback
)(int blank
);
96 int (*pm_callback
)(int req
); /* Primary model callback */
97 int (*pm_callback_aux
)(int req
); /* Secondary callback (used by HAL modules) */
100 extern struct ipaq_model_ops ipaq_model_ops
;
102 static __inline__
const char * h3600_generic_name(void)
104 return ipaq_model_ops
.generic_name
;
107 static __inline__
void assign_h3600_egpio(enum ipaq_egpio_type x
, int level
)
109 if (ipaq_model_ops
.control
)
110 ipaq_model_ops
.control(x
,level
);
113 static __inline__
void clr_h3600_egpio(enum ipaq_egpio_type x
)
115 if (ipaq_model_ops
.control
)
116 ipaq_model_ops
.control(x
,0);
119 static __inline__
void set_h3600_egpio(enum ipaq_egpio_type x
)
121 if (ipaq_model_ops
.control
)
122 ipaq_model_ops
.control(x
,1);
125 static __inline__
unsigned long read_h3600_egpio(void)
127 if (ipaq_model_ops
.read
)
128 return ipaq_model_ops
.read();
132 static __inline__
int h3600_register_blank_callback(void (*f
)(int))
134 ipaq_model_ops
.blank_callback
= f
;
138 static __inline__
void h3600_unregister_blank_callback(void (*f
)(int))
140 ipaq_model_ops
.blank_callback
= NULL
;
144 static __inline__
int h3600_register_pm_callback(int (*f
)(int))
146 ipaq_model_ops
.pm_callback_aux
= f
;
150 static __inline__
void h3600_unregister_pm_callback(int (*f
)(int))
152 ipaq_model_ops
.pm_callback_aux
= NULL
;
155 static __inline__
int h3600_power_management(int req
)
157 if (ipaq_model_ops
.pm_callback
)
158 return ipaq_model_ops
.pm_callback(req
);
162 #endif /* ASSEMBLY */
164 #endif /* _INCLUDE_H3600_H_ */