]>
Commit | Line | Data |
---|---|---|
9bbf86fe BG |
1 | /* |
2 | * Copyright (C) STMicroelectronics SA 2014 | |
3 | * Author: Benjamin Gaignard <benjamin.gaignard@st.com> for STMicroelectronics. | |
4 | * License terms: GNU General Public License (GPL), version 2 | |
5 | */ | |
6 | ||
9e1f05b2 VA |
7 | #ifndef _STI_PLANE_H_ |
8 | #define _STI_PLANE_H_ | |
9bbf86fe BG |
9 | |
10 | #include <drm/drmP.h> | |
29d1dc62 VA |
11 | #include <drm/drm_atomic_helper.h> |
12 | #include <drm/drm_plane_helper.h> | |
13 | ||
871bcdfe VA |
14 | #define to_sti_plane(x) container_of(x, struct sti_plane, drm_plane) |
15 | ||
16 | #define STI_PLANE_TYPE_SHIFT 8 | |
17 | #define STI_PLANE_TYPE_MASK (~((1 << STI_PLANE_TYPE_SHIFT) - 1)) | |
18 | ||
19 | enum sti_plane_type { | |
20 | STI_GDP = 1 << STI_PLANE_TYPE_SHIFT, | |
21 | STI_VDP = 2 << STI_PLANE_TYPE_SHIFT, | |
22 | STI_CUR = 3 << STI_PLANE_TYPE_SHIFT, | |
23 | STI_BCK = 4 << STI_PLANE_TYPE_SHIFT | |
24 | }; | |
25 | ||
26 | enum sti_plane_id_of_type { | |
27 | STI_ID_0 = 0, | |
28 | STI_ID_1 = 1, | |
29 | STI_ID_2 = 2, | |
30 | STI_ID_3 = 3 | |
31 | }; | |
32 | ||
33 | enum sti_plane_desc { | |
34 | STI_GDP_0 = STI_GDP | STI_ID_0, | |
35 | STI_GDP_1 = STI_GDP | STI_ID_1, | |
36 | STI_GDP_2 = STI_GDP | STI_ID_2, | |
37 | STI_GDP_3 = STI_GDP | STI_ID_3, | |
38 | STI_HQVDP_0 = STI_VDP | STI_ID_0, | |
39 | STI_CURSOR = STI_CUR, | |
40 | STI_BACK = STI_BCK | |
41 | }; | |
42 | ||
29d1dc62 VA |
43 | enum sti_plane_status { |
44 | STI_PLANE_READY, | |
45 | STI_PLANE_UPDATED, | |
46 | STI_PLANE_DISABLING, | |
47 | STI_PLANE_FLUSHING, | |
48 | STI_PLANE_DISABLED, | |
49 | }; | |
50 | ||
a69e466b | 51 | #define FPS_LENGTH 128 |
bf8f9e4a VA |
52 | struct sti_fps_info { |
53 | bool output; | |
54 | unsigned int curr_frame_counter; | |
55 | unsigned int last_frame_counter; | |
56 | unsigned int curr_field_counter; | |
57 | unsigned int last_field_counter; | |
2c83f581 | 58 | ktime_t last_timestamp; |
bf8f9e4a VA |
59 | char fps_str[FPS_LENGTH]; |
60 | char fips_str[FPS_LENGTH]; | |
61 | }; | |
62 | ||
871bcdfe VA |
63 | /** |
64 | * STI plane structure | |
65 | * | |
66 | * @plane: drm plane it is bound to (if any) | |
871bcdfe | 67 | * @desc: plane type & id |
29d1dc62 | 68 | * @status: to know the status of the plane |
bf8f9e4a | 69 | * @fps_info: frame per second info |
871bcdfe VA |
70 | */ |
71 | struct sti_plane { | |
72 | struct drm_plane drm_plane; | |
871bcdfe | 73 | enum sti_plane_desc desc; |
29d1dc62 | 74 | enum sti_plane_status status; |
bf8f9e4a | 75 | struct sti_fps_info fps_info; |
871bcdfe VA |
76 | }; |
77 | ||
871bcdfe | 78 | const char *sti_plane_to_str(struct sti_plane *plane); |
bf8f9e4a VA |
79 | void sti_plane_update_fps(struct sti_plane *plane, |
80 | bool new_frame, | |
81 | bool new_field); | |
83af0a48 | 82 | |
29d1dc62 VA |
83 | void sti_plane_init_property(struct sti_plane *plane, |
84 | enum drm_plane_type type); | |
bbd1e3a5 | 85 | void sti_plane_reset(struct drm_plane *plane); |
9bbf86fe | 86 | #endif |