1 |
1276 |
phoenix |
/*
|
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 |
|
|
#include <linux/config.h>
|
27 |
|
|
|
28 |
|
|
/* generalized support for H3xxx series Compaq Pocket PC's */
|
29 |
|
|
#define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800())
|
30 |
|
|
|
31 |
|
|
/* Virtual memory regions corresponding to chip selects 2 & 4 (used on sleeves) */
|
32 |
|
|
#define H3600_EGPIO_VIRT 0xf0000000
|
33 |
|
|
#define H3600_BANK_2_VIRT 0xf1000000
|
34 |
|
|
#define H3600_BANK_4_VIRT 0xf3800000
|
35 |
|
|
|
36 |
|
|
/*
|
37 |
|
|
Machine-independent GPIO definitions
|
38 |
|
|
--- these are common across all current iPAQ platforms
|
39 |
|
|
*/
|
40 |
|
|
|
41 |
|
|
#define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */
|
42 |
|
|
#define GPIO_H3600_MICROCONTROLLER GPIO_GPIO (1) /* From ASIC2 on H3800 */
|
43 |
|
|
|
44 |
|
|
#define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10)
|
45 |
|
|
#define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11)
|
46 |
|
|
|
47 |
|
|
/* UDA1341 L3 Interface */
|
48 |
|
|
#define GPIO_H3600_L3_DATA GPIO_GPIO (14)
|
49 |
|
|
#define GPIO_H3600_L3_MODE GPIO_GPIO (15)
|
50 |
|
|
#define GPIO_H3600_L3_CLOCK GPIO_GPIO (16)
|
51 |
|
|
|
52 |
|
|
#define GPIO_H3600_PCMCIA_CD0 GPIO_GPIO (17)
|
53 |
|
|
#define GPIO_H3600_SYS_CLK GPIO_GPIO (19)
|
54 |
|
|
#define GPIO_H3600_PCMCIA_IRQ0 GPIO_GPIO (21)
|
55 |
|
|
|
56 |
|
|
#define GPIO_H3600_COM_DCD GPIO_GPIO (23)
|
57 |
|
|
#define GPIO_H3600_OPT_IRQ GPIO_GPIO (24)
|
58 |
|
|
#define GPIO_H3600_COM_CTS GPIO_GPIO (25)
|
59 |
|
|
#define GPIO_H3600_COM_RTS GPIO_GPIO (26)
|
60 |
|
|
|
61 |
|
|
#define IRQ_GPIO_H3600_NPOWER_BUTTON IRQ_GPIO0
|
62 |
|
|
#define IRQ_GPIO_H3600_MICROCONTROLLER IRQ_GPIO1
|
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 |
|
|
enum ipaq_model {
|
74 |
|
|
IPAQ_H3100,
|
75 |
|
|
IPAQ_H3600,
|
76 |
|
|
IPAQ_H3800
|
77 |
|
|
};
|
78 |
|
|
|
79 |
|
|
enum ipaq_egpio_type {
|
80 |
|
|
IPAQ_EGPIO_LCD_ON, /* Power to the LCD panel */
|
81 |
|
|
IPAQ_EGPIO_CODEC_NRESET, /* Clear to reset the audio codec (remember to return high) */
|
82 |
|
|
IPAQ_EGPIO_AUDIO_ON, /* Audio power */
|
83 |
|
|
IPAQ_EGPIO_QMUTE, /* Audio muting */
|
84 |
|
|
IPAQ_EGPIO_OPT_NVRAM_ON, /* Non-volatile RAM on extension sleeves (SPI interface) */
|
85 |
|
|
IPAQ_EGPIO_OPT_ON, /* Power to extension sleeves */
|
86 |
|
|
IPAQ_EGPIO_CARD_RESET, /* Reset PCMCIA cards on extension sleeve (???) */
|
87 |
|
|
IPAQ_EGPIO_OPT_RESET, /* Reset option pack (???) */
|
88 |
|
|
IPAQ_EGPIO_IR_ON, /* IR sensor/emitter power */
|
89 |
|
|
IPAQ_EGPIO_IR_FSEL, /* IR speed selection 1->fast, 0->slow */
|
90 |
|
|
IPAQ_EGPIO_RS232_ON, /* Maxim RS232 chip power */
|
91 |
|
|
IPAQ_EGPIO_VPP_ON, /* Turn on power to flash programming */
|
92 |
|
|
};
|
93 |
|
|
|
94 |
|
|
struct ipaq_model_ops {
|
95 |
|
|
enum ipaq_model model;
|
96 |
|
|
const char *generic_name;
|
97 |
|
|
void (*initialize)(void);
|
98 |
|
|
void (*control)(enum ipaq_egpio_type, int);
|
99 |
|
|
unsigned long (*read)(void);
|
100 |
|
|
};
|
101 |
|
|
|
102 |
|
|
extern struct ipaq_model_ops ipaq_model_ops;
|
103 |
|
|
|
104 |
|
|
#ifdef CONFIG_SA1100_H3XXX
|
105 |
|
|
static __inline__ enum ipaq_model h3600_model( void ) {
|
106 |
|
|
return ipaq_model_ops.model;
|
107 |
|
|
}
|
108 |
|
|
|
109 |
|
|
static __inline__ const char * h3600_generic_name( void ) {
|
110 |
|
|
return ipaq_model_ops.generic_name;
|
111 |
|
|
}
|
112 |
|
|
|
113 |
|
|
static __inline__ void init_h3600_egpio( void ) {
|
114 |
|
|
if (ipaq_model_ops.initialize)
|
115 |
|
|
ipaq_model_ops.initialize();
|
116 |
|
|
}
|
117 |
|
|
|
118 |
|
|
static __inline__ void assign_h3600_egpio( enum ipaq_egpio_type x, int level ) {
|
119 |
|
|
if (ipaq_model_ops.control)
|
120 |
|
|
ipaq_model_ops.control(x,level);
|
121 |
|
|
}
|
122 |
|
|
|
123 |
|
|
static __inline__ void clr_h3600_egpio( enum ipaq_egpio_type x ) {
|
124 |
|
|
if (ipaq_model_ops.control)
|
125 |
|
|
ipaq_model_ops.control(x,0);
|
126 |
|
|
}
|
127 |
|
|
|
128 |
|
|
static __inline__ void set_h3600_egpio( enum ipaq_egpio_type x ) {
|
129 |
|
|
if (ipaq_model_ops.control)
|
130 |
|
|
ipaq_model_ops.control(x,1);
|
131 |
|
|
}
|
132 |
|
|
|
133 |
|
|
static __inline__ unsigned long read_h3600_egpio( void ) {
|
134 |
|
|
if (ipaq_model_ops.read)
|
135 |
|
|
return ipaq_model_ops.read();
|
136 |
|
|
return 0;
|
137 |
|
|
}
|
138 |
|
|
|
139 |
|
|
#else
|
140 |
|
|
|
141 |
|
|
/*
|
142 |
|
|
* This allows some drives to loose some ifdefs
|
143 |
|
|
*/
|
144 |
|
|
#define assign_h3600_egpio(x,y) do { } while (0)
|
145 |
|
|
#define clr_h3600_egpio(x) do { } while (0)
|
146 |
|
|
#define set_h3600_egpio(x) do { } while (0)
|
147 |
|
|
#define read_h3600_egpio() (0)
|
148 |
|
|
|
149 |
|
|
#endif
|
150 |
|
|
|
151 |
|
|
#endif /* ASSEMBLY */
|
152 |
|
|
|
153 |
|
|
#endif /* _INCLUDE_H3600_H_ */
|