0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _KIRKWOOD_AUDIO_H
0009 #define _KIRKWOOD_AUDIO_H
0010
0011 #define DRV_NAME "mvebu-audio"
0012
0013 #define KIRKWOOD_RECORD_WIN 0
0014 #define KIRKWOOD_PLAYBACK_WIN 1
0015 #define KIRKWOOD_MAX_AUDIO_WIN 2
0016
0017 #define KIRKWOOD_AUDIO_WIN_BASE_REG(win) (0xA00 + ((win)<<3))
0018 #define KIRKWOOD_AUDIO_WIN_CTRL_REG(win) (0xA04 + ((win)<<3))
0019
0020
0021 #define KIRKWOOD_RECCTL 0x1000
0022 #define KIRKWOOD_RECCTL_SPDIF_EN (1<<11)
0023 #define KIRKWOOD_RECCTL_I2S_EN (1<<10)
0024 #define KIRKWOOD_RECCTL_PAUSE (1<<9)
0025 #define KIRKWOOD_RECCTL_MUTE (1<<8)
0026 #define KIRKWOOD_RECCTL_BURST_MASK (3<<5)
0027 #define KIRKWOOD_RECCTL_BURST_128 (2<<5)
0028 #define KIRKWOOD_RECCTL_BURST_32 (1<<5)
0029 #define KIRKWOOD_RECCTL_MONO (1<<4)
0030 #define KIRKWOOD_RECCTL_MONO_CHAN_RIGHT (1<<3)
0031 #define KIRKWOOD_RECCTL_MONO_CHAN_LEFT (0<<3)
0032 #define KIRKWOOD_RECCTL_SIZE_MASK (7<<0)
0033 #define KIRKWOOD_RECCTL_SIZE_16 (7<<0)
0034 #define KIRKWOOD_RECCTL_SIZE_16_C (3<<0)
0035 #define KIRKWOOD_RECCTL_SIZE_20 (2<<0)
0036 #define KIRKWOOD_RECCTL_SIZE_24 (1<<0)
0037 #define KIRKWOOD_RECCTL_SIZE_32 (0<<0)
0038
0039 #define KIRKWOOD_RECCTL_ENABLE_MASK (KIRKWOOD_RECCTL_SPDIF_EN | \
0040 KIRKWOOD_RECCTL_I2S_EN)
0041
0042 #define KIRKWOOD_REC_BUF_ADDR 0x1004
0043 #define KIRKWOOD_REC_BUF_SIZE 0x1008
0044 #define KIRKWOOD_REC_BYTE_COUNT 0x100C
0045
0046 #define KIRKWOOD_PLAYCTL 0x1100
0047 #define KIRKWOOD_PLAYCTL_PLAY_BUSY (1<<16)
0048 #define KIRKWOOD_PLAYCTL_BURST_MASK (3<<11)
0049 #define KIRKWOOD_PLAYCTL_BURST_128 (2<<11)
0050 #define KIRKWOOD_PLAYCTL_BURST_32 (1<<11)
0051 #define KIRKWOOD_PLAYCTL_PAUSE (1<<9)
0052 #define KIRKWOOD_PLAYCTL_SPDIF_MUTE (1<<8)
0053 #define KIRKWOOD_PLAYCTL_MONO_MASK (3<<5)
0054 #define KIRKWOOD_PLAYCTL_MONO_BOTH (3<<5)
0055 #define KIRKWOOD_PLAYCTL_MONO_OFF (0<<5)
0056 #define KIRKWOOD_PLAYCTL_I2S_MUTE (1<<7)
0057 #define KIRKWOOD_PLAYCTL_SPDIF_EN (1<<4)
0058 #define KIRKWOOD_PLAYCTL_I2S_EN (1<<3)
0059 #define KIRKWOOD_PLAYCTL_SIZE_MASK (7<<0)
0060 #define KIRKWOOD_PLAYCTL_SIZE_16 (7<<0)
0061 #define KIRKWOOD_PLAYCTL_SIZE_16_C (3<<0)
0062 #define KIRKWOOD_PLAYCTL_SIZE_20 (2<<0)
0063 #define KIRKWOOD_PLAYCTL_SIZE_24 (1<<0)
0064 #define KIRKWOOD_PLAYCTL_SIZE_32 (0<<0)
0065
0066 #define KIRKWOOD_PLAYCTL_ENABLE_MASK (KIRKWOOD_PLAYCTL_SPDIF_EN | \
0067 KIRKWOOD_PLAYCTL_I2S_EN)
0068
0069 #define KIRKWOOD_PLAY_BUF_ADDR 0x1104
0070 #define KIRKWOOD_PLAY_BUF_SIZE 0x1108
0071 #define KIRKWOOD_PLAY_BYTE_COUNT 0x110C
0072
0073 #define KIRKWOOD_DCO_CTL 0x1204
0074 #define KIRKWOOD_DCO_CTL_OFFSET_MASK (0xFFF<<2)
0075 #define KIRKWOOD_DCO_CTL_OFFSET_0 (0x800<<2)
0076 #define KIRKWOOD_DCO_CTL_FREQ_MASK (3<<0)
0077 #define KIRKWOOD_DCO_CTL_FREQ_11 (0<<0)
0078 #define KIRKWOOD_DCO_CTL_FREQ_12 (1<<0)
0079 #define KIRKWOOD_DCO_CTL_FREQ_24 (2<<0)
0080
0081 #define KIRKWOOD_DCO_SPCR_STATUS 0x120c
0082 #define KIRKWOOD_DCO_SPCR_STATUS_DCO_LOCK (1<<16)
0083
0084 #define KIRKWOOD_CLOCKS_CTRL 0x1230
0085 #define KIRKWOOD_MCLK_SOURCE_MASK (3<<0)
0086 #define KIRKWOOD_MCLK_SOURCE_DCO (0<<0)
0087 #define KIRKWOOD_MCLK_SOURCE_EXTCLK (3<<0)
0088
0089 #define KIRKWOOD_ERR_CAUSE 0x1300
0090 #define KIRKWOOD_ERR_MASK 0x1304
0091
0092 #define KIRKWOOD_INT_CAUSE 0x1308
0093 #define KIRKWOOD_INT_MASK 0x130C
0094 #define KIRKWOOD_INT_CAUSE_PLAY_BYTES (1<<14)
0095 #define KIRKWOOD_INT_CAUSE_REC_BYTES (1<<13)
0096 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_END (1<<7)
0097 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_3Q (1<<6)
0098 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_HALF (1<<5)
0099 #define KIRKWOOD_INT_CAUSE_DMA_PLAY_1Q (1<<4)
0100 #define KIRKWOOD_INT_CAUSE_DMA_REC_END (1<<3)
0101 #define KIRKWOOD_INT_CAUSE_DMA_REC_3Q (1<<2)
0102 #define KIRKWOOD_INT_CAUSE_DMA_REC_HALF (1<<1)
0103 #define KIRKWOOD_INT_CAUSE_DMA_REC_1Q (1<<0)
0104
0105 #define KIRKWOOD_REC_BYTE_INT_COUNT 0x1310
0106 #define KIRKWOOD_PLAY_BYTE_INT_COUNT 0x1314
0107 #define KIRKWOOD_BYTE_INT_COUNT_MASK 0xffffff
0108
0109 #define KIRKWOOD_I2S_PLAYCTL 0x2508
0110 #define KIRKWOOD_I2S_RECCTL 0x2408
0111 #define KIRKWOOD_I2S_CTL_JUST_MASK (0xf<<26)
0112 #define KIRKWOOD_I2S_CTL_LJ (0<<26)
0113 #define KIRKWOOD_I2S_CTL_I2S (5<<26)
0114 #define KIRKWOOD_I2S_CTL_RJ (8<<26)
0115 #define KIRKWOOD_I2S_CTL_SIZE_MASK (3<<30)
0116 #define KIRKWOOD_I2S_CTL_SIZE_16 (3<<30)
0117 #define KIRKWOOD_I2S_CTL_SIZE_20 (2<<30)
0118 #define KIRKWOOD_I2S_CTL_SIZE_24 (1<<30)
0119 #define KIRKWOOD_I2S_CTL_SIZE_32 (0<<30)
0120
0121 #define KIRKWOOD_AUDIO_BUF_MAX (16*1024*1024)
0122
0123
0124
0125 #define KIRKWOOD_SND_MIN_PERIODS 2
0126 #define KIRKWOOD_SND_MAX_PERIODS 16
0127 #define KIRKWOOD_SND_MIN_PERIOD_BYTES 256
0128 #define KIRKWOOD_SND_MAX_PERIOD_BYTES 0x8000
0129 #define KIRKWOOD_SND_MAX_BUFFER_BYTES (KIRKWOOD_SND_MAX_PERIOD_BYTES \
0130 * KIRKWOOD_SND_MAX_PERIODS)
0131
0132 struct kirkwood_dma_data {
0133 void __iomem *io;
0134 struct clk *clk;
0135 struct clk *extclk;
0136 uint32_t ctl_play;
0137 uint32_t ctl_rec;
0138 struct snd_pcm_substream *substream_play;
0139 struct snd_pcm_substream *substream_rec;
0140 int irq;
0141 int burst;
0142 };
0143
0144 extern const struct snd_soc_component_driver kirkwood_soc_component;
0145
0146 #endif