h3600.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. #ifndef _INCLUDE_H3600_H_
  23. #define _INCLUDE_H3600_H_
  24. typedef int __bitwise pm_request_t;
  25. #define PM_SUSPEND ((__force pm_request_t) 1) /* enter D1-D3 */
  26. #define PM_RESUME ((__force pm_request_t) 2) /* enter D0 */
  27. /* generalized support for H3xxx series Compaq Pocket PC's */
  28. #define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800())
  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. /* 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. Machine-independent GPIO definitions
  39. --- these are common across all current iPAQ platforms
  40. */
  41. #define GPIO_H3600_NPOWER_BUTTON GPIO_GPIO (0) /* Also known as the "off button" */
  42. #define GPIO_H3600_PCMCIA_CD1 GPIO_GPIO (10)
  43. #define GPIO_H3600_PCMCIA_IRQ1 GPIO_GPIO (11)
  44. /* UDA1341 L3 Interface */
  45. #define GPIO_H3600_L3_DATA GPIO_GPIO (14)
  46. #define GPIO_H3600_L3_MODE GPIO_GPIO (15)
  47. #define GPIO_H3600_L3_CLOCK GPIO_GPIO (16)
  48. #define GPIO_H3600_PCMCIA_CD0 GPIO_GPIO (17)
  49. #define GPIO_H3600_SYS_CLK GPIO_GPIO (19)
  50. #define GPIO_H3600_PCMCIA_IRQ0 GPIO_GPIO (21)
  51. #define GPIO_H3600_COM_DCD GPIO_GPIO (23)
  52. #define GPIO_H3600_OPT_IRQ GPIO_GPIO (24)
  53. #define GPIO_H3600_COM_CTS GPIO_GPIO (25)
  54. #define GPIO_H3600_COM_RTS GPIO_GPIO (26)
  55. #define IRQ_GPIO_H3600_NPOWER_BUTTON IRQ_GPIO0
  56. #define IRQ_GPIO_H3600_PCMCIA_CD1 IRQ_GPIO10
  57. #define IRQ_GPIO_H3600_PCMCIA_IRQ1 IRQ_GPIO11
  58. #define IRQ_GPIO_H3600_PCMCIA_CD0 IRQ_GPIO17
  59. #define IRQ_GPIO_H3600_PCMCIA_IRQ0 IRQ_GPIO21
  60. #define IRQ_GPIO_H3600_COM_DCD IRQ_GPIO23
  61. #define IRQ_GPIO_H3600_OPT_IRQ IRQ_GPIO24
  62. #define IRQ_GPIO_H3600_COM_CTS IRQ_GPIO25
  63. #ifndef __ASSEMBLY__
  64. enum ipaq_egpio_type {
  65. IPAQ_EGPIO_LCD_POWER, /* Power to the LCD panel */
  66. IPAQ_EGPIO_CODEC_NRESET, /* Clear to reset the audio codec (remember to return high) */
  67. IPAQ_EGPIO_AUDIO_ON, /* Audio power */
  68. IPAQ_EGPIO_QMUTE, /* Audio muting */
  69. IPAQ_EGPIO_OPT_NVRAM_ON, /* Non-volatile RAM on extension sleeves (SPI interface) */
  70. IPAQ_EGPIO_OPT_ON, /* Power to extension sleeves */
  71. IPAQ_EGPIO_CARD_RESET, /* Reset PCMCIA cards on extension sleeve (???) */
  72. IPAQ_EGPIO_OPT_RESET, /* Reset option pack (???) */
  73. IPAQ_EGPIO_IR_ON, /* IR sensor/emitter power */
  74. IPAQ_EGPIO_IR_FSEL, /* IR speed selection 1->fast, 0->slow */
  75. IPAQ_EGPIO_RS232_ON, /* Maxim RS232 chip power */
  76. IPAQ_EGPIO_VPP_ON, /* Turn on power to flash programming */
  77. IPAQ_EGPIO_LCD_ENABLE, /* Enable/disable LCD controller */
  78. };
  79. struct ipaq_model_ops {
  80. const char *generic_name;
  81. void (*control)(enum ipaq_egpio_type, int);
  82. unsigned long (*read)(void);
  83. void (*blank_callback)(int blank);
  84. int (*pm_callback)(int req); /* Primary model callback */
  85. int (*pm_callback_aux)(int req); /* Secondary callback (used by HAL modules) */
  86. };
  87. extern struct ipaq_model_ops ipaq_model_ops;
  88. static __inline__ const char * h3600_generic_name(void)
  89. {
  90. return ipaq_model_ops.generic_name;
  91. }
  92. static __inline__ void assign_h3600_egpio(enum ipaq_egpio_type x, int level)
  93. {
  94. if (ipaq_model_ops.control)
  95. ipaq_model_ops.control(x,level);
  96. }
  97. static __inline__ void clr_h3600_egpio(enum ipaq_egpio_type x)
  98. {
  99. if (ipaq_model_ops.control)
  100. ipaq_model_ops.control(x,0);
  101. }
  102. static __inline__ void set_h3600_egpio(enum ipaq_egpio_type x)
  103. {
  104. if (ipaq_model_ops.control)
  105. ipaq_model_ops.control(x,1);
  106. }
  107. static __inline__ unsigned long read_h3600_egpio(void)
  108. {
  109. if (ipaq_model_ops.read)
  110. return ipaq_model_ops.read();
  111. return 0;
  112. }
  113. static __inline__ int h3600_register_blank_callback(void (*f)(int))
  114. {
  115. ipaq_model_ops.blank_callback = f;
  116. return 0;
  117. }
  118. static __inline__ void h3600_unregister_blank_callback(void (*f)(int))
  119. {
  120. ipaq_model_ops.blank_callback = NULL;
  121. }
  122. static __inline__ int h3600_register_pm_callback(int (*f)(int))
  123. {
  124. ipaq_model_ops.pm_callback_aux = f;
  125. return 0;
  126. }
  127. static __inline__ void h3600_unregister_pm_callback(int (*f)(int))
  128. {
  129. ipaq_model_ops.pm_callback_aux = NULL;
  130. }
  131. static __inline__ int h3600_power_management(int req)
  132. {
  133. if (ipaq_model_ops.pm_callback)
  134. return ipaq_model_ops.pm_callback(req);
  135. return 0;
  136. }
  137. #endif /* ASSEMBLY */
  138. #endif /* _INCLUDE_H3600_H_ */