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
|
/* SPDX-License-Identifier: GPL-2.0-only
*
* Copyright (c) 2021 StarFive Technology Co., Ltd
* Author: StarFive <StarFive@starfivetech.com>
*/
#ifndef _STARFIVE_DRM_CRTC_H
#define _STARFIVE_DRM_CRTC_H
#include <drm/drm_crtc.h>
enum COLOR_FORMAT {
COLOR_YUV422_UYVY = 0, //00={Y1,V0,Y0,U0}
COLOR_YUV422_VYUY = 1, //01={Y1,U0,Y0,V0}
COLOR_YUV422_YUYV = 2, //10={V0,Y1,U0,Y0}
COLOR_YUV422_YVYU = 3, //11={U0,Y1,V0,Y0}
COLOR_YUV420P,
COLOR_YUV420_NV12,
COLOR_YUV420_NV21,
COLOR_RGB888_ARGB,
COLOR_RGB888_ABGR,
COLOR_RGB888_RGBA,
COLOR_RGB888_BGRA,
COLOR_RGB565,
};
struct starfive_crtc_state {
struct drm_crtc_state base;
};
#define to_starfive_crtc_state(s) \
container_of(s, struct starfive_crtc_state, base)
struct starfive_crtc {
struct drm_crtc crtc;
struct device *dev;
struct drm_device *drm_dev;
bool is_enabled;
void __iomem *base_clk; //0x12240000
void __iomem *base_rst; //0x12250000
void __iomem *base_syscfg; //0x12260000
void __iomem *base_vpp0; //0x12040000
void __iomem *base_vpp1; //0x12080000
void __iomem *base_vpp2; //0x120c0000
void __iomem *base_lcdc; //0x12000000
struct clk *clk_disp_axi;
struct clk *clk_vout_src;
struct reset_control *rst_disp_axi;
struct reset_control *rst_vout_src;
int lcdc_irq;
int vpp0_irq;
int vpp1_irq;
int vpp2_irq;
struct pp_mode *pp;
int winNum;
int pp_conn_lcdc;
unsigned int ddr_format;
bool ddr_format_change;
enum COLOR_FORMAT vpp_format;
int lcdcfmt;
/* one time only one process allowed to config the register */
spinlock_t reg_lock;
struct drm_plane *planes;
u8 lut_r[256];
u8 lut_g[256];
u8 lut_b[256];
bool gamma_lut;
int encoder_type;
dma_addr_t dma_addr;
bool dma_addr_change;
};
#define to_starfive_crtc(x) container_of(x, struct starfive_crtc, crtc)
extern struct drm_encoder *
starfive_head_atom_get_encoder(struct starfive_crtc *sf_crtc);
void starfive_crtc_hw_config_simple(struct starfive_crtc *starfive_crtc);
#endif /* _STARFIVE_DRM_CRTC_H */
|