bfin_sport.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. * bfin_sport.h - userspace header for bfin sport driver
  3. *
  4. * Copyright 2004-2008 Analog Devices Inc.
  5. *
  6. * Licensed under the GPL-2 or later.
  7. */
  8. #ifndef __BFIN_SPORT_H__
  9. #define __BFIN_SPORT_H__
  10. #ifdef __KERNEL__
  11. #include <linux/cdev.h>
  12. #include <linux/mutex.h>
  13. #include <linux/sched.h>
  14. #include <linux/wait.h>
  15. #endif
  16. #define SPORT_MAJOR 237
  17. #define SPORT_NR_DEVS 2
  18. /* Sport mode: it can be set to TDM, i2s or others */
  19. #define NORM_MODE 0x0
  20. #define TDM_MODE 0x1
  21. #define I2S_MODE 0x2
  22. /* Data format, normal, a-law or u-law */
  23. #define NORM_FORMAT 0x0
  24. #define ALAW_FORMAT 0x2
  25. #define ULAW_FORMAT 0x3
  26. /* Function driver which use sport must initialize the structure */
  27. struct sport_config {
  28. /* TDM (multichannels), I2S or other mode */
  29. unsigned int mode:3;
  30. /* if TDM mode is selected, channels must be set */
  31. int channels; /* Must be in 8 units */
  32. unsigned int frame_delay:4; /* Delay between frame sync pulse and first bit */
  33. /* I2S mode */
  34. unsigned int right_first:1; /* Right stereo channel first */
  35. /* In mormal mode, the following item need to be set */
  36. unsigned int lsb_first:1; /* order of transmit or receive data */
  37. unsigned int fsync:1; /* Frame sync required */
  38. unsigned int data_indep:1; /* data independent frame sync generated */
  39. unsigned int act_low:1; /* Active low TFS */
  40. unsigned int late_fsync:1; /* Late frame sync */
  41. unsigned int tckfe:1;
  42. unsigned int sec_en:1; /* Secondary side enabled */
  43. /* Choose clock source */
  44. unsigned int int_clk:1; /* Internal or external clock */
  45. /* If external clock is used, the following fields are ignored */
  46. int serial_clk;
  47. int fsync_clk;
  48. unsigned int data_format:2; /* Normal, u-law or a-law */
  49. int word_len; /* How length of the word in bits, 3-32 bits */
  50. int dma_enabled;
  51. };
  52. /* Userspace interface */
  53. #define SPORT_IOC_MAGIC 'P'
  54. #define SPORT_IOC_CONFIG _IOWR('P', 0x01, struct sport_config)
  55. #ifdef __KERNEL__
  56. struct sport_register {
  57. unsigned short tcr1;
  58. unsigned short reserved0;
  59. unsigned short tcr2;
  60. unsigned short reserved1;
  61. unsigned short tclkdiv;
  62. unsigned short reserved2;
  63. unsigned short tfsdiv;
  64. unsigned short reserved3;
  65. unsigned long tx;
  66. unsigned long reserved_l0;
  67. unsigned long rx;
  68. unsigned long reserved_l1;
  69. unsigned short rcr1;
  70. unsigned short reserved4;
  71. unsigned short rcr2;
  72. unsigned short reserved5;
  73. unsigned short rclkdiv;
  74. unsigned short reserved6;
  75. unsigned short rfsdiv;
  76. unsigned short reserved7;
  77. unsigned short stat;
  78. unsigned short reserved8;
  79. unsigned short chnl;
  80. unsigned short reserved9;
  81. unsigned short mcmc1;
  82. unsigned short reserved10;
  83. unsigned short mcmc2;
  84. unsigned short reserved11;
  85. unsigned long mtcs0;
  86. unsigned long mtcs1;
  87. unsigned long mtcs2;
  88. unsigned long mtcs3;
  89. unsigned long mrcs0;
  90. unsigned long mrcs1;
  91. unsigned long mrcs2;
  92. unsigned long mrcs3;
  93. };
  94. struct sport_dev {
  95. struct cdev cdev; /* Char device structure */
  96. int sport_num;
  97. int dma_rx_chan;
  98. int dma_tx_chan;
  99. int rx_irq;
  100. unsigned char *rx_buf; /* Buffer store the received data */
  101. int rx_len; /* How many bytes will be received */
  102. int rx_received; /* How many bytes has been received */
  103. int tx_irq;
  104. const unsigned char *tx_buf;
  105. int tx_len;
  106. int tx_sent;
  107. int err_irq;
  108. struct mutex mutex; /* mutual exclusion semaphore */
  109. struct task_struct *task;
  110. wait_queue_head_t waitq;
  111. int wait_con;
  112. struct sport_register *regs;
  113. struct sport_config config;
  114. };
  115. #endif
  116. #define SPORT_TCR1 0
  117. #define SPORT_TCR2 1
  118. #define SPORT_TCLKDIV 2
  119. #define SPORT_TFSDIV 3
  120. #define SPORT_RCR1 8
  121. #define SPORT_RCR2 9
  122. #define SPORT_RCLKDIV 10
  123. #define SPORT_RFSDIV 11
  124. #define SPORT_CHANNEL 13
  125. #define SPORT_MCMC1 14
  126. #define SPORT_MCMC2 15
  127. #define SPORT_MTCS0 16
  128. #define SPORT_MTCS1 17
  129. #define SPORT_MTCS2 18
  130. #define SPORT_MTCS3 19
  131. #define SPORT_MRCS0 20
  132. #define SPORT_MRCS1 21
  133. #define SPORT_MRCS2 22
  134. #define SPORT_MRCS3 23
  135. #endif