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 75enum 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 91struct 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 100extern struct ipaq_model_ops ipaq_model_ops; 101 102static __inline__ const char * h3600_generic_name(void) 103{ 104 return ipaq_model_ops.generic_name; 105} 106 107static __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 113static __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 119static __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 125static __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 132static __inline__ int h3600_register_blank_callback(void (*f)(int)) 133{ 134 ipaq_model_ops.blank_callback = f; 135 return 0; 136} 137 138static __inline__ void h3600_unregister_blank_callback(void (*f)(int)) 139{ 140 ipaq_model_ops.blank_callback = NULL; 141} 142 143 144static __inline__ int h3600_register_pm_callback(int (*f)(int)) 145{ 146 ipaq_model_ops.pm_callback_aux = f; 147 return 0; 148} 149 150static __inline__ void h3600_unregister_pm_callback(int (*f)(int)) 151{ 152 ipaq_model_ops.pm_callback_aux = NULL; 153} 154 155static __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_ */ 165