home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / atmel-ssc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  9.1 KB  |  313 lines

  1. #ifndef __INCLUDE_ATMEL_SSC_H
  2. #define __INCLUDE_ATMEL_SSC_H
  3.  
  4. #include <linux/platform_device.h>
  5. #include <linux/list.h>
  6.  
  7. struct ssc_device {
  8.     struct list_head    list;
  9.     void __iomem        *regs;
  10.     struct platform_device    *pdev;
  11.     struct clk        *clk;
  12.     int            user;
  13.     int            irq;
  14. };
  15.  
  16. struct ssc_device * __must_check ssc_request(unsigned int ssc_num);
  17. void ssc_free(struct ssc_device *ssc);
  18.  
  19. /* SSC register offsets */
  20.  
  21. /* SSC Control Register */
  22. #define SSC_CR                0x00000000
  23. #define SSC_CR_RXDIS_SIZE             1
  24. #define SSC_CR_RXDIS_OFFSET             1
  25. #define SSC_CR_RXEN_SIZE             1
  26. #define SSC_CR_RXEN_OFFSET             0
  27. #define SSC_CR_SWRST_SIZE             1
  28. #define SSC_CR_SWRST_OFFSET            15
  29. #define SSC_CR_TXDIS_SIZE             1
  30. #define SSC_CR_TXDIS_OFFSET             9
  31. #define SSC_CR_TXEN_SIZE             1
  32. #define SSC_CR_TXEN_OFFSET             8
  33.  
  34. /* SSC Clock Mode Register */
  35. #define SSC_CMR                0x00000004
  36. #define SSC_CMR_DIV_SIZE            12
  37. #define SSC_CMR_DIV_OFFSET             0
  38.  
  39. /* SSC Receive Clock Mode Register */
  40. #define SSC_RCMR            0x00000010
  41. #define SSC_RCMR_CKG_SIZE             2
  42. #define SSC_RCMR_CKG_OFFSET             6
  43. #define SSC_RCMR_CKI_SIZE             1
  44. #define SSC_RCMR_CKI_OFFSET             5
  45. #define SSC_RCMR_CKO_SIZE             3
  46. #define SSC_RCMR_CKO_OFFSET             2
  47. #define SSC_RCMR_CKS_SIZE             2
  48. #define SSC_RCMR_CKS_OFFSET             0
  49. #define SSC_RCMR_PERIOD_SIZE             8
  50. #define SSC_RCMR_PERIOD_OFFSET            24
  51. #define SSC_RCMR_START_SIZE             4
  52. #define SSC_RCMR_START_OFFSET             8
  53. #define SSC_RCMR_STOP_SIZE             1
  54. #define SSC_RCMR_STOP_OFFSET            12
  55. #define SSC_RCMR_STTDLY_SIZE             8
  56. #define SSC_RCMR_STTDLY_OFFSET            16
  57.  
  58. /* SSC Receive Frame Mode Register */
  59. #define SSC_RFMR            0x00000014
  60. #define SSC_RFMR_DATLEN_SIZE             5
  61. #define SSC_RFMR_DATLEN_OFFSET             0
  62. #define SSC_RFMR_DATNB_SIZE             4
  63. #define SSC_RFMR_DATNB_OFFSET             8
  64. #define SSC_RFMR_FSEDGE_SIZE             1
  65. #define SSC_RFMR_FSEDGE_OFFSET            24
  66. #define SSC_RFMR_FSLEN_SIZE             4
  67. #define SSC_RFMR_FSLEN_OFFSET            16
  68. #define SSC_RFMR_FSOS_SIZE             4
  69. #define SSC_RFMR_FSOS_OFFSET            20
  70. #define SSC_RFMR_LOOP_SIZE             1
  71. #define SSC_RFMR_LOOP_OFFSET             5
  72. #define SSC_RFMR_MSBF_SIZE             1
  73. #define SSC_RFMR_MSBF_OFFSET             7
  74.  
  75. /* SSC Transmit Clock Mode Register */
  76. #define SSC_TCMR            0x00000018
  77. #define SSC_TCMR_CKG_SIZE             2
  78. #define SSC_TCMR_CKG_OFFSET             6
  79. #define SSC_TCMR_CKI_SIZE             1
  80. #define SSC_TCMR_CKI_OFFSET             5
  81. #define SSC_TCMR_CKO_SIZE             3
  82. #define SSC_TCMR_CKO_OFFSET             2
  83. #define SSC_TCMR_CKS_SIZE             2
  84. #define SSC_TCMR_CKS_OFFSET             0
  85. #define SSC_TCMR_PERIOD_SIZE             8
  86. #define SSC_TCMR_PERIOD_OFFSET            24
  87. #define SSC_TCMR_START_SIZE             4
  88. #define SSC_TCMR_START_OFFSET             8
  89. #define SSC_TCMR_STTDLY_SIZE             8
  90. #define SSC_TCMR_STTDLY_OFFSET            16
  91.  
  92. /* SSC Transmit Frame Mode Register */
  93. #define SSC_TFMR            0x0000001c
  94. #define SSC_TFMR_DATDEF_SIZE             1
  95. #define SSC_TFMR_DATDEF_OFFSET             5
  96. #define SSC_TFMR_DATLEN_SIZE             5
  97. #define SSC_TFMR_DATLEN_OFFSET             0
  98. #define SSC_TFMR_DATNB_SIZE             4
  99. #define SSC_TFMR_DATNB_OFFSET             8
  100. #define SSC_TFMR_FSDEN_SIZE             1
  101. #define SSC_TFMR_FSDEN_OFFSET            23
  102. #define SSC_TFMR_FSEDGE_SIZE             1
  103. #define SSC_TFMR_FSEDGE_OFFSET            24
  104. #define SSC_TFMR_FSLEN_SIZE             4
  105. #define SSC_TFMR_FSLEN_OFFSET            16
  106. #define SSC_TFMR_FSOS_SIZE             3
  107. #define SSC_TFMR_FSOS_OFFSET            20
  108. #define SSC_TFMR_MSBF_SIZE             1
  109. #define SSC_TFMR_MSBF_OFFSET             7
  110.  
  111. /* SSC Receive Hold Register */
  112. #define SSC_RHR                0x00000020
  113. #define SSC_RHR_RDAT_SIZE            32
  114. #define SSC_RHR_RDAT_OFFSET             0
  115.  
  116. /* SSC Transmit Hold Register */
  117. #define SSC_THR                0x00000024
  118. #define SSC_THR_TDAT_SIZE            32
  119. #define SSC_THR_TDAT_OFFSET             0
  120.  
  121. /* SSC Receive Sync. Holding Register */
  122. #define SSC_RSHR            0x00000030
  123. #define SSC_RSHR_RSDAT_SIZE            16
  124. #define SSC_RSHR_RSDAT_OFFSET             0
  125.  
  126. /* SSC Transmit Sync. Holding Register */
  127. #define SSC_TSHR            0x00000034
  128. #define SSC_TSHR_TSDAT_SIZE            16
  129. #define SSC_TSHR_RSDAT_OFFSET             0
  130.  
  131. /* SSC Receive Compare 0 Register */
  132. #define SSC_RC0R            0x00000038
  133. #define SSC_RC0R_CP0_SIZE            16
  134. #define SSC_RC0R_CP0_OFFSET             0
  135.  
  136. /* SSC Receive Compare 1 Register */
  137. #define SSC_RC1R            0x0000003c
  138. #define SSC_RC1R_CP1_SIZE            16
  139. #define SSC_RC1R_CP1_OFFSET             0
  140.  
  141. /* SSC Status Register */
  142. #define SSC_SR                0x00000040
  143. #define SSC_SR_CP0_SIZE                 1
  144. #define SSC_SR_CP0_OFFSET             8
  145. #define SSC_SR_CP1_SIZE                 1
  146. #define SSC_SR_CP1_OFFSET             9
  147. #define SSC_SR_ENDRX_SIZE             1
  148. #define SSC_SR_ENDRX_OFFSET             6
  149. #define SSC_SR_ENDTX_SIZE             1
  150. #define SSC_SR_ENDTX_OFFSET             2
  151. #define SSC_SR_OVRUN_SIZE             1
  152. #define SSC_SR_OVRUN_OFFSET             5
  153. #define SSC_SR_RXBUFF_SIZE             1
  154. #define SSC_SR_RXBUFF_OFFSET             7
  155. #define SSC_SR_RXEN_SIZE             1
  156. #define SSC_SR_RXEN_OFFSET            17
  157. #define SSC_SR_RXRDY_SIZE             1
  158. #define SSC_SR_RXRDY_OFFSET             4
  159. #define SSC_SR_RXSYN_SIZE             1
  160. #define SSC_SR_RXSYN_OFFSET            11
  161. #define SSC_SR_TXBUFE_SIZE             1
  162. #define SSC_SR_TXBUFE_OFFSET             3
  163. #define SSC_SR_TXEMPTY_SIZE             1
  164. #define SSC_SR_TXEMPTY_OFFSET             1
  165. #define SSC_SR_TXEN_SIZE             1
  166. #define SSC_SR_TXEN_OFFSET            16
  167. #define SSC_SR_TXRDY_SIZE             1
  168. #define SSC_SR_TXRDY_OFFSET             0
  169. #define SSC_SR_TXSYN_SIZE             1
  170. #define SSC_SR_TXSYN_OFFSET            10
  171.  
  172. /* SSC Interrupt Enable Register */
  173. #define SSC_IER                0x00000044
  174. #define SSC_IER_CP0_SIZE             1
  175. #define SSC_IER_CP0_OFFSET             8
  176. #define SSC_IER_CP1_SIZE             1
  177. #define SSC_IER_CP1_OFFSET             9
  178. #define SSC_IER_ENDRX_SIZE             1
  179. #define SSC_IER_ENDRX_OFFSET             6
  180. #define SSC_IER_ENDTX_SIZE             1
  181. #define SSC_IER_ENDTX_OFFSET             2
  182. #define SSC_IER_OVRUN_SIZE             1
  183. #define SSC_IER_OVRUN_OFFSET             5
  184. #define SSC_IER_RXBUFF_SIZE             1
  185. #define SSC_IER_RXBUFF_OFFSET             7
  186. #define SSC_IER_RXRDY_SIZE             1
  187. #define SSC_IER_RXRDY_OFFSET             4
  188. #define SSC_IER_RXSYN_SIZE             1
  189. #define SSC_IER_RXSYN_OFFSET            11
  190. #define SSC_IER_TXBUFE_SIZE             1
  191. #define SSC_IER_TXBUFE_OFFSET             3
  192. #define SSC_IER_TXEMPTY_SIZE             1
  193. #define SSC_IER_TXEMPTY_OFFSET             1
  194. #define SSC_IER_TXRDY_SIZE             1
  195. #define SSC_IER_TXRDY_OFFSET             0
  196. #define SSC_IER_TXSYN_SIZE             1
  197. #define SSC_IER_TXSYN_OFFSET            10
  198.  
  199. /* SSC Interrupt Disable Register */
  200. #define SSC_IDR                0x00000048
  201. #define SSC_IDR_CP0_SIZE             1
  202. #define SSC_IDR_CP0_OFFSET             8
  203. #define SSC_IDR_CP1_SIZE             1
  204. #define SSC_IDR_CP1_OFFSET             9
  205. #define SSC_IDR_ENDRX_SIZE             1
  206. #define SSC_IDR_ENDRX_OFFSET             6
  207. #define SSC_IDR_ENDTX_SIZE             1
  208. #define SSC_IDR_ENDTX_OFFSET             2
  209. #define SSC_IDR_OVRUN_SIZE             1
  210. #define SSC_IDR_OVRUN_OFFSET             5
  211. #define SSC_IDR_RXBUFF_SIZE             1
  212. #define SSC_IDR_RXBUFF_OFFSET             7
  213. #define SSC_IDR_RXRDY_SIZE             1
  214. #define SSC_IDR_RXRDY_OFFSET             4
  215. #define SSC_IDR_RXSYN_SIZE             1
  216. #define SSC_IDR_RXSYN_OFFSET            11
  217. #define SSC_IDR_TXBUFE_SIZE             1
  218. #define SSC_IDR_TXBUFE_OFFSET             3
  219. #define SSC_IDR_TXEMPTY_SIZE             1
  220. #define SSC_IDR_TXEMPTY_OFFSET             1
  221. #define SSC_IDR_TXRDY_SIZE             1
  222. #define SSC_IDR_TXRDY_OFFSET             0
  223. #define SSC_IDR_TXSYN_SIZE             1
  224. #define SSC_IDR_TXSYN_OFFSET            10
  225.  
  226. /* SSC Interrupt Mask Register */
  227. #define SSC_IMR                0x0000004c
  228. #define SSC_IMR_CP0_SIZE             1
  229. #define SSC_IMR_CP0_OFFSET             8
  230. #define SSC_IMR_CP1_SIZE             1
  231. #define SSC_IMR_CP1_OFFSET             9
  232. #define SSC_IMR_ENDRX_SIZE             1
  233. #define SSC_IMR_ENDRX_OFFSET             6
  234. #define SSC_IMR_ENDTX_SIZE             1
  235. #define SSC_IMR_ENDTX_OFFSET             2
  236. #define SSC_IMR_OVRUN_SIZE             1
  237. #define SSC_IMR_OVRUN_OFFSET             5
  238. #define SSC_IMR_RXBUFF_SIZE             1
  239. #define SSC_IMR_RXBUFF_OFFSET             7
  240. #define SSC_IMR_RXRDY_SIZE             1
  241. #define SSC_IMR_RXRDY_OFFSET             4
  242. #define SSC_IMR_RXSYN_SIZE             1
  243. #define SSC_IMR_RXSYN_OFFSET            11
  244. #define SSC_IMR_TXBUFE_SIZE             1
  245. #define SSC_IMR_TXBUFE_OFFSET             3
  246. #define SSC_IMR_TXEMPTY_SIZE             1
  247. #define SSC_IMR_TXEMPTY_OFFSET             1
  248. #define SSC_IMR_TXRDY_SIZE             1
  249. #define SSC_IMR_TXRDY_OFFSET             0
  250. #define SSC_IMR_TXSYN_SIZE             1
  251. #define SSC_IMR_TXSYN_OFFSET            10
  252.  
  253. /* SSC PDC Receive Pointer Register */
  254. #define SSC_PDC_RPR            0x00000100
  255.  
  256. /* SSC PDC Receive Counter Register */
  257. #define SSC_PDC_RCR            0x00000104
  258.  
  259. /* SSC PDC Transmit Pointer Register */
  260. #define SSC_PDC_TPR            0x00000108
  261.  
  262. /* SSC PDC Receive Next Pointer Register */
  263. #define SSC_PDC_RNPR            0x00000110
  264.  
  265. /* SSC PDC Receive Next Counter Register */
  266. #define SSC_PDC_RNCR            0x00000114
  267.  
  268. /* SSC PDC Transmit Counter Register */
  269. #define SSC_PDC_TCR            0x0000010c
  270.  
  271. /* SSC PDC Transmit Next Pointer Register */
  272. #define SSC_PDC_TNPR            0x00000118
  273.  
  274. /* SSC PDC Transmit Next Counter Register */
  275. #define SSC_PDC_TNCR            0x0000011c
  276.  
  277. /* SSC PDC Transfer Control Register */
  278. #define SSC_PDC_PTCR            0x00000120
  279. #define SSC_PDC_PTCR_RXTDIS_SIZE         1
  280. #define SSC_PDC_PTCR_RXTDIS_OFFSET         1
  281. #define SSC_PDC_PTCR_RXTEN_SIZE             1
  282. #define SSC_PDC_PTCR_RXTEN_OFFSET         0
  283. #define SSC_PDC_PTCR_TXTDIS_SIZE         1
  284. #define SSC_PDC_PTCR_TXTDIS_OFFSET         9
  285. #define SSC_PDC_PTCR_TXTEN_SIZE             1
  286. #define SSC_PDC_PTCR_TXTEN_OFFSET         8
  287.  
  288. /* SSC PDC Transfer Status Register */
  289. #define SSC_PDC_PTSR            0x00000124
  290. #define SSC_PDC_PTSR_RXTEN_SIZE             1
  291. #define SSC_PDC_PTSR_RXTEN_OFFSET         0
  292. #define SSC_PDC_PTSR_TXTEN_SIZE             1
  293. #define SSC_PDC_PTSR_TXTEN_OFFSET         8
  294.  
  295. /* Bit manipulation macros */
  296. #define SSC_BIT(name)                    \
  297.     (1 << SSC_##name##_OFFSET)
  298. #define SSC_BF(name, value)                \
  299.     (((value) & ((1 << SSC_##name##_SIZE) - 1))    \
  300.      << SSC_##name##_OFFSET)
  301. #define SSC_BFEXT(name, value)                \
  302.     (((value) >> SSC_##name##_OFFSET)        \
  303.      & ((1 << SSC_##name##_SIZE) - 1))
  304. #define SSC_BFINS(name, value, old)            \
  305.     (((old) & ~(((1 << SSC_##name##_SIZE) - 1)    \
  306.     << SSC_##name##_OFFSET)) | SSC_BF(name, value))
  307.  
  308. /* Register access macros */
  309. #define ssc_readl(base, reg)        __raw_readl(base + SSC_##reg)
  310. #define ssc_writel(base, reg, value)    __raw_writel((value), base + SSC_##reg)
  311.  
  312. #endif /* __INCLUDE_ATMEL_SSC_H */
  313.