cthardware.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. /**
  2. * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
  3. *
  4. * This source file is released under GPL v2 license (no other versions).
  5. * See the COPYING file included in the main directory of this source
  6. * distribution for the license terms and conditions.
  7. *
  8. * @File cthardware.h
  9. *
  10. * @Brief
  11. * This file contains the definition of hardware access methord.
  12. *
  13. * @Author Liu Chun
  14. * @Date May 13 2008
  15. *
  16. */
  17. #ifndef CTHARDWARE_H
  18. #define CTHARDWARE_H
  19. #include <linux/types.h>
  20. #include <linux/pci.h>
  21. enum CHIPTYP {
  22. ATC20K1,
  23. ATC20K2,
  24. ATCNONE
  25. };
  26. enum CTCARDS {
  27. /* 20k1 models */
  28. CTSB055X,
  29. CT20K1_MODEL_FIRST = CTSB055X,
  30. CTSB073X,
  31. CTUAA,
  32. CT20K1_UNKNOWN,
  33. /* 20k2 models */
  34. CTSB0760,
  35. CT20K2_MODEL_FIRST = CTSB0760,
  36. CTHENDRIX,
  37. CTSB0880,
  38. CTSB1270,
  39. CT20K2_UNKNOWN,
  40. NUM_CTCARDS /* This should always be the last */
  41. };
  42. /* Type of input source for ADC */
  43. enum ADCSRC{
  44. ADC_MICIN,
  45. ADC_LINEIN,
  46. ADC_VIDEO,
  47. ADC_AUX,
  48. ADC_NONE /* Switch to digital input */
  49. };
  50. struct card_conf {
  51. /* device virtual mem page table page physical addr
  52. * (supporting one page table page now) */
  53. unsigned long vm_pgt_phys;
  54. unsigned int rsr; /* reference sample rate in Hzs*/
  55. unsigned int msr; /* master sample rate in rsrs */
  56. };
  57. struct capabilities {
  58. unsigned int digit_io_switch:1;
  59. unsigned int dedicated_mic:1;
  60. unsigned int output_switch:1;
  61. unsigned int mic_source_switch:1;
  62. };
  63. struct hw {
  64. int (*card_init)(struct hw *hw, struct card_conf *info);
  65. int (*card_stop)(struct hw *hw);
  66. int (*pll_init)(struct hw *hw, unsigned int rsr);
  67. #ifdef CONFIG_PM
  68. int (*suspend)(struct hw *hw, pm_message_t state);
  69. int (*resume)(struct hw *hw, struct card_conf *info);
  70. #endif
  71. int (*is_adc_source_selected)(struct hw *hw, enum ADCSRC source);
  72. int (*select_adc_source)(struct hw *hw, enum ADCSRC source);
  73. struct capabilities (*capabilities)(struct hw *hw);
  74. int (*output_switch_get)(struct hw *hw);
  75. int (*output_switch_put)(struct hw *hw, int position);
  76. int (*mic_source_switch_get)(struct hw *hw);
  77. int (*mic_source_switch_put)(struct hw *hw, int position);
  78. /* SRC operations */
  79. int (*src_rsc_get_ctrl_blk)(void **rblk);
  80. int (*src_rsc_put_ctrl_blk)(void *blk);
  81. int (*src_set_state)(void *blk, unsigned int state);
  82. int (*src_set_bm)(void *blk, unsigned int bm);
  83. int (*src_set_rsr)(void *blk, unsigned int rsr);
  84. int (*src_set_sf)(void *blk, unsigned int sf);
  85. int (*src_set_wr)(void *blk, unsigned int wr);
  86. int (*src_set_pm)(void *blk, unsigned int pm);
  87. int (*src_set_rom)(void *blk, unsigned int rom);
  88. int (*src_set_vo)(void *blk, unsigned int vo);
  89. int (*src_set_st)(void *blk, unsigned int st);
  90. int (*src_set_ie)(void *blk, unsigned int ie);
  91. int (*src_set_ilsz)(void *blk, unsigned int ilsz);
  92. int (*src_set_bp)(void *blk, unsigned int bp);
  93. int (*src_set_cisz)(void *blk, unsigned int cisz);
  94. int (*src_set_ca)(void *blk, unsigned int ca);
  95. int (*src_set_sa)(void *blk, unsigned int sa);
  96. int (*src_set_la)(void *blk, unsigned int la);
  97. int (*src_set_pitch)(void *blk, unsigned int pitch);
  98. int (*src_set_clear_zbufs)(void *blk, unsigned int clear);
  99. int (*src_set_dirty)(void *blk, unsigned int flags);
  100. int (*src_set_dirty_all)(void *blk);
  101. int (*src_commit_write)(struct hw *hw, unsigned int idx, void *blk);
  102. int (*src_get_ca)(struct hw *hw, unsigned int idx, void *blk);
  103. unsigned int (*src_get_dirty)(void *blk);
  104. unsigned int (*src_dirty_conj_mask)(void);
  105. int (*src_mgr_get_ctrl_blk)(void **rblk);
  106. int (*src_mgr_put_ctrl_blk)(void *blk);
  107. /* syncly enable src @idx */
  108. int (*src_mgr_enbs_src)(void *blk, unsigned int idx);
  109. /* enable src @idx */
  110. int (*src_mgr_enb_src)(void *blk, unsigned int idx);
  111. /* disable src @idx */
  112. int (*src_mgr_dsb_src)(void *blk, unsigned int idx);
  113. int (*src_mgr_commit_write)(struct hw *hw, void *blk);
  114. /* SRC Input Mapper operations */
  115. int (*srcimp_mgr_get_ctrl_blk)(void **rblk);
  116. int (*srcimp_mgr_put_ctrl_blk)(void *blk);
  117. int (*srcimp_mgr_set_imaparc)(void *blk, unsigned int slot);
  118. int (*srcimp_mgr_set_imapuser)(void *blk, unsigned int user);
  119. int (*srcimp_mgr_set_imapnxt)(void *blk, unsigned int next);
  120. int (*srcimp_mgr_set_imapaddr)(void *blk, unsigned int addr);
  121. int (*srcimp_mgr_commit_write)(struct hw *hw, void *blk);
  122. /* AMIXER operations */
  123. int (*amixer_rsc_get_ctrl_blk)(void **rblk);
  124. int (*amixer_rsc_put_ctrl_blk)(void *blk);
  125. int (*amixer_mgr_get_ctrl_blk)(void **rblk);
  126. int (*amixer_mgr_put_ctrl_blk)(void *blk);
  127. int (*amixer_set_mode)(void *blk, unsigned int mode);
  128. int (*amixer_set_iv)(void *blk, unsigned int iv);
  129. int (*amixer_set_x)(void *blk, unsigned int x);
  130. int (*amixer_set_y)(void *blk, unsigned int y);
  131. int (*amixer_set_sadr)(void *blk, unsigned int sadr);
  132. int (*amixer_set_se)(void *blk, unsigned int se);
  133. int (*amixer_set_dirty)(void *blk, unsigned int flags);
  134. int (*amixer_set_dirty_all)(void *blk);
  135. int (*amixer_commit_write)(struct hw *hw, unsigned int idx, void *blk);
  136. int (*amixer_get_y)(void *blk);
  137. unsigned int (*amixer_get_dirty)(void *blk);
  138. /* DAIO operations */
  139. int (*dai_get_ctrl_blk)(void **rblk);
  140. int (*dai_put_ctrl_blk)(void *blk);
  141. int (*dai_srt_set_srco)(void *blk, unsigned int src);
  142. int (*dai_srt_set_srcm)(void *blk, unsigned int src);
  143. int (*dai_srt_set_rsr)(void *blk, unsigned int rsr);
  144. int (*dai_srt_set_drat)(void *blk, unsigned int drat);
  145. int (*dai_srt_set_ec)(void *blk, unsigned int ec);
  146. int (*dai_srt_set_et)(void *blk, unsigned int et);
  147. int (*dai_commit_write)(struct hw *hw, unsigned int idx, void *blk);
  148. int (*dao_get_ctrl_blk)(void **rblk);
  149. int (*dao_put_ctrl_blk)(void *blk);
  150. int (*dao_set_spos)(void *blk, unsigned int spos);
  151. int (*dao_commit_write)(struct hw *hw, unsigned int idx, void *blk);
  152. int (*dao_get_spos)(void *blk, unsigned int *spos);
  153. int (*daio_mgr_get_ctrl_blk)(struct hw *hw, void **rblk);
  154. int (*daio_mgr_put_ctrl_blk)(void *blk);
  155. int (*daio_mgr_enb_dai)(void *blk, unsigned int idx);
  156. int (*daio_mgr_dsb_dai)(void *blk, unsigned int idx);
  157. int (*daio_mgr_enb_dao)(void *blk, unsigned int idx);
  158. int (*daio_mgr_dsb_dao)(void *blk, unsigned int idx);
  159. int (*daio_mgr_dao_init)(void *blk, unsigned int idx,
  160. unsigned int conf);
  161. int (*daio_mgr_set_imaparc)(void *blk, unsigned int slot);
  162. int (*daio_mgr_set_imapnxt)(void *blk, unsigned int next);
  163. int (*daio_mgr_set_imapaddr)(void *blk, unsigned int addr);
  164. int (*daio_mgr_commit_write)(struct hw *hw, void *blk);
  165. int (*set_timer_irq)(struct hw *hw, int enable);
  166. int (*set_timer_tick)(struct hw *hw, unsigned int tick);
  167. unsigned int (*get_wc)(struct hw *hw);
  168. void (*irq_callback)(void *data, unsigned int bit);
  169. void *irq_callback_data;
  170. struct pci_dev *pci; /* the pci kernel structure of this card */
  171. int irq;
  172. unsigned long io_base;
  173. unsigned long mem_base;
  174. enum CHIPTYP chip_type;
  175. enum CTCARDS model;
  176. };
  177. int create_hw_obj(struct pci_dev *pci, enum CHIPTYP chip_type,
  178. enum CTCARDS model, struct hw **rhw);
  179. int destroy_hw_obj(struct hw *hw);
  180. unsigned int get_field(unsigned int data, unsigned int field);
  181. void set_field(unsigned int *data, unsigned int field, unsigned int value);
  182. /* IRQ bits */
  183. #define PLL_INT (1 << 10) /* PLL input-clock out-of-range */
  184. #define FI_INT (1 << 9) /* forced interrupt */
  185. #define IT_INT (1 << 8) /* timer interrupt */
  186. #define PCI_INT (1 << 7) /* PCI bus error pending */
  187. #define URT_INT (1 << 6) /* UART Tx/Rx */
  188. #define GPI_INT (1 << 5) /* GPI pin */
  189. #define MIX_INT (1 << 4) /* mixer parameter segment FIFO channels */
  190. #define DAI_INT (1 << 3) /* DAI (SR-tracker or SPDIF-receiver) */
  191. #define TP_INT (1 << 2) /* transport priority queue */
  192. #define DSP_INT (1 << 1) /* DSP */
  193. #define SRC_INT (1 << 0) /* SRC channels */
  194. #endif /* CTHARDWARE_H */