diff options
Diffstat (limited to 'include/asm-arm/arch-sa1100/h3600.h')
-rw-r--r-- | include/asm-arm/arch-sa1100/h3600.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/include/asm-arm/arch-sa1100/h3600.h b/include/asm-arm/arch-sa1100/h3600.h new file mode 100644 index 000000000000..1b6355971574 --- /dev/null +++ b/include/asm-arm/arch-sa1100/h3600.h | |||
@@ -0,0 +1,164 @@ | |||
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 | /* generalized support for H3xxx series Compaq Pocket PC's */ | ||
27 | #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800()) | ||
28 | |||
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 | ||
33 | |||
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 | ||
38 | |||
39 | /* | ||
40 | Machine-independent GPIO definitions | ||
41 | --- these are common across all current iPAQ platforms | ||
42 | */ | ||
43 | |||
44 | #define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */ | ||
45 | |||
46 | #define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10) | ||
47 | #define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11) | ||
48 | |||
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) | ||
53 | |||
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) | ||
57 | |||
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) | ||
62 | |||
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 | ||
71 | |||
72 | |||
73 | #ifndef __ASSEMBLY__ | ||
74 | |||
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 */ | ||
89 | }; | ||
90 | |||
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) */ | ||
98 | }; | ||
99 | |||
100 | extern struct ipaq_model_ops ipaq_model_ops; | ||
101 | |||
102 | static __inline__ const char * h3600_generic_name(void) | ||
103 | { | ||
104 | return ipaq_model_ops.generic_name; | ||
105 | } | ||
106 | |||
107 | static __inline__ void assign_h3600_egpio(enum ipaq_egpio_type x, int level) | ||
108 | { | ||
109 | if (ipaq_model_ops.control) | ||
110 | ipaq_model_ops.control(x,level); | ||
111 | } | ||
112 | |||
113 | static __inline__ void clr_h3600_egpio(enum ipaq_egpio_type x) | ||
114 | { | ||
115 | if (ipaq_model_ops.control) | ||
116 | ipaq_model_ops.control(x,0); | ||
117 | } | ||
118 | |||
119 | static __inline__ void set_h3600_egpio(enum ipaq_egpio_type x) | ||
120 | { | ||
121 | if (ipaq_model_ops.control) | ||
122 | ipaq_model_ops.control(x,1); | ||
123 | } | ||
124 | |||
125 | static __inline__ unsigned long read_h3600_egpio(void) | ||
126 | { | ||
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 | { | ||
134 | ipaq_model_ops.blank_callback = f; | ||
135 | return 0; | ||
136 | } | ||
137 | |||
138 | static __inline__ void h3600_unregister_blank_callback(void (*f)(int)) | ||
139 | { | ||
140 | ipaq_model_ops.blank_callback = NULL; | ||
141 | } | ||
142 | |||
143 | |||
144 | static __inline__ int h3600_register_pm_callback(int (*f)(int)) | ||
145 | { | ||
146 | ipaq_model_ops.pm_callback_aux = f; | ||
147 | return 0; | ||
148 | } | ||
149 | |||
150 | static __inline__ void h3600_unregister_pm_callback(int (*f)(int)) | ||
151 | { | ||
152 | ipaq_model_ops.pm_callback_aux = NULL; | ||
153 | } | ||
154 | |||
155 | static __inline__ int h3600_power_management(int req) | ||
156 | { | ||
157 | if (ipaq_model_ops.pm_callback) | ||
158 | return ipaq_model_ops.pm_callback(req); | ||
159 | return 0; | ||
160 | } | ||
161 | |||
162 | #endif /* ASSEMBLY */ | ||
163 | |||
164 | #endif /* _INCLUDE_H3600_H_ */ | ||