h3600.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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