Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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