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_
30 /* generalized support for H3xxx series Compaq Pocket PC's */
31 #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800())
33 /* Virtual memory regions corresponding to chip selects 2 & 4 (used on sleeves) */
34 // #define H3600_EGPIO_VIRT 0xf0000000
35 // #define H3600_BANK_2_VIRT 0xf1000000
36 // #define H3600_BANK_4_VIRT 0xf3800000
39 Machine-independent GPIO definitions
40 --- these are common across all current iPAQ platforms
43 #define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */
45 #define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10)
46 #define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11)
48 /* UDA1341 L3 Interface */
49 #define GPIO_H3600_L3_DATA GPIO_GPIO (14)
50 #define GPIO_H3600_L3_MODE GPIO_GPIO (15)
51 #define GPIO_H3600_L3_CLOCK GPIO_GPIO (16)
53 #define GPIO_H3600_PCMCIA_CD0 GPIO_GPIO (17)
54 #define GPIO_H3600_SYS_CLK GPIO_GPIO (19)
55 #define GPIO_H3600_PCMCIA_IRQ0 GPIO_GPIO (21)
57 #define GPIO_H3600_COM_DCD GPIO_GPIO (23)
58 #define GPIO_H3600_OPT_IRQ GPIO_GPIO (24)
59 #define GPIO_H3600_COM_CTS GPIO_GPIO (25)
60 #define GPIO_H3600_COM_RTS GPIO_GPIO (26)
62 #define IRQ_GPIO_H3600_NPOWER_BUTTON IRQ_GPIO0
63 #define IRQ_GPIO_H3600_PCMCIA_CD1 IRQ_GPIO10
64 #define IRQ_GPIO_H3600_PCMCIA_IRQ1 IRQ_GPIO11
65 #define IRQ_GPIO_H3600_PCMCIA_CD0 IRQ_GPIO17
66 #define IRQ_GPIO_H3600_PCMCIA_IRQ0 IRQ_GPIO21
67 #define IRQ_GPIO_H3600_COM_DCD IRQ_GPIO23
68 #define IRQ_GPIO_H3600_OPT_IRQ IRQ_GPIO24
69 #define IRQ_GPIO_H3600_COM_CTS IRQ_GPIO25
74 enum ipaq_egpio_type {
75 IPAQ_EGPIO_LCD_ON, /* Power to the LCD panel */
76 IPAQ_EGPIO_CODEC_NRESET, /* Clear to reset the audio codec (remember to return high) */
77 IPAQ_EGPIO_AUDIO_ON, /* Audio power */
78 IPAQ_EGPIO_QMUTE, /* Audio muting */
79 IPAQ_EGPIO_OPT_NVRAM_ON, /* Non-volatile RAM on extension sleeves (SPI interface) */
80 IPAQ_EGPIO_OPT_ON, /* Power to extension sleeves */
81 IPAQ_EGPIO_CARD_RESET, /* Reset PCMCIA cards on extension sleeve (???) */
82 IPAQ_EGPIO_OPT_RESET, /* Reset option pack (???) */
83 IPAQ_EGPIO_IR_ON, /* IR sensor/emitter power */
84 IPAQ_EGPIO_IR_FSEL, /* IR speed selection 1->fast, 0->slow */
85 IPAQ_EGPIO_RS232_ON, /* Maxim RS232 chip power */
86 IPAQ_EGPIO_VPP_ON, /* Turn on power to flash programming */
87 IPAQ_EGPIO_COM_DSR, /* only on H3800 */
90 struct ipaq_model_ops {
91 const char *generic_name;
92 void (*control)(enum ipaq_egpio_type, int);
93 unsigned long (*read)(void);
94 void (*blank_callback)(int blank);
95 int (*pm_callback)(int req); /* Primary model callback */
96 int (*pm_callback_aux)(int req); /* Secondary callback (used by HAL modules) */
99 extern struct ipaq_model_ops ipaq_model_ops;
101 static __inline__ const char * h3600_generic_name( void ) {
102 return ipaq_model_ops.generic_name;
105 static __inline__ void assign_h3600_egpio( enum ipaq_egpio_type x, int level ) {
106 if (ipaq_model_ops.control)
107 ipaq_model_ops.control(x,level);
109 putstr("no control function\r\n");
112 static __inline__ void clr_h3600_egpio( enum ipaq_egpio_type x ) {
113 if (ipaq_model_ops.control)
114 ipaq_model_ops.control(x,0);
116 putstr("no control function\r\n");
119 static __inline__ void set_h3600_egpio( enum ipaq_egpio_type x ) {
120 if (ipaq_model_ops.control)
121 ipaq_model_ops.control(x,1);
123 putstr("no control function\r\n");
126 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) ) {
133 ipaq_model_ops.blank_callback = f;
137 static __inline__ void h3600_unregister_blank_callback( void (*f)(int) ) {
138 ipaq_model_ops.blank_callback = NULL;
142 static __inline__ int h3600_register_pm_callback( int (*f)(int) ) {
143 ipaq_model_ops.pm_callback_aux = f;
147 static __inline__ void h3600_unregister_pm_callback( int (*f)(int) ) {
148 ipaq_model_ops.pm_callback_aux = NULL;
151 static __inline__ int h3600_power_management( int req ) {
152 if ( ipaq_model_ops.pm_callback )
153 return ipaq_model_ops.pm_callback(req);
157 #endif /* ASSEMBLY */
159 #endif /* _INCLUDE_H3600_H_ */