diff options
Diffstat (limited to 'drivers/gpu/drm/sun4i/sun4i_frontend.h')
-rw-r--r-- | drivers/gpu/drm/sun4i/sun4i_frontend.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_frontend.h b/drivers/gpu/drm/sun4i/sun4i_frontend.h new file mode 100644 index 000000000000..02661ce81f3e --- /dev/null +++ b/drivers/gpu/drm/sun4i/sun4i_frontend.h | |||
@@ -0,0 +1,99 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0+ | ||
2 | /* | ||
3 | * Copyright (C) 2017 Free Electrons | ||
4 | * Maxime Ripard <maxime.ripard@free-electrons.com> | ||
5 | */ | ||
6 | |||
7 | #ifndef _SUN4I_FRONTEND_H_ | ||
8 | #define _SUN4I_FRONTEND_H_ | ||
9 | |||
10 | #include <linux/list.h> | ||
11 | |||
12 | #define SUN4I_FRONTEND_EN_REG 0x000 | ||
13 | #define SUN4I_FRONTEND_EN_EN BIT(0) | ||
14 | |||
15 | #define SUN4I_FRONTEND_FRM_CTRL_REG 0x004 | ||
16 | #define SUN4I_FRONTEND_FRM_CTRL_COEF_ACCESS_CTRL BIT(23) | ||
17 | #define SUN4I_FRONTEND_FRM_CTRL_FRM_START BIT(16) | ||
18 | #define SUN4I_FRONTEND_FRM_CTRL_COEF_RDY BIT(1) | ||
19 | #define SUN4I_FRONTEND_FRM_CTRL_REG_RDY BIT(0) | ||
20 | |||
21 | #define SUN4I_FRONTEND_BYPASS_REG 0x008 | ||
22 | #define SUN4I_FRONTEND_BYPASS_CSC_EN BIT(1) | ||
23 | |||
24 | #define SUN4I_FRONTEND_BUF_ADDR0_REG 0x020 | ||
25 | |||
26 | #define SUN4I_FRONTEND_LINESTRD0_REG 0x040 | ||
27 | |||
28 | #define SUN4I_FRONTEND_INPUT_FMT_REG 0x04c | ||
29 | #define SUN4I_FRONTEND_INPUT_FMT_DATA_MOD(mod) ((mod) << 8) | ||
30 | #define SUN4I_FRONTEND_INPUT_FMT_DATA_FMT(fmt) ((fmt) << 4) | ||
31 | #define SUN4I_FRONTEND_INPUT_FMT_PS(ps) (ps) | ||
32 | |||
33 | #define SUN4I_FRONTEND_OUTPUT_FMT_REG 0x05c | ||
34 | #define SUN4I_FRONTEND_OUTPUT_FMT_DATA_FMT(fmt) (fmt) | ||
35 | |||
36 | #define SUN4I_FRONTEND_CH0_INSIZE_REG 0x100 | ||
37 | #define SUN4I_FRONTEND_INSIZE(h, w) ((((h) - 1) << 16) | (((w) - 1))) | ||
38 | |||
39 | #define SUN4I_FRONTEND_CH0_OUTSIZE_REG 0x104 | ||
40 | #define SUN4I_FRONTEND_OUTSIZE(h, w) ((((h) - 1) << 16) | (((w) - 1))) | ||
41 | |||
42 | #define SUN4I_FRONTEND_CH0_HORZFACT_REG 0x108 | ||
43 | #define SUN4I_FRONTEND_HORZFACT(i, f) (((i) << 16) | (f)) | ||
44 | |||
45 | #define SUN4I_FRONTEND_CH0_VERTFACT_REG 0x10c | ||
46 | #define SUN4I_FRONTEND_VERTFACT(i, f) (((i) << 16) | (f)) | ||
47 | |||
48 | #define SUN4I_FRONTEND_CH0_HORZPHASE_REG 0x110 | ||
49 | #define SUN4I_FRONTEND_CH0_VERTPHASE0_REG 0x114 | ||
50 | #define SUN4I_FRONTEND_CH0_VERTPHASE1_REG 0x118 | ||
51 | |||
52 | #define SUN4I_FRONTEND_CH1_INSIZE_REG 0x200 | ||
53 | #define SUN4I_FRONTEND_CH1_OUTSIZE_REG 0x204 | ||
54 | #define SUN4I_FRONTEND_CH1_HORZFACT_REG 0x208 | ||
55 | #define SUN4I_FRONTEND_CH1_VERTFACT_REG 0x20c | ||
56 | |||
57 | #define SUN4I_FRONTEND_CH1_HORZPHASE_REG 0x210 | ||
58 | #define SUN4I_FRONTEND_CH1_VERTPHASE0_REG 0x214 | ||
59 | #define SUN4I_FRONTEND_CH1_VERTPHASE1_REG 0x218 | ||
60 | |||
61 | #define SUN4I_FRONTEND_CH0_HORZCOEF0_REG(i) (0x400 + i * 4) | ||
62 | #define SUN4I_FRONTEND_CH0_HORZCOEF1_REG(i) (0x480 + i * 4) | ||
63 | #define SUN4I_FRONTEND_CH0_VERTCOEF_REG(i) (0x500 + i * 4) | ||
64 | #define SUN4I_FRONTEND_CH1_HORZCOEF0_REG(i) (0x600 + i * 4) | ||
65 | #define SUN4I_FRONTEND_CH1_HORZCOEF1_REG(i) (0x680 + i * 4) | ||
66 | #define SUN4I_FRONTEND_CH1_VERTCOEF_REG(i) (0x700 + i * 4) | ||
67 | |||
68 | struct clk; | ||
69 | struct device_node; | ||
70 | struct drm_plane; | ||
71 | struct regmap; | ||
72 | struct reset_control; | ||
73 | |||
74 | struct sun4i_frontend { | ||
75 | struct list_head list; | ||
76 | struct device *dev; | ||
77 | struct device_node *node; | ||
78 | |||
79 | struct clk *bus_clk; | ||
80 | struct clk *mod_clk; | ||
81 | struct clk *ram_clk; | ||
82 | struct regmap *regs; | ||
83 | struct reset_control *reset; | ||
84 | }; | ||
85 | |||
86 | extern const struct of_device_id sun4i_frontend_of_table[]; | ||
87 | |||
88 | int sun4i_frontend_init(struct sun4i_frontend *frontend); | ||
89 | void sun4i_frontend_exit(struct sun4i_frontend *frontend); | ||
90 | int sun4i_frontend_enable(struct sun4i_frontend *frontend); | ||
91 | |||
92 | void sun4i_frontend_update_buffer(struct sun4i_frontend *frontend, | ||
93 | struct drm_plane *plane); | ||
94 | void sun4i_frontend_update_coord(struct sun4i_frontend *frontend, | ||
95 | struct drm_plane *plane); | ||
96 | int sun4i_frontend_update_formats(struct sun4i_frontend *frontend, | ||
97 | struct drm_plane *plane, uint32_t out_fmt); | ||
98 | |||
99 | #endif /* _SUN4I_FRONTEND_H_ */ | ||