Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | /* * * Definitions for H3600 Handheld Computer * * Copyright 2000 Compaq Computer Corporation. * * Use consistent with the GNU GPL is permitted, * provided that this copyright notice is * preserved in its entirety in all copies and derived works. * * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS * FITNESS FOR ANY PARTICULAR PURPOSE. * * Author: Jamey Hicks. * * History: * * 2001-10-?? Andrew Christian Added support for iPAQ H3800 * */ #ifndef _INCLUDE_H3600_H_ #define _INCLUDE_H3600_H_ /* generalized support for H3xxx series Compaq Pocket PC's */ #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800()) /* Physical memory regions corresponding to chip selects */ #define H3600_EGPIO_PHYS (SA1100_CS5_PHYS + 0x01000000) #define H3600_BANK_2_PHYS SA1100_CS2_PHYS #define H3600_BANK_4_PHYS SA1100_CS4_PHYS /* Virtual memory regions corresponding to chip selects 2 & 4 (used on sleeves) */ #define H3600_EGPIO_VIRT 0xf0000000 #define H3600_BANK_2_VIRT 0xf1000000 #define H3600_BANK_4_VIRT 0xf3800000 /* Machine-independent GPIO definitions --- these are common across all current iPAQ platforms */ #define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */ #define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10) #define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11) /* UDA1341 L3 Interface */ #define GPIO_H3600_L3_DATA GPIO_GPIO (14) #define GPIO_H3600_L3_MODE GPIO_GPIO (15) #define GPIO_H3600_L3_CLOCK GPIO_GPIO (16) #define GPIO_H3600_PCMCIA_CD0 GPIO_GPIO (17) #define GPIO_H3600_SYS_CLK GPIO_GPIO (19) #define GPIO_H3600_PCMCIA_IRQ0 GPIO_GPIO (21) #define GPIO_H3600_COM_DCD GPIO_GPIO (23) #define GPIO_H3600_OPT_IRQ GPIO_GPIO (24) #define GPIO_H3600_COM_CTS GPIO_GPIO (25) #define GPIO_H3600_COM_RTS GPIO_GPIO (26) #define IRQ_GPIO_H3600_NPOWER_BUTTON IRQ_GPIO0 #define IRQ_GPIO_H3600_PCMCIA_CD1 IRQ_GPIO10 #define IRQ_GPIO_H3600_PCMCIA_IRQ1 IRQ_GPIO11 #define IRQ_GPIO_H3600_PCMCIA_CD0 IRQ_GPIO17 #define IRQ_GPIO_H3600_PCMCIA_IRQ0 IRQ_GPIO21 #define IRQ_GPIO_H3600_COM_DCD IRQ_GPIO23 #define IRQ_GPIO_H3600_OPT_IRQ IRQ_GPIO24 #define IRQ_GPIO_H3600_COM_CTS IRQ_GPIO25 #ifndef __ASSEMBLY__ enum ipaq_egpio_type { IPAQ_EGPIO_LCD_POWER, /* Power to the LCD panel */ IPAQ_EGPIO_CODEC_NRESET, /* Clear to reset the audio codec (remember to return high) */ IPAQ_EGPIO_AUDIO_ON, /* Audio power */ IPAQ_EGPIO_QMUTE, /* Audio muting */ IPAQ_EGPIO_OPT_NVRAM_ON, /* Non-volatile RAM on extension sleeves (SPI interface) */ IPAQ_EGPIO_OPT_ON, /* Power to extension sleeves */ IPAQ_EGPIO_CARD_RESET, /* Reset PCMCIA cards on extension sleeve (???) */ IPAQ_EGPIO_OPT_RESET, /* Reset option pack (???) */ IPAQ_EGPIO_IR_ON, /* IR sensor/emitter power */ IPAQ_EGPIO_IR_FSEL, /* IR speed selection 1->fast, 0->slow */ IPAQ_EGPIO_RS232_ON, /* Maxim RS232 chip power */ IPAQ_EGPIO_VPP_ON, /* Turn on power to flash programming */ IPAQ_EGPIO_LCD_ENABLE, /* Enable/disable LCD controller */ }; struct ipaq_model_ops { const char *generic_name; void (*control)(enum ipaq_egpio_type, int); unsigned long (*read)(void); void (*blank_callback)(int blank); int (*pm_callback)(int req); /* Primary model callback */ int (*pm_callback_aux)(int req); /* Secondary callback (used by HAL modules) */ }; extern struct ipaq_model_ops ipaq_model_ops; static __inline__ const char * h3600_generic_name(void) { return ipaq_model_ops.generic_name; } static __inline__ void assign_h3600_egpio(enum ipaq_egpio_type x, int level) { if (ipaq_model_ops.control) ipaq_model_ops.control(x,level); } static __inline__ void clr_h3600_egpio(enum ipaq_egpio_type x) { if (ipaq_model_ops.control) ipaq_model_ops.control(x,0); } static __inline__ void set_h3600_egpio(enum ipaq_egpio_type x) { if (ipaq_model_ops.control) ipaq_model_ops.control(x,1); } static __inline__ unsigned long read_h3600_egpio(void) { if (ipaq_model_ops.read) return ipaq_model_ops.read(); return 0; } static __inline__ int h3600_register_blank_callback(void (*f)(int)) { ipaq_model_ops.blank_callback = f; return 0; } static __inline__ void h3600_unregister_blank_callback(void (*f)(int)) { ipaq_model_ops.blank_callback = NULL; } static __inline__ int h3600_register_pm_callback(int (*f)(int)) { ipaq_model_ops.pm_callback_aux = f; return 0; } static __inline__ void h3600_unregister_pm_callback(int (*f)(int)) { ipaq_model_ops.pm_callback_aux = NULL; } static __inline__ int h3600_power_management(int req) { if (ipaq_model_ops.pm_callback) return ipaq_model_ops.pm_callback(req); return 0; } #endif /* ASSEMBLY */ #endif /* _INCLUDE_H3600_H_ */ |