summaryrefslogtreecommitdiff
path: root/bsp/rockchip/dm/graphic/framebuffer/fb-vop1.h
blob: bd147b82189bb57c57a7f3f0c1d1d49d64d28e17 (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
/*
 * 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_VOP1_H__
#define __FB_VOP1_H__

#include <rthw.h>
#include <rtthread.h>
#include <rtdevice.h>

#define VOP1FB_CURSOR_W                 64
#define VOP1FB_CURSOR_H                 64
#define VOP1FB_OVERLAY_MAX              2

enum vop1fb_arch
{
    VOP1FB_ARCH_LITE = 0,
    VOP1FB_ARCH_BIG,
};

enum vop1fb_hw_format
{
    VOP1FB_FMT_ARGB8888 = 0,
    VOP1FB_FMT_RGB888,
    VOP1FB_FMT_RGB565,
};

struct vop1fb_win_regs
{
    rt_uint32_t ctrl0;
    rt_uint32_t vir;
    rt_uint32_t yrgb_mst;
    rt_uint32_t act_info;
    rt_uint32_t dsp_info;
    rt_uint32_t dsp_st;
    rt_uint32_t alpha;
};

struct vop1fb_win_desc
{
    const char *name;
    const struct vop1fb_win_regs *regs;
    rt_uint8_t z_order;
};

struct vop1fb_soc_data
{
    enum vop1fb_arch arch;
    const char *version;
    rt_size_t reg_size;
    rt_uint32_t cfg_done;
    const struct vop1fb_win_desc *primary;
    const struct vop1fb_win_desc *cursor;
    const struct vop1fb_win_desc *overlays;
    rt_size_t overlay_count;
};

struct vop1fb_plane_priv
{
    const struct vop1fb_win_desc *desc;
    rt_ubase_t dma_handle;
    rt_uint32_t pan_offset;
    rt_bool_t enabled;
};

struct vop1fb
{
    struct rt_graphic_device parent;

    const struct vop1fb_soc_data *soc;

    void *regs;
    rt_uint32_t display_w;
    rt_uint32_t display_h;

    rt_bool_t clk_enabled;
    struct rt_clk_array *clks;

    int irq;
    rt_atomic_t vsync;
    struct rt_semaphore vsync_sem;

    struct rt_graphic_plane *primary;
    struct rt_graphic_plane *cursor;
    struct rt_graphic_plane *overlays[VOP1FB_OVERLAY_MAX];
    rt_size_t overlay_count;

    rt_bool_t powered;
};

rt_uint32_t vop1fb_mode_to_hw(rt_uint32_t mode);
rt_uint32_t vop1fb_hw_to_bpp(rt_uint32_t hw_fmt);

#endif /* __FB_VOP1_H__ */