s3c-pcm.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /* sound/soc/s3c24xx/s3c-pcm.h
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 as
  5. * published by the Free Software Foundation.
  6. *
  7. */
  8. #ifndef __S3C_PCM_H
  9. #define __S3C_PCM_H __FILE__
  10. /*Register Offsets */
  11. #define S3C_PCM_CTL (0x00)
  12. #define S3C_PCM_CLKCTL (0x04)
  13. #define S3C_PCM_TXFIFO (0x08)
  14. #define S3C_PCM_RXFIFO (0x0C)
  15. #define S3C_PCM_IRQCTL (0x10)
  16. #define S3C_PCM_IRQSTAT (0x14)
  17. #define S3C_PCM_FIFOSTAT (0x18)
  18. #define S3C_PCM_CLRINT (0x20)
  19. /* PCM_CTL Bit-Fields */
  20. #define S3C_PCM_CTL_TXDIPSTICK_MASK (0x3f)
  21. #define S3C_PCM_CTL_TXDIPSTICK_SHIFT (13)
  22. #define S3C_PCM_CTL_RXDIPSTICK_MSK (0x3f<<7)
  23. #define S3C_PCM_CTL_TXDMA_EN (0x1<<6)
  24. #define S3C_PCM_CTL_RXDMA_EN (0x1<<5)
  25. #define S3C_PCM_CTL_TXMSB_AFTER_FSYNC (0x1<<4)
  26. #define S3C_PCM_CTL_RXMSB_AFTER_FSYNC (0x1<<3)
  27. #define S3C_PCM_CTL_TXFIFO_EN (0x1<<2)
  28. #define S3C_PCM_CTL_RXFIFO_EN (0x1<<1)
  29. #define S3C_PCM_CTL_ENABLE (0x1<<0)
  30. /* PCM_CLKCTL Bit-Fields */
  31. #define S3C_PCM_CLKCTL_SERCLK_EN (0x1<<19)
  32. #define S3C_PCM_CLKCTL_SERCLKSEL_PCLK (0x1<<18)
  33. #define S3C_PCM_CLKCTL_SCLKDIV_MASK (0x1ff)
  34. #define S3C_PCM_CLKCTL_SYNCDIV_MASK (0x1ff)
  35. #define S3C_PCM_CLKCTL_SCLKDIV_SHIFT (9)
  36. #define S3C_PCM_CLKCTL_SYNCDIV_SHIFT (0)
  37. /* PCM_TXFIFO Bit-Fields */
  38. #define S3C_PCM_TXFIFO_DVALID (0x1<<16)
  39. #define S3C_PCM_TXFIFO_DATA_MSK (0xffff<<0)
  40. /* PCM_RXFIFO Bit-Fields */
  41. #define S3C_PCM_RXFIFO_DVALID (0x1<<16)
  42. #define S3C_PCM_RXFIFO_DATA_MSK (0xffff<<0)
  43. /* PCM_IRQCTL Bit-Fields */
  44. #define S3C_PCM_IRQCTL_IRQEN (0x1<<14)
  45. #define S3C_PCM_IRQCTL_WRDEN (0x1<<12)
  46. #define S3C_PCM_IRQCTL_TXEMPTYEN (0x1<<11)
  47. #define S3C_PCM_IRQCTL_TXALMSTEMPTYEN (0x1<<10)
  48. #define S3C_PCM_IRQCTL_TXFULLEN (0x1<<9)
  49. #define S3C_PCM_IRQCTL_TXALMSTFULLEN (0x1<<8)
  50. #define S3C_PCM_IRQCTL_TXSTARVEN (0x1<<7)
  51. #define S3C_PCM_IRQCTL_TXERROVRFLEN (0x1<<6)
  52. #define S3C_PCM_IRQCTL_RXEMPTEN (0x1<<5)
  53. #define S3C_PCM_IRQCTL_RXALMSTEMPTEN (0x1<<4)
  54. #define S3C_PCM_IRQCTL_RXFULLEN (0x1<<3)
  55. #define S3C_PCM_IRQCTL_RXALMSTFULLEN (0x1<<2)
  56. #define S3C_PCM_IRQCTL_RXSTARVEN (0x1<<1)
  57. #define S3C_PCM_IRQCTL_RXERROVRFLEN (0x1<<0)
  58. /* PCM_IRQSTAT Bit-Fields */
  59. #define S3C_PCM_IRQSTAT_IRQPND (0x1<<13)
  60. #define S3C_PCM_IRQSTAT_WRD_XFER (0x1<<12)
  61. #define S3C_PCM_IRQSTAT_TXEMPTY (0x1<<11)
  62. #define S3C_PCM_IRQSTAT_TXALMSTEMPTY (0x1<<10)
  63. #define S3C_PCM_IRQSTAT_TXFULL (0x1<<9)
  64. #define S3C_PCM_IRQSTAT_TXALMSTFULL (0x1<<8)
  65. #define S3C_PCM_IRQSTAT_TXSTARV (0x1<<7)
  66. #define S3C_PCM_IRQSTAT_TXERROVRFL (0x1<<6)
  67. #define S3C_PCM_IRQSTAT_RXEMPT (0x1<<5)
  68. #define S3C_PCM_IRQSTAT_RXALMSTEMPT (0x1<<4)
  69. #define S3C_PCM_IRQSTAT_RXFULL (0x1<<3)
  70. #define S3C_PCM_IRQSTAT_RXALMSTFULL (0x1<<2)
  71. #define S3C_PCM_IRQSTAT_RXSTARV (0x1<<1)
  72. #define S3C_PCM_IRQSTAT_RXERROVRFL (0x1<<0)
  73. /* PCM_FIFOSTAT Bit-Fields */
  74. #define S3C_PCM_FIFOSTAT_TXCNT_MSK (0x3f<<14)
  75. #define S3C_PCM_FIFOSTAT_TXFIFOEMPTY (0x1<<13)
  76. #define S3C_PCM_FIFOSTAT_TXFIFOALMSTEMPTY (0x1<<12)
  77. #define S3C_PCM_FIFOSTAT_TXFIFOFULL (0x1<<11)
  78. #define S3C_PCM_FIFOSTAT_TXFIFOALMSTFULL (0x1<<10)
  79. #define S3C_PCM_FIFOSTAT_RXCNT_MSK (0x3f<<4)
  80. #define S3C_PCM_FIFOSTAT_RXFIFOEMPTY (0x1<<3)
  81. #define S3C_PCM_FIFOSTAT_RXFIFOALMSTEMPTY (0x1<<2)
  82. #define S3C_PCM_FIFOSTAT_RXFIFOFULL (0x1<<1)
  83. #define S3C_PCM_FIFOSTAT_RXFIFOALMSTFULL (0x1<<0)
  84. #define S3C_PCM_CLKSRC_PCLK 0
  85. #define S3C_PCM_CLKSRC_MUX 1
  86. #define S3C_PCM_SCLK_PER_FS 0
  87. /**
  88. * struct s3c_pcm_info - S3C PCM Controller information
  89. * @dev: The parent device passed to use from the probe.
  90. * @regs: The pointer to the device register block.
  91. * @dma_playback: DMA information for playback channel.
  92. * @dma_capture: DMA information for capture channel.
  93. */
  94. struct s3c_pcm_info {
  95. spinlock_t lock;
  96. struct device *dev;
  97. void __iomem *regs;
  98. unsigned int sclk_per_fs;
  99. /* Whether to keep PCMSCLK enabled even when idle(no active xfer) */
  100. unsigned int idleclk;
  101. struct clk *pclk;
  102. struct clk *cclk;
  103. struct s3c_dma_params *dma_playback;
  104. struct s3c_dma_params *dma_capture;
  105. };
  106. #endif /* __S3C_PCM_H */