]> nv-tegra.nvidia Code Review - linux-3.10.git/blob - sound/soc/tegra-alt/tegra114_amx_alt.h
ASoC: tegra-alt: Miscellaneous fixes for T124
[linux-3.10.git] / sound / soc / tegra-alt / tegra114_amx_alt.h
1 /*
2  * tegra114_amx_alt.h - Definitions for Tegra114 AMX driver
3  *
4  * Copyright (c) 2013-2014 NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHIN
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef __TEGRA114_AMX_ALT_H__
20 #define __TEGRA114_AMX_ALT_H__
21
22 #define TEGRA_AMX_AUDIOCIF_CH_STRIDE 4
23
24 /* Register offsets from TEGRA_AMX*_BASE */
25 #define TEGRA_AMX_CTRL                  0x00
26 #define TEGRA_AMX_IN_CH_CTRL                    0x04
27 #define TEGRA_AMX_OUT_BYTE_EN0          0x08
28 #define TEGRA_AMX_OUT_BYTE_EN1          0x0c
29 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL  0x10
30 #define TEGRA_AMX_AUDIORAMCTL_AMX_DATA  0x14
31 #define TEGRA_AMX_AUDIOCIF_OUT_CTRL             0x18
32 #define TEGRA_AMX_AUDIOCIF_CH0_CTRL             0x1c
33 #define TEGRA_AMX_AUDIOCIF_CH1_CTRL             0x20
34 #define TEGRA_AMX_AUDIOCIF_CH2_CTRL             0x24
35 #define TEGRA_AMX_AUDIOCIF_CH3_CTRL             0x28
36
37 /* Fields in TEGRA_AMX_CTRL */
38 #define TEGRA_AMX_CTRL_SOFT_RESET_SHIFT 31
39 #define TEGRA_AMX_CTRL_SOFT_RESET               (1 << TEGRA_AMX_CTRL_SOFT_RESET_SHIFT)
40 #define TEGRA_AMX_CTRL_CG_EN_SHIFT              30
41
42 #define TEGRA_AMX_CTRL_MSTR_CH_NUM_SHIFT                10
43 #define TEGRA_AMX_CTRL_MSTR_CH_NUM_MASK         (3 << TEGRA_AMX_CTRL_MSTR_CH_NUM_SHIFT)
44
45 #define TEGRA_AMX_CTRL_CH_DEP_SHIFT             8
46 #define TEGRA_AMX_CTRL_CH_DEP_MASK                      (3 << TEGRA_AMX_CTRL_CH_DEP_SHIFT)
47 #define TEGRA_AMX_CTRL_CH_DEP_WT_ON_ALL         0
48 #define TEGRA_AMX_CTRL_CH_DEP_WT_ON_ANY         (1 << TEGRA_AMX_CTRL_CH_DEP_SHIFT)
49 #define TEGRA_AMX_CTRL_CH_DEP_WT_ON_MASTER              (2 << TEGRA_AMX_CTRL_CH_DEP_SHIFT)
50 #define TEGRA_AMX_CTRL_CH_DEP_RSVD                      (3 << TEGRA_AMX_CTRL_CH_DEP_SHIFT)
51
52 /* Fields in TEGRA_AMX_IN_CH_CTRL */
53 #define TEGRA_AMX_IN_CH_ENABLE  1
54 #define TEGRA_AMX_IN_CH_DISABLE 0
55 #define TEGRA_AMX_IN_CH_CTRL_CH3_FORCE_DISABLE_SHIFT            11
56 #define TEGRA_AMX_IN_CH_CTRL_CH2_FORCE_DISABLE_SHIFT            10
57 #define TEGRA_AMX_IN_CH_CTRL_CH1_FORCE_DISABLE_SHIFT            9
58 #define TEGRA_AMX_IN_CH_CTRL_CH0_FORCE_DISABLE_SHIFT            8
59 #define TEGRA_AMX_IN_CH_CTRL_CH3_DISABLE_SHIFT          3
60 #define TEGRA_AMX_IN_CH_CTRL_CH2_DISABLE_SHIFT          2
61 #define TEGRA_AMX_IN_CH_CTRL_CH1_DISABLE_SHIFT          1
62 #define TEGRA_AMX_IN_CH_CTRL_CH0_DISABLE_SHIFT          0
63
64 /* Fields in TEGRA_AMX_AUDIORAMCTL_AMX_CTRL */
65 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_RAM_ADR_SHIFT            0
66 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_HW_ADR_EN_SHIFT  12
67 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_RESET_HW_ADR_SHIFT       13
68 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_RW_SHIFT         14
69 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_READ_BUSY_SHIFT  31
70
71 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_HW_ADR_EN_ENABLE (1 << TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_HW_ADR_EN_SHIFT)
72 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_HW_ADR_EN_DISABLE        0
73 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_RW_READ          0
74 #define TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_RW_WRITE         (1 << TEGRA_AMX_AUDIORAMCTL_AMX_CTRL_RW_SHIFT)
75
76 /*
77  * Those defines are not in register field.
78  */
79 #define TEGRA_AMX_RAM_DEPTH                     16
80 #define TEGRA_AMX_MAP_STREAM_NUMBER_SHIFT       6
81 #define TEGRA_AMX_MAP_WORD_NUMBER_SHIFT 2
82 #define TEGRA_AMX_MAP_BYTE_NUMBER_SHIFT 0
83
84 /* Fields in TEGRA_AMX_AUDIOCIF_IN_CTRL */
85 /* Uses field from AUDIOCIF_CTRL_* in tegra_cif_utils_alt.h */
86
87 /* Fields in TEGRA_AMX_AUDIOCIF_CH0_CTRL */
88 /* Uses field from AUDIOCIF_CTRL_* in tegra_cif_utils_alt.h */
89
90 /* Fields in TEGRA_AMX_AUDIOCIF_CH1_CTRL */
91 /* Uses field from AUDIOCIF_CTRL_* in tegra_cif_utils_alt.h */
92
93 /* Fields in TEGRA_AMX_AUDIOCIF_CH2_CTRL */
94 /* Uses field from AUDIOCIF_CTRL_* in tegra_cif_utils_alt.h */
95
96 /* Fields in TEGRA_AMX_AUDIOCIF_CH3_CTRL */
97 /* Uses field from AUDIOCIF_CTRL_* in tegra_cif_utils_alt.h */
98
99 enum {
100         TEGRA_AMX_WAIT_ON_ALL,
101         TEGRA_AMX_WAIT_ON_ANY,
102         TEGRA_AMX_WAIT_ON_MASTER,
103 };
104
105 enum {
106         /* Code assumes that IN_STREAM values of AMX start at 0 */
107         TEGRA_AMX_IN_STREAM0 = 0,
108         TEGRA_AMX_IN_STREAM1,
109         TEGRA_AMX_IN_STREAM2,
110         TEGRA_AMX_IN_STREAM3,
111         TEGRA_AMX_OUT_STREAM,
112         TEGRA_AMX_TOTAL_STREAM
113 };
114
115 struct tegra114_amx_soc_data {
116         void (*set_audio_cif)(struct regmap *map,
117                         unsigned int reg,
118                         struct tegra30_xbar_cif_conf *conf);
119 };
120
121 struct tegra114_amx {
122         struct clk *clk_amx;
123         struct regmap *regmap;
124         unsigned int map[16];
125         const struct tegra114_amx_soc_data *soc_data;
126 };
127
128 #endif