summaryrefslogtreecommitdiff
path: root/bsp/rockchip/dm/graphic/framebuffer/fb-vop2-vp.h
blob: 79796cf0ebf8e5049a2f55d13592f53ff1510706 (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
/*
 * 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__ */