]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/arm_drivers/lcd/src/arch-sa1100/h3600.h
update
[l4.git] / l4 / pkg / arm_drivers / lcd / src / arch-sa1100 / h3600.h
1 /*
2  *
3  * Definitions for H3600 Handheld Computer
4  *
5  * Copyright 2000 Compaq Computer Corporation.
6  *
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.
10  *
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.
14  *
15  * Author: Jamey Hicks.
16  *
17  * History:
18  *
19  * 2001-10-??   Andrew Christian   Added support for iPAQ H3800
20  *
21  */
22
23 #ifndef _INCLUDE_H3600_H_ 
24 #define _INCLUDE_H3600_H_
25
26 #ifndef __ASSEMBLY__
27 //#include "serial.h"
28 #endif
29
30 /* generalized support for H3xxx series Compaq Pocket PC's */
31 #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800())  
32
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
37
38 /* 
39    Machine-independent GPIO definitions 
40    --- these are common across all current iPAQ platforms 
41 */
42
43 #define GPIO_H3600_NPOWER_BUTTON        GPIO_GPIO (0)   /* Also known as the "off button"  */
44
45 #define GPIO_H3600_PCMCIA_CD1           GPIO_GPIO (10)
46 #define GPIO_H3600_PCMCIA_IRQ1          GPIO_GPIO (11)
47
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)
52
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)
56
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)
61
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
70
71
72 #ifndef __ASSEMBLY__
73
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 */
88 };
89
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) */
97 };
98
99 extern struct ipaq_model_ops ipaq_model_ops;
100
101 static __inline__ const char * h3600_generic_name( void ) {
102         return ipaq_model_ops.generic_name;
103 }
104
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); 
108         else
109            putstr("no control function\r\n");
110 }
111
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); 
115         else
116            putstr("no control function\r\n");
117 }
118
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);
122         else
123            putstr("no control function\r\n");
124 }
125
126 static __inline__ unsigned long read_h3600_egpio( void ) {
127         if (ipaq_model_ops.read)
128                 return ipaq_model_ops.read();
129         return 0;
130 }
131
132 static __inline__ int  h3600_register_blank_callback( void (*f)(int) ) {
133         ipaq_model_ops.blank_callback = f;
134         return 0;
135 }
136
137 static __inline__ void h3600_unregister_blank_callback( void (*f)(int) ) {
138         ipaq_model_ops.blank_callback = NULL;
139 }
140
141
142 static __inline__ int  h3600_register_pm_callback( int (*f)(int) ) {
143         ipaq_model_ops.pm_callback_aux = f;
144         return 0;
145 }
146
147 static __inline__ void h3600_unregister_pm_callback( int (*f)(int) ) {
148         ipaq_model_ops.pm_callback_aux = NULL;
149 }
150
151 static __inline__ int h3600_power_management( int req ) {
152         if ( ipaq_model_ops.pm_callback )
153                 return ipaq_model_ops.pm_callback(req);
154         return 0;
155 }
156
157 #endif /* ASSEMBLY */
158
159 #endif /* _INCLUDE_H3600_H_ */