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
|
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023-09-23 GuEe-GUI first version
*/
#ifndef __FB_VOP2_VP_H__
#define __FB_VOP2_VP_H__
#include "fb-vop2.h"
#include "rockchip-display.h"
#define VOP2FB_VP_STRIDE 0x100
#define VOP2_VP_DSP_CTRL 0xC00
#define VOP2_VP_DSP_BG 0xC2C
#define RK3568_VP0_PRE_SCAN_HTIMING 0xC30
#define RK3568_VP0_POST_DSP_HACT_INFO 0xC34
#define RK3568_VP0_POST_DSP_VACT_INFO 0xC38
#define RK3568_VP0_POST_SCL_FACTOR_YRGB 0xC3C
#define RK3568_VP0_POST_SCL_CTRL 0xC40
#define RK3568_VP0_POST_DSP_VACT_INFO_F1 0xC44
#define VOP2_VP_DSP_HTOTAL_HS_END 0xC48
#define VOP2_VP_DSP_HACT_ST_END 0xC4C
#define VOP2_VP_DSP_VTOTAL_VS_END 0xC50
#define VOP2_VP_DSP_VACT_ST_END 0xC54
#define VOP2_OVL_CTRL 0x600
#define VOP2_OVL_MODE_SEL_SHIFT 0
#define VOP2_OVL_LAYER_SEL 0x604
#define VOP2_OVL_PORT_SEL 0x608
#define RK3568_VP0_BG_MIX_CTRL 0x6E0
#define RK3568_BG_MIX_CTRL_MASK 0xff
#define RK3568_BG_MIX_CTRL_SHIFT 24
#define RK3568_OVL_LAYERSEL_REGDONE_IMD_SHIFT 28
#define RK3568_POST_HORIZONTAL_SCALEDOWN_EN_SHIFT 0
#define RK3568_POST_VERTICAL_SCALEDOWN_EN_SHIFT 1
#define RK3568_DSP_IF_EN 0x028
#define RK3568_DSP_IF_POL 0x030
#define RK3568_VP0_INT_EN 0x0A0
#define RK3568_VP0_INT_CLR 0x0A4
#define RK3568_VP0_INT_STATUS 0x0A8
#define VOP2_VP_STANDBY_SHIFT 31
#define VOP2_VP_OUT_MODE_SHIFT 0
#define VOP2_VP_OUT_MODE_MASK 0xf
#define VOP2_VP_PRE_DITHER_DOWN_EN_SHIFT 16
#define VOP2_VP_DITHER_DOWN_EN_SHIFT 17
#define RK3568_HDMI0_EN_SHIFT 1
#define RK3568_EDP0_EN_SHIFT 3
#define RK3568_MIPI0_EN_SHIFT 4
#define RK3568_LVDS0_EN_SHIFT 5
#define RK3568_RGB_EN_SHIFT 0
#define RK3568_MIPI1_EN_SHIFT 20
#define RK3568_LVDS1_EN_SHIFT 24
#define RK3568_HDMI0_MUX_SHIFT 10
#define RK3568_EDP0_MUX_SHIFT 14
#define RK3568_MIPI0_MUX_SHIFT 16
#define RK3568_LVDS0_MUX_SHIFT 18
#define RK3568_RGB_MUX_SHIFT 8
#define RK3568_MIPI1_MUX_SHIFT 21
#define RK3568_LVDS1_MUX_SHIFT 25
#define RK3568_IF_MUX_MASK 0x3
#define RK3568_IF_CTRL_REG_DONE_IMD_SHIFT 28
#define RK3568_IF_CRTL_MIPI_DCLK_POL_SHIFT 19
#define RK3568_IF_CTRL_MIPI_PIN_POL_SHIFT 16
#define RK3568_IF_CRTL_EDP_DCLK_POL_SHIFT 15
#define RK3568_IF_CTRL_EDP_PIN_POL_SHIFT 12
#define RK3568_IF_CRTL_HDMI_DCLK_POL_SHIFT 7
#define RK3568_IF_CRTL_HDMI_PIN_POL_SHIFT 4
#define RK3568_IF_CTRL_RGB_DCLK_POL_SHIFT 3
#define RK3568_IF_CTRL_RGB_PIN_POL_SHIFT 0
#define RK3568_IF_PIN_POL_MASK 0x7
#define RK3568_HSYNC_POSITIVE RT_BIT(0)
#define RK3568_VSYNC_POSITIVE RT_BIT(1)
#define VOP2_VP_FS_INTR RT_BIT(0)
#define VOP2_VP_FS_NEW_INTR RT_BIT(1)
#define VOP2_VP_POST_BUF_EMPTY_INTR RT_BIT(4)
#define VOP2_VP_FS_FIELD_INTR RT_BIT(5)
#define RK3568_SYS0_INT_EN 0x080
#define RK3568_SYS0_INT_CLR 0x084
#define RK3568_SYS0_INT_STATUS 0x088
#define RK3568_SYS1_INT_EN 0x090
#define RK3568_SYS1_INT_CLR 0x094
#define RK3568_SYS1_INT_STATUS 0x098
#define RK3568_SYS_BUS_ERROR_INTR RT_BIT(1)
#define RK3568_VP_INT_EN(vp_id) (RK3568_VP0_INT_EN + ((vp_id) * 0x10))
#define RK3568_VP_INT_CLR(vp_id) (RK3568_VP0_INT_CLR + ((vp_id) * 0x10))
#define RK3568_VP_INT_STATUS(vp_id) (RK3568_VP0_INT_STATUS + ((vp_id) * 0x10))
#define RK3576_MIPI0_IF_CTRL 0x180
#define RK3576_VP_OUT_MODE_P888 0
#define RK3568_VP_OUT_MODE_AAAA 15
rt_err_t vop2fb_vp_mode_set(struct vop2fb *vfb, rt_uint32_t vp_id,
const struct display_timing *tim);
void vop2fb_vp_irq_ctrl(struct vop2fb *vfb, rt_uint32_t vp_id, rt_bool_t enable);
rt_err_t vop2fb_vp_enable(struct vop2fb *vfb, rt_uint32_t vp_id, rt_bool_t enable);
void vop2fb_output_disable(struct vop2fb *vfb, enum vop2fb_output_if output_if);
rt_err_t vop2fb_vp_post_config(struct vop2fb *vfb, rt_uint32_t vp_id,
const struct display_timing *tim);
rt_err_t vop2fb_mipi_output_enable(struct vop2fb *vfb, rt_uint32_t vp_id, rt_bool_t enable);
rt_err_t vop2fb_overlay_init(struct vop2fb *vfb);
rt_err_t vop2fb_mix_alpha_set(struct vop2fb *vfb, rt_uint32_t mix_reg, rt_uint8_t alpha);
rt_err_t vop2fb_parse_port_planes(struct vop2fb *vfb, struct rt_ofw_node *vop_np,
rt_uint32_t vp_id);
#endif /* __FB_VOP2_VP_H__ */
|