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