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