12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2f9b95980Sapatard@mandriva.com /* 3f9b95980Sapatard@mandriva.com * kirkwood.h 4f9b95980Sapatard@mandriva.com * 5f9b95980Sapatard@mandriva.com * (c) 2010 Arnaud Patard <apatard@mandriva.com> 6f9b95980Sapatard@mandriva.com */ 7f9b95980Sapatard@mandriva.com 8f9b95980Sapatard@mandriva.com #ifndef _KIRKWOOD_AUDIO_H 9f9b95980Sapatard@mandriva.com #define _KIRKWOOD_AUDIO_H 10f9b95980Sapatard@mandriva.com 11f98fc0f8SKuninori Morimoto #define DRV_NAME "mvebu-audio" 12f98fc0f8SKuninori Morimoto 13f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECORD_WIN 0 14f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYBACK_WIN 1 15f9b95980Sapatard@mandriva.com #define KIRKWOOD_MAX_AUDIO_WIN 2 16f9b95980Sapatard@mandriva.com 17f9b95980Sapatard@mandriva.com #define KIRKWOOD_AUDIO_WIN_BASE_REG(win) (0xA00 + ((win)<<3)) 18f9b95980Sapatard@mandriva.com #define KIRKWOOD_AUDIO_WIN_CTRL_REG(win) (0xA04 + ((win)<<3)) 19f9b95980Sapatard@mandriva.com 20f9b95980Sapatard@mandriva.com 21f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL 0x1000 22f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SPDIF_EN (1<<11) 23f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_I2S_EN (1<<10) 24f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_PAUSE (1<<9) 25f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_MUTE (1<<8) 26f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_BURST_MASK (3<<5) 27f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_BURST_128 (2<<5) 28f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_BURST_32 (1<<5) 29f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_MONO (1<<4) 30f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_MONO_CHAN_RIGHT (1<<3) 31f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_MONO_CHAN_LEFT (0<<3) 32f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SIZE_MASK (7<<0) 33f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SIZE_16 (7<<0) 34f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SIZE_16_C (3<<0) 35f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SIZE_20 (2<<0) 36f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SIZE_24 (1<<0) 37f9b95980Sapatard@mandriva.com #define KIRKWOOD_RECCTL_SIZE_32 (0<<0) 38f9b95980Sapatard@mandriva.com 3952b896cfSRussell King #define KIRKWOOD_RECCTL_ENABLE_MASK (KIRKWOOD_RECCTL_SPDIF_EN | \ 4052b896cfSRussell King KIRKWOOD_RECCTL_I2S_EN) 4152b896cfSRussell King 42f9b95980Sapatard@mandriva.com #define KIRKWOOD_REC_BUF_ADDR 0x1004 43f9b95980Sapatard@mandriva.com #define KIRKWOOD_REC_BUF_SIZE 0x1008 44f9b95980Sapatard@mandriva.com #define KIRKWOOD_REC_BYTE_COUNT 0x100C 45f9b95980Sapatard@mandriva.com 46f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL 0x1100 47f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_PLAY_BUSY (1<<16) 48f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_BURST_MASK (3<<11) 49f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_BURST_128 (2<<11) 50f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_BURST_32 (1<<11) 51f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_PAUSE (1<<9) 52f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SPDIF_MUTE (1<<8) 53dfe4c936Sarnaud.patard@rtp-net.org #define KIRKWOOD_PLAYCTL_MONO_MASK (3<<5) 54dfe4c936Sarnaud.patard@rtp-net.org #define KIRKWOOD_PLAYCTL_MONO_BOTH (3<<5) 55dfe4c936Sarnaud.patard@rtp-net.org #define KIRKWOOD_PLAYCTL_MONO_OFF (0<<5) 56f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_I2S_MUTE (1<<7) 57f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SPDIF_EN (1<<4) 58f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_I2S_EN (1<<3) 59f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SIZE_MASK (7<<0) 60f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SIZE_16 (7<<0) 61f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SIZE_16_C (3<<0) 62f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SIZE_20 (2<<0) 63f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SIZE_24 (1<<0) 64f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAYCTL_SIZE_32 (0<<0) 65db43b16fSRussell King 66db43b16fSRussell King #define KIRKWOOD_PLAYCTL_ENABLE_MASK (KIRKWOOD_PLAYCTL_SPDIF_EN | \ 67db43b16fSRussell King KIRKWOOD_PLAYCTL_I2S_EN) 68f9b95980Sapatard@mandriva.com 69f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAY_BUF_ADDR 0x1104 70f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAY_BUF_SIZE 0x1108 71f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAY_BYTE_COUNT 0x110C 72f9b95980Sapatard@mandriva.com 73f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL 0x1204 74f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL_OFFSET_MASK (0xFFF<<2) 75f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL_OFFSET_0 (0x800<<2) 76f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL_FREQ_MASK (3<<0) 77f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL_FREQ_11 (0<<0) 78f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL_FREQ_12 (1<<0) 79f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_CTL_FREQ_24 (2<<0) 80f9b95980Sapatard@mandriva.com 81f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_SPCR_STATUS 0x120c 82f9b95980Sapatard@mandriva.com #define KIRKWOOD_DCO_SPCR_STATUS_DCO_LOCK (1<<16) 83f9b95980Sapatard@mandriva.com 84363589bfSRussell King #define KIRKWOOD_CLOCKS_CTRL 0x1230 85363589bfSRussell King #define KIRKWOOD_MCLK_SOURCE_MASK (3<<0) 86363589bfSRussell King #define KIRKWOOD_MCLK_SOURCE_DCO (0<<0) 87363589bfSRussell King #define KIRKWOOD_MCLK_SOURCE_EXTCLK (3<<0) 88363589bfSRussell King 89f9b95980Sapatard@mandriva.com #define KIRKWOOD_ERR_CAUSE 0x1300 90f9b95980Sapatard@mandriva.com #define KIRKWOOD_ERR_MASK 0x1304 91f9b95980Sapatard@mandriva.com 92f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE 0x1308 93f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_MASK 0x130C 94f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_PLAY_BYTES (1<<14) 95f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_REC_BYTES (1<<13) 96f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_PLAY_END (1<<7) 97f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_PLAY_3Q (1<<6) 98f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_PLAY_HALF (1<<5) 99f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_PLAY_1Q (1<<4) 100f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_REC_END (1<<3) 101f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_REC_3Q (1<<2) 102f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_REC_HALF (1<<1) 103f9b95980Sapatard@mandriva.com #define KIRKWOOD_INT_CAUSE_DMA_REC_1Q (1<<0) 104f9b95980Sapatard@mandriva.com 105f9b95980Sapatard@mandriva.com #define KIRKWOOD_REC_BYTE_INT_COUNT 0x1310 106f9b95980Sapatard@mandriva.com #define KIRKWOOD_PLAY_BYTE_INT_COUNT 0x1314 107f9b95980Sapatard@mandriva.com #define KIRKWOOD_BYTE_INT_COUNT_MASK 0xffffff 108f9b95980Sapatard@mandriva.com 109f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_PLAYCTL 0x2508 110f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_RECCTL 0x2408 111f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_JUST_MASK (0xf<<26) 112f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_LJ (0<<26) 113f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_I2S (5<<26) 114f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_RJ (8<<26) 115f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_SIZE_MASK (3<<30) 116f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_SIZE_16 (3<<30) 117f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_SIZE_20 (2<<30) 118f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_SIZE_24 (1<<30) 119f9b95980Sapatard@mandriva.com #define KIRKWOOD_I2S_CTL_SIZE_32 (0<<30) 120f9b95980Sapatard@mandriva.com 121f9b95980Sapatard@mandriva.com #define KIRKWOOD_AUDIO_BUF_MAX (16*1024*1024) 122f9b95980Sapatard@mandriva.com 123f9b95980Sapatard@mandriva.com /* Theses values come from the marvell alsa driver */ 124f9b95980Sapatard@mandriva.com /* need to find where they come from */ 125a622251cSRussell King #define KIRKWOOD_SND_MIN_PERIODS 2 126f9b95980Sapatard@mandriva.com #define KIRKWOOD_SND_MAX_PERIODS 16 127a622251cSRussell King #define KIRKWOOD_SND_MIN_PERIOD_BYTES 256 128ce3d0609SJean-Francois Moine #define KIRKWOOD_SND_MAX_PERIOD_BYTES 0x8000 129e4065f3fSRussell King #define KIRKWOOD_SND_MAX_BUFFER_BYTES (KIRKWOOD_SND_MAX_PERIOD_BYTES \ 130e4065f3fSRussell King * KIRKWOOD_SND_MAX_PERIODS) 131f9b95980Sapatard@mandriva.com 132f9b95980Sapatard@mandriva.com struct kirkwood_dma_data { 133f9b95980Sapatard@mandriva.com void __iomem *io; 134363589bfSRussell King struct clk *clk; 135363589bfSRussell King struct clk *extclk; 136d8d11ba5SRussell King uint32_t ctl_play; 137d8d11ba5SRussell King uint32_t ctl_rec; 138a7d09429SRussell King struct snd_pcm_substream *substream_play; 139a7d09429SRussell King struct snd_pcm_substream *substream_rec; 140f9b95980Sapatard@mandriva.com int irq; 141f9b95980Sapatard@mandriva.com int burst; 142f9b95980Sapatard@mandriva.com }; 143f9b95980Sapatard@mandriva.com 144f98fc0f8SKuninori Morimoto extern const struct snd_soc_component_driver kirkwood_soc_component; 14564ddf1f8SRussell King 146f9b95980Sapatard@mandriva.com #endif 147