summaryrefslogtreecommitdiff
path: root/drivers/media/platform/rockchip/rkcif/rkcif-regs.h
blob: 3cf7ee19de300eb2ad683a61ef68652c0f910fb2 (plain)
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
151
152
153
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Rockchip Camera Interface (CIF) Driver
 *
 * Copyright (C) 2018 Rockchip Electronics Co., Ltd.
 * Copyright (C) 2023 Mehdi Djait <mehdi.djait@bootlin.com>
 * Copyright (C) 2025 Michael Riesch <michael.riesch@wolfvision.net>
 */

#ifndef _RKCIF_REGS_H
#define _RKCIF_REGS_H

#define RKCIF_REGISTER_NOTSUPPORTED		0x420000
#define RKCIF_FETCH_Y(VAL)			((VAL) & 0x1fff)
#define RKCIF_XY_COORD(x, y)			(((y) << 16) | (x))

/* DVP register contents */
#define RKCIF_CTRL_ENABLE_CAPTURE		BIT(0)
#define RKCIF_CTRL_MODE_PINGPONG		BIT(1)
#define RKCIF_CTRL_MODE_LINELOOP		BIT(2)
#define RKCIF_CTRL_AXI_BURST_16			(0xf << 12)

#define RKCIF_INTEN_FRAME_END_EN		BIT(0)
#define RKCIF_INTEN_LINE_ERR_EN			BIT(2)
#define RKCIF_INTEN_BUS_ERR_EN			BIT(6)
#define RKCIF_INTEN_SCL_ERR_EN			BIT(7)
#define RKCIF_INTEN_PST_INF_FRAME_END_EN	BIT(9)

#define RKCIF_INTSTAT_CLS			0x3ff
#define RKCIF_INTSTAT_FRAME_END			BIT(0)
#define RKCIF_INTSTAT_LINE_END			BIT(1)
#define RKCIF_INTSTAT_LINE_ERR			BIT(2)
#define RKCIF_INTSTAT_PIX_ERR			BIT(3)
#define RKCIF_INTSTAT_DFIFO_OF			BIT(5)
#define RKCIF_INTSTAT_BUS_ERR			BIT(6)
#define RKCIF_INTSTAT_PRE_INF_FRAME_END		BIT(8)
#define RKCIF_INTSTAT_PST_INF_FRAME_END		BIT(9)
#define RKCIF_INTSTAT_FRAME_END_CLR		BIT(0)
#define RKCIF_INTSTAT_LINE_END_CLR		BIT(1)
#define RKCIF_INTSTAT_LINE_ERR_CLR		BIT(2)
#define RKCIF_INTSTAT_PST_INF_FRAME_END_CLR	BIT(9)
#define RKCIF_INTSTAT_ERR			0xfc

#define RKCIF_FRAME_STAT_CLS			0x00
#define RKCIF_FRAME_FRM0_STAT_CLS		0x20

#define RKCIF_FORMAT_VSY_HIGH_ACTIVE		BIT(0)
#define RKCIF_FORMAT_HSY_LOW_ACTIVE		BIT(1)

#define RKCIF_FORMAT_INPUT_MODE_YUV		(0x00 << 2)
#define RKCIF_FORMAT_INPUT_MODE_PAL		(0x02 << 2)
#define RKCIF_FORMAT_INPUT_MODE_NTSC		(0x03 << 2)
#define RKCIF_FORMAT_INPUT_MODE_BT1120		(0x07 << 2)
#define RKCIF_FORMAT_INPUT_MODE_RAW		(0x04 << 2)
#define RKCIF_FORMAT_INPUT_MODE_JPEG		(0x05 << 2)
#define RKCIF_FORMAT_INPUT_MODE_MIPI		(0x06 << 2)

#define RKCIF_FORMAT_YUV_INPUT_ORDER_UYVY	(0x00 << 5)
#define RKCIF_FORMAT_YUV_INPUT_ORDER_YVYU	(0x01 << 5)
#define RKCIF_FORMAT_YUV_INPUT_ORDER_VYUY	(0x02 << 5)
#define RKCIF_FORMAT_YUV_INPUT_ORDER_YUYV	(0x03 << 5)
#define RKCIF_FORMAT_YUV_INPUT_422		(0x00 << 7)
#define RKCIF_FORMAT_YUV_INPUT_420		BIT(7)

#define RKCIF_FORMAT_INPUT_420_ORDER_ODD	BIT(8)

#define RKCIF_FORMAT_CCIR_INPUT_ORDER_EVEN	BIT(9)

#define RKCIF_FORMAT_RAW_DATA_WIDTH_8		(0x00 << 11)
#define RKCIF_FORMAT_RAW_DATA_WIDTH_10		(0x01 << 11)
#define RKCIF_FORMAT_RAW_DATA_WIDTH_12		(0x02 << 11)

#define RKCIF_FORMAT_YUV_OUTPUT_422		(0x00 << 16)
#define RKCIF_FORMAT_YUV_OUTPUT_420		BIT(16)

#define RKCIF_FORMAT_OUTPUT_420_ORDER_EVEN	(0x00 << 17)
#define RKCIF_FORMAT_OUTPUT_420_ORDER_ODD	BIT(17)

#define RKCIF_FORMAT_RAWD_DATA_LITTLE_ENDIAN	(0x00 << 18)
#define RKCIF_FORMAT_RAWD_DATA_BIG_ENDIAN	BIT(18)

#define RKCIF_FORMAT_UV_STORAGE_ORDER_UVUV	(0x00 << 19)
#define RKCIF_FORMAT_UV_STORAGE_ORDER_VUVU	BIT(19)

#define RKCIF_FORMAT_BT1120_CLOCK_SINGLE_EDGES	(0x00 << 24)
#define RKCIF_FORMAT_BT1120_CLOCK_DOUBLE_EDGES	BIT(24)
#define RKCIF_FORMAT_BT1120_TRANSMIT_INTERFACE	(0x00 << 25)
#define RKCIF_FORMAT_BT1120_TRANSMIT_PROGRESS	BIT(25)
#define RKCIF_FORMAT_BT1120_YC_SWAP		BIT(26)

#define RKCIF_SCL_CTRL_ENABLE_SCL_DOWN		BIT(0)
#define RKCIF_SCL_CTRL_ENABLE_SCL_UP		BIT(1)
#define RKCIF_SCL_CTRL_ENABLE_YUV_16BIT_BYPASS	BIT(4)
#define RKCIF_SCL_CTRL_ENABLE_RAW_16BIT_BYPASS	BIT(5)
#define RKCIF_SCL_CTRL_ENABLE_32BIT_BYPASS	BIT(6)
#define RKCIF_SCL_CTRL_DISABLE_32BIT_BYPASS	(0x00 << 6)

#define RKCIF_INTSTAT_F0_READY			BIT(0)
#define RKCIF_INTSTAT_F1_READY			BIT(1)

/* GRF register offsets and contents */
#define RK3568_GRF_VI_CON0			0x340
#define RK3568_GRF_VI_CON1			0x344
#define RK3568_GRF_VI_STATUS0			0x348

#define RK3568_GRF_VI_CON1_CIF_DATAPATH		BIT(9)
#define RK3568_GRF_VI_CON1_CIF_CLK_DELAYNUM	GENMASK(6, 0)

#define RK3568_GRF_WRITE_ENABLE(x)		((x) << 16)

enum rkcif_dvp_register_index {
	RKCIF_DVP_CTRL,
	RKCIF_DVP_INTEN,
	RKCIF_DVP_INTSTAT,
	RKCIF_DVP_FOR,
	RKCIF_DVP_LINE_NUM_ADDR,
	RKCIF_DVP_FRM0_ADDR_Y,
	RKCIF_DVP_FRM0_ADDR_UV,
	RKCIF_DVP_FRM1_ADDR_Y,
	RKCIF_DVP_FRM1_ADDR_UV,
	RKCIF_DVP_VIR_LINE_WIDTH,
	RKCIF_DVP_SET_SIZE,
	RKCIF_DVP_SCL_CTRL,
	RKCIF_DVP_CROP,
	RKCIF_DVP_FRAME_STATUS,
	RKCIF_DVP_LAST_LINE,
	RKCIF_DVP_LAST_PIX,
	RKCIF_DVP_REGISTER_MAX
};

enum rkcif_mipi_register_index {
	RKCIF_MIPI_CTRL,
	RKCIF_MIPI_INTEN,
	RKCIF_MIPI_INTSTAT,
	RKCIF_MIPI_REGISTER_MAX
};

enum rkcif_mipi_id_register_index {
	RKCIF_MIPI_CTRL0,
	RKCIF_MIPI_CTRL1,
	RKCIF_MIPI_FRAME0_ADDR_Y,
	RKCIF_MIPI_FRAME0_ADDR_UV,
	RKCIF_MIPI_FRAME0_VLW_Y,
	RKCIF_MIPI_FRAME0_VLW_UV,
	RKCIF_MIPI_FRAME1_ADDR_Y,
	RKCIF_MIPI_FRAME1_ADDR_UV,
	RKCIF_MIPI_FRAME1_VLW_Y,
	RKCIF_MIPI_FRAME1_VLW_UV,
	RKCIF_MIPI_CROP_START,
	RKCIF_MIPI_ID_REGISTER_MAX
};

#endif