2 * drivers/media/platform/tegra/camera/registers.h
4 * Tegra VI/CSI register offsets
6 * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms and conditions of the GNU General Public License,
10 * version 2, as published by the Free Software Foundation.
12 * This program is distributed in the hope it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #ifndef __REGISTERS_H__
22 #define __REGISTERS_H__
25 #define TEGRA_VI_SYNCPT_WAIT_TIMEOUT 200
26 #define TEGRA_VI_CFG_VI_INCR_SYNCPT 0x000
27 #define VI_CFG_VI_INCR_SYNCPT_COND(x) (x << 8)
28 #define VI_CSI_PP_LINE_START(port) (4 + (port) * 4)
29 #define VI_CSI_PP_FRAME_START(port) (5 + (port) * 4)
30 #define VI_CSI_MW_REQ_DONE(port) (6 + (port) * 4)
31 #define VI_CSI_MW_ACK_DONE(port) (7 + (port) * 4)
33 #define TEGRA_VI_CFG_VI_INCR_SYNCPT_CNTRL 0x004
34 #define TEGRA_VI_CFG_VI_INCR_SYNCPT_ERROR 0x008
35 #define TEGRA_VI_CFG_CTXSW 0x020
36 #define TEGRA_VI_CFG_INTSTATUS 0x024
37 #define TEGRA_VI_CFG_PWM_CONTROL 0x038
38 #define TEGRA_VI_CFG_PWM_HIGH_PULSE 0x03c
39 #define TEGRA_VI_CFG_PWM_LOW_PULSE 0x040
40 #define TEGRA_VI_CFG_PWM_SELECT_PULSE_A 0x044
41 #define TEGRA_VI_CFG_PWM_SELECT_PULSE_B 0x048
42 #define TEGRA_VI_CFG_PWM_SELECT_PULSE_C 0x04c
43 #define TEGRA_VI_CFG_PWM_SELECT_PULSE_D 0x050
44 #define TEGRA_VI_CFG_VGP1 0x064
45 #define TEGRA_VI_CFG_VGP2 0x068
46 #define TEGRA_VI_CFG_VGP3 0x06c
47 #define TEGRA_VI_CFG_VGP4 0x070
48 #define TEGRA_VI_CFG_VGP5 0x074
49 #define TEGRA_VI_CFG_VGP6 0x078
50 #define TEGRA_VI_CFG_INTERRUPT_MASK 0x08c
51 #define TEGRA_VI_CFG_INTERRUPT_TYPE_SELECT 0x090
52 #define TEGRA_VI_CFG_INTERRUPT_POLARITY_SELECT 0x094
53 #define TEGRA_VI_CFG_INTERRUPT_STATUS 0x098
54 #define TEGRA_VI_CFG_VGP_SYNCPT_CONFIG 0x0ac
55 #define TEGRA_VI_CFG_VI_SW_RESET 0x0b4
56 #define TEGRA_VI_CFG_CG_CTRL 0x0b8
57 #define VI_CG_2ND_LEVEL_EN 0x1
58 #define TEGRA_VI_CFG_VI_MCCIF_FIFOCTRL 0x0e4
59 #define TEGRA_VI_CFG_TIMEOUT_WCOAL_VI 0x0e8
60 #define TEGRA_VI_CFG_DVFS 0x0f0
61 #define TEGRA_VI_CFG_RESERVE 0x0f4
62 #define TEGRA_VI_CFG_RESERVE_1 0x0f8
65 #define TEGRA_VI_CSI_BASE(x) (0x100 + (x) * 0x100)
67 #define TEGRA_VI_CSI_SW_RESET 0x000
68 #define TEGRA_VI_CSI_SINGLE_SHOT 0x004
69 #define SINGLE_SHOT_CAPTURE 0x1
70 #define TEGRA_VI_CSI_SINGLE_SHOT_STATE_UPDATE 0x008
71 #define TEGRA_VI_CSI_IMAGE_DEF 0x00c
72 #define BYPASS_PXL_TRANSFORM_OFFSET 24
73 #define IMAGE_DEF_FORMAT_OFFSET 16
74 #define IMAGE_DEF_DEST_MEM 0x1
75 #define TEGRA_VI_CSI_RGB2Y_CTRL 0x010
76 #define TEGRA_VI_CSI_MEM_TILING 0x014
77 #define TEGRA_VI_CSI_IMAGE_SIZE 0x018
78 #define IMAGE_SIZE_HEIGHT_OFFSET 16
79 #define TEGRA_VI_CSI_IMAGE_SIZE_WC 0x01c
80 #define TEGRA_VI_CSI_IMAGE_DT 0x020
81 #define TEGRA_VI_CSI_SURFACE0_OFFSET_MSB 0x024
82 #define TEGRA_VI_CSI_SURFACE0_OFFSET_LSB 0x028
83 #define TEGRA_VI_CSI_SURFACE1_OFFSET_MSB 0x02c
84 #define TEGRA_VI_CSI_SURFACE1_OFFSET_LSB 0x030
85 #define TEGRA_VI_CSI_SURFACE2_OFFSET_MSB 0x034
86 #define TEGRA_VI_CSI_SURFACE2_OFFSET_LSB 0x038
87 #define TEGRA_VI_CSI_SURFACE0_BF_OFFSET_MSB 0x03c
88 #define TEGRA_VI_CSI_SURFACE0_BF_OFFSET_LSB 0x040
89 #define TEGRA_VI_CSI_SURFACE1_BF_OFFSET_MSB 0x044
90 #define TEGRA_VI_CSI_SURFACE1_BF_OFFSET_LSB 0x048
91 #define TEGRA_VI_CSI_SURFACE2_BF_OFFSET_MSB 0x04c
92 #define TEGRA_VI_CSI_SURFACE2_BF_OFFSET_LSB 0x050
93 #define TEGRA_VI_CSI_SURFACE0_STRIDE 0x054
94 #define TEGRA_VI_CSI_SURFACE1_STRIDE 0x058
95 #define TEGRA_VI_CSI_SURFACE2_STRIDE 0x05c
96 #define TEGRA_VI_CSI_SURFACE_HEIGHT0 0x060
97 #define TEGRA_VI_CSI_ISPINTF_CONFIG 0x064
98 #define TEGRA_VI_CSI_ERROR_STATUS 0x084
99 #define TEGRA_VI_CSI_ERROR_INT_MASK 0x088
100 #define TEGRA_VI_CSI_WD_CTRL 0x08c
101 #define TEGRA_VI_CSI_WD_PERIOD 0x090
103 /* CSI Pixel Parser registers: Starts from 0x838, offset 0x0 */
104 #define TEGRA_CSI_INPUT_STREAM_CONTROL 0x000
105 #define CSI_SKIP_PACKET_THRESHOLD_OFFSET 16
107 #define TEGRA_CSI_PIXEL_STREAM_CONTROL0 0x004
108 #define CSI_PP_PACKET_HEADER_SENT (0x1 << 4)
109 #define CSI_PP_DATA_IDENTIFIER_ENABLE (0x1 << 5)
110 #define CSI_PP_WORD_COUNT_SELECT_HEADER (0x1 << 6)
111 #define CSI_PP_CRC_CHECK_ENABLE (0x1 << 7)
112 #define CSI_PP_WC_CHECK (0x1 << 8)
113 #define CSI_PP_OUTPUT_FORMAT_STORE (0x3 << 16)
114 #define CSI_PP_HEADER_EC_DISABLE (0x1 << 27)
115 #define CSI_PPA_PAD_FRAME_NOPAD (0x2 << 28)
117 #define TEGRA_CSI_PIXEL_STREAM_CONTROL1 0x008
118 #define CSI_PP_TOP_FIELD_FRAME_OFFSET 0
119 #define CSI_PP_TOP_FIELD_FRAME_MASK_OFFSET 4
121 #define TEGRA_CSI_PIXEL_STREAM_GAP 0x00c
122 #define PP_FRAME_MIN_GAP_OFFSET 16
124 #define TEGRA_CSI_PIXEL_STREAM_PP_COMMAND 0x010
125 #define CSI_PP_ENABLE 0x1
126 #define CSI_PP_DISABLE 0x2
127 #define CSI_PP_RST 0x3
128 #define CSI_PP_SINGLE_SHOT_ENABLE (0x1 << 2)
129 #define CSI_PP_START_MARKER_FRAME_MAX_OFFSET 12
131 #define TEGRA_CSI_PIXEL_STREAM_EXPECTED_FRAME 0x014
132 #define TEGRA_CSI_PIXEL_PARSER_INTERRUPT_MASK 0x018
133 #define TEGRA_CSI_PIXEL_PARSER_STATUS 0x01c
134 #define TEGRA_CSI_CSI_SW_SENSOR_RESET 0x020
136 /* CSI PHY registers */
137 #define TEGRA_CSI_PHY_CIL_COMMAND 0x0d0
138 #define CSI_A_PHY_CIL_ENABLE 0x1
139 #define CSI_B_PHY_CIL_ENABLE (0x1 << 8)
141 /* CSI CIL registers: Starts from 0x92c, offset 0xF4 */
142 #define TEGRA_CSI_CIL_OFFSET 0x0f4
144 #define TEGRA_CSI_CIL_PAD_CONFIG0 0x000
145 #define BRICK_CLOCK_A_4X (0x1 << 16)
146 #define BRICK_CLOCK_B_4X (0x2 << 16)
147 #define TEGRA_CSI_CIL_PAD_CONFIG1 0x004
148 #define TEGRA_CSI_CIL_PHY_CONTROL 0x008
149 #define TEGRA_CSI_CIL_INTERRUPT_MASK 0x00c
150 #define TEGRA_CSI_CIL_STATUS 0x010
151 #define TEGRA_CSI_CILX_STATUS 0x014
152 #define TEGRA_CSI_CIL_ESCAPE_MODE_COMMAND 0x018
153 #define TEGRA_CSI_CIL_ESCAPE_MODE_DATA 0x01c
154 #define TEGRA_CSI_CIL_SW_SENSOR_RESET 0x020
156 /* CSI Pattern Generator registers: Starts from 0x9c4, offset 0x18c */
157 #define TEGRA_CSI_TPG_OFFSET 0x18c
159 #define TEGRA_CSI_PATTERN_GENERATOR_CTRL 0x000
160 #define PG_MODE_OFFSET 2
161 #define PG_ENABLE 0x1
163 #define TEGRA_CSI_PG_BLANK 0x004
164 #define TEGRA_CSI_PG_PHASE 0x008
165 #define TEGRA_CSI_PG_RED_FREQ 0x00c
166 #define PG_RED_VERT_INIT_FREQ_OFFSET 16
167 #define PG_RED_HOR_INIT_FREQ_OFFSET 0
169 #define TEGRA_CSI_PG_RED_FREQ_RATE 0x010
170 #define TEGRA_CSI_PG_GREEN_FREQ 0x014
171 #define PG_GREEN_VERT_INIT_FREQ_OFFSET 16
172 #define PG_GREEN_HOR_INIT_FREQ_OFFSET 0
174 #define TEGRA_CSI_PG_GREEN_FREQ_RATE 0x018
175 #define TEGRA_CSI_PG_BLUE_FREQ 0x01c
176 #define PG_BLUE_VERT_INIT_FREQ_OFFSET 16
177 #define PG_BLUE_HOR_INIT_FREQ_OFFSET 0
179 #define TEGRA_CSI_PG_BLUE_FREQ_RATE 0x020
180 #define TEGRA_CSI_PG_AOHDR 0x024
182 #define TEGRA_CSI_DPCM_CTRL_A 0xa2c
183 #define TEGRA_CSI_DPCM_CTRL_B 0xa30
185 /* Other CSI registers: Starts from 0xa44, offset 0x20c */
186 #define TEGRA_CSI_STALL_COUNTER 0x20c
187 #define TEGRA_CSI_CSI_READONLY_STATUS 0x210
188 #define TEGRA_CSI_CSI_SW_STATUS_RESET 0x214
189 #define TEGRA_CSI_CLKEN_OVERRIDE 0x218
190 #define TEGRA_CSI_DEBUG_CONTROL 0x21c
191 #define TEGRA_CSI_DEBUG_COUNTER_0 0x220
192 #define TEGRA_CSI_DEBUG_COUNTER_1 0x224
193 #define TEGRA_CSI_DEBUG_COUNTER_2 0x228
196 /* CSI Pixel Parser registers */
197 #define TEGRA_CSI_PIXEL_PARSER_0_BASE 0x0838
198 #define TEGRA_CSI_PIXEL_PARSER_1_BASE 0x086c
199 #define TEGRA_CSI_PIXEL_PARSER_2_BASE 0x1038
200 #define TEGRA_CSI_PIXEL_PARSER_3_BASE 0x106c
201 #define TEGRA_CSI_PIXEL_PARSER_4_BASE 0x1838
202 #define TEGRA_CSI_PIXEL_PARSER_5_BASE 0x186c
204 /* CSIA to CSIB register offset */
205 #define TEGRA_CSI_PORT_OFFSET 0x34