aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/kirkwood/kirkwood.h
blob: c13ee5f69446df3bd1cd46cf58a5c3d487e5c0a6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
 * kirkwood.h
 *
 * (c) 2010 Arnaud Patard <apatard@mandriva.com>
 *
 *  This program is free software; you can redistribute  it and/or modify it
 *  under  the terms of  the GNU General  Public License as published by the
 *  Free Software Foundation;  either version 2 of the  License, or (at your
 *  option) any later version.
 */

#ifndef _KIRKWOOD_AUDIO_H
#define _KIRKWOOD_AUDIO_H

#define DRV_NAME	"mvebu-audio"

#define KIRKWOOD_RECORD_WIN			0
#define KIRKWOOD_PLAYBACK_WIN			1
#define KIRKWOOD_MAX_AUDIO_WIN			2

#define KIRKWOOD_AUDIO_WIN_BASE_REG(win)	(0xA00 + ((win)<<3))
#define KIRKWOOD_AUDIO_WIN_CTRL_REG(win)	(0xA04 + ((win)<<3))


#define KIRKWOOD_RECCTL			0x1000
#define KIRKWOOD_RECCTL_SPDIF_EN		(1<<11)
#define KIRKWOOD_RECCTL_I2S_EN			(1<<10)
#define KIRKWOOD_RECCTL_PAUSE			(1<<9)
#define KIRKWOOD_RECCTL_MUTE			(1<<8)
#define KIRKWOOD_RECCTL_BURST_MASK		(3<<5)
#define KIRKWOOD_RECCTL_BURST_128		(2<<5)
#define KIRKWOOD_RECCTL_BURST_32		(1<<5)
#define KIRKWOOD_RECCTL_MONO			(1<<4)
#define KIRKWOOD_RECCTL_MONO_CHAN_RIGHT	(1<<3)
#define KIRKWOOD_RECCTL_MONO_CHAN_LEFT		(0<<3)
#define KIRKWOOD_RECCTL_SIZE_MASK		(7<<0)
#define KIRKWOOD_RECCTL_SIZE_16		(7<<0)
#define KIRKWOOD_RECCTL_SIZE_16_C		(3<<0)
#define KIRKWOOD_RECCTL_SIZE_20		(2<<0)
#define KIRKWOOD_RECCTL_SIZE_24		(1<<0)
#define KIRKWOOD_RECCTL_SIZE_32		(0<<0)

#define KIRKWOOD_RECCTL_ENABLE_MASK		(KIRKWOOD_RECCTL_SPDIF_EN | \
						 KIRKWOOD_RECCTL_I2S_EN)

#define KIRKWOOD_REC_BUF_ADDR			0x1004
#define KIRKWOOD_REC_BUF_SIZE			0x1008
#define KIRKWOOD_REC_BYTE_COUNT			0x100C

#define KIRKWOOD_PLAYCTL			0x1100
#define KIRKWOOD_PLAYCTL_PLAY_BUSY		(1<<16)
#define KIRKWOOD_PLAYCTL_BURST_MASK		(3<<11)
#define KIRKWOOD_PLAYCTL_BURST_128		(2<<11)
#define KIRKWOOD_PLAYCTL_BURST_32		(1<<11)
#define KIRKWOOD_PLAYCTL_PAUSE			(1<<9)
#define KIRKWOOD_PLAYCTL_SPDIF_MUTE		(1<<8)
#define KIRKWOOD_PLAYCTL_MONO_MASK		(3<<5)
#define KIRKWOOD_PLAYCTL_MONO_BOTH		(3<<5)
#define KIRKWOOD_PLAYCTL_MONO_OFF		(0<<5)
#define KIRKWOOD_PLAYCTL_I2S_MUTE		(1<<7)
#define KIRKWOOD_PLAYCTL_SPDIF_EN		(1<<4)
#define KIRKWOOD_PLAYCTL_I2S_EN			(1<<3)
#define KIRKWOOD_PLAYCTL_SIZE_MASK		(7<<0)
#define KIRKWOOD_PLAYCTL_SIZE_16		(7<<0)
#define KIRKWOOD_PLAYCTL_SIZE_16_C		(3<<0)
#define KIRKWOOD_PLAYCTL_SIZE_20		(2<<0)
#define KIRKWOOD_PLAYCTL_SIZE_24		(1<<0)
#define KIRKWOOD_PLAYCTL_SIZE_32		(0<<0)

#define KIRKWOOD_PLAYCTL_ENABLE_MASK		(KIRKWOOD_PLAYCTL_SPDIF_EN | \
						 KIRKWOOD_PLAYCTL_I2S_EN)

#define KIRKWOOD_PLAY_BUF_ADDR			0x1104
#define KIRKWOOD_PLAY_BUF_SIZE			0x1108
#define KIRKWOOD_PLAY_BYTE_COUNT		0x110C

#define KIRKWOOD_DCO_CTL			0x1204
#define KIRKWOOD_DCO_CTL_OFFSET_MASK		(0xFFF<<2)
#define KIRKWOOD_DCO_CTL_OFFSET_0		(0x800<<2)
#define KIRKWOOD_DCO_CTL_FREQ_MASK		(3<<0)
#define KIRKWOOD_DCO_CTL_FREQ_11		(0<<0)
#define KIRKWOOD_DCO_CTL_FREQ_12		(1<<0)
#define KIRKWOOD_DCO_CTL_FREQ_24		(2<<0)

#define KIRKWOOD_DCO_SPCR_STATUS		0x120c
#define KIRKWOOD_DCO_SPCR_STATUS_DCO_LOCK	(1<<16)

#define KIRKWOOD_CLOCKS_CTRL			0x1230
#define KIRKWOOD_MCLK_SOURCE_MASK		(3<<0)
#define KIRKWOOD_MCLK_SOURCE_DCO		(0<<0)
#define KIRKWOOD_MCLK_SOURCE_EXTCLK		(3<<0)

#define KIRKWOOD_ERR_CAUSE			0x1300
#define KIRKWOOD_ERR_MASK			0x1304

#define KIRKWOOD_INT_CAUSE			0x1308
#define KIRKWOOD_INT_MASK			0x130C
#define KIRKWOOD_INT_CAUSE_PLAY_BYTES		(1<<14)
#define KIRKWOOD_INT_CAUSE_REC_BYTES		(1<<13)
#define KIRKWOOD_INT_CAUSE_DMA_PLAY_END	(1<<7)
#define KIRKWOOD_INT_CAUSE_DMA_PLAY_3Q		(1<<6)
#define KIRKWOOD_INT_CAUSE_DMA_PLAY_HALF	(1<<5)
#define KIRKWOOD_INT_CAUSE_DMA_PLAY_1Q		(1<<4)
#define KIRKWOOD_INT_CAUSE_DMA_REC_END		(1<<3)
#define KIRKWOOD_INT_CAUSE_DMA_REC_3Q		(1<<2)
#define KIRKWOOD_INT_CAUSE_DMA_REC_HALF	(1<<1)
#define KIRKWOOD_INT_CAUSE_DMA_REC_1Q		(1<<0)

#define KIRKWOOD_REC_BYTE_INT_COUNT		0x1310
#define KIRKWOOD_PLAY_BYTE_INT_COUNT		0x1314
#define KIRKWOOD_BYTE_INT_COUNT_MASK		0xffffff

#define KIRKWOOD_I2S_PLAYCTL			0x2508
#define KIRKWOOD_I2S_RECCTL			0x2408
#define KIRKWOOD_I2S_CTL_JUST_MASK		(0xf<<26)
#define KIRKWOOD_I2S_CTL_LJ			(0<<26)
#define KIRKWOOD_I2S_CTL_I2S			(5<<26)
#define KIRKWOOD_I2S_CTL_RJ			(8<<26)
#define KIRKWOOD_I2S_CTL_SIZE_MASK		(3<<30)
#define KIRKWOOD_I2S_CTL_SIZE_16		(3<<30)
#define KIRKWOOD_I2S_CTL_SIZE_20		(2<<30)
#define KIRKWOOD_I2S_CTL_SIZE_24		(1<<30)
#define KIRKWOOD_I2S_CTL_SIZE_32		(0<<30)

#define KIRKWOOD_AUDIO_BUF_MAX			(16*1024*1024)

/* Theses values come from the marvell alsa driver */
/* need to find where they come from               */
#define KIRKWOOD_SND_MIN_PERIODS		2
#define KIRKWOOD_SND_MAX_PERIODS		16
#define KIRKWOOD_SND_MIN_PERIOD_BYTES		256
#define KIRKWOOD_SND_MAX_PERIOD_BYTES		0x8000
#define KIRKWOOD_SND_MAX_BUFFER_BYTES		(KIRKWOOD_SND_MAX_PERIOD_BYTES \
						 * KIRKWOOD_SND_MAX_PERIODS)

struct kirkwood_dma_data {
	void __iomem *io;
	struct clk *clk;
	struct clk *extclk;
	uint32_t ctl_play;
	uint32_t ctl_rec;
	struct snd_pcm_substream *substream_play;
	struct snd_pcm_substream *substream_rec;
	int irq;
	int burst;
};

extern const struct snd_soc_component_driver kirkwood_soc_component;

#endif