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