Commit | Line | Data |
---|---|---|
4bf8e196 LP |
1 | /* |
2 | * rcar_du_plane.h -- R-Car Display Unit Planes | |
3 | * | |
36d50464 | 4 | * Copyright (C) 2013-2014 Renesas Electronics Corporation |
4bf8e196 LP |
5 | * |
6 | * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
12 | */ | |
13 | ||
14 | #ifndef __RCAR_DU_PLANE_H__ | |
15 | #define __RCAR_DU_PLANE_H__ | |
16 | ||
ae425b6a LP |
17 | #include <drm/drmP.h> |
18 | #include <drm/drm_crtc.h> | |
19 | ||
4bf8e196 | 20 | struct rcar_du_format_info; |
cb2025d2 | 21 | struct rcar_du_group; |
4bf8e196 | 22 | |
917de180 LP |
23 | /* The RCAR DU has 8 hardware planes, shared between primary and overlay planes. |
24 | * As using overlay planes requires at least one of the CRTCs being enabled, no | |
25 | * more than 7 overlay planes can be available. We thus create 1 primary plane | |
26 | * per CRTC and 7 overlay planes, for a total of up to 9 KMS planes. | |
4bf8e196 | 27 | */ |
917de180 | 28 | #define RCAR_DU_NUM_KMS_PLANES 9 |
4bf8e196 | 29 | #define RCAR_DU_NUM_HW_PLANES 8 |
4bf8e196 | 30 | |
af8ad962 LP |
31 | enum rcar_du_plane_source { |
32 | RCAR_DU_PLANE_MEMORY, | |
33 | RCAR_DU_PLANE_VSPD0, | |
34 | RCAR_DU_PLANE_VSPD1, | |
35 | }; | |
36 | ||
4bf8e196 | 37 | struct rcar_du_plane { |
917de180 | 38 | struct drm_plane plane; |
cb2025d2 | 39 | struct rcar_du_group *group; |
4bf8e196 LP |
40 | }; |
41 | ||
5ee5a81d LP |
42 | static inline struct rcar_du_plane *to_rcar_plane(struct drm_plane *plane) |
43 | { | |
44 | return container_of(plane, struct rcar_du_plane, plane); | |
45 | } | |
46 | ||
0855c682 LP |
47 | /** |
48 | * struct rcar_du_plane_state - Driver-specific plane state | |
49 | * @state: base DRM plane state | |
50 | * @format: information about the pixel format used by the plane | |
51 | * @hwindex: 0-based hardware plane index, -1 means unused | |
52 | * @alpha: value of the plane alpha property | |
53 | * @colorkey: value of the plane colorkey property | |
0855c682 | 54 | */ |
4407cc02 LP |
55 | struct rcar_du_plane_state { |
56 | struct drm_plane_state state; | |
57 | ||
5bfcbce0 | 58 | const struct rcar_du_format_info *format; |
0855c682 | 59 | int hwindex; |
af8ad962 | 60 | enum rcar_du_plane_source source; |
5bfcbce0 | 61 | |
4407cc02 LP |
62 | unsigned int alpha; |
63 | unsigned int colorkey; | |
4407cc02 LP |
64 | }; |
65 | ||
66 | static inline struct rcar_du_plane_state * | |
ec69a406 | 67 | to_rcar_plane_state(struct drm_plane_state *state) |
4407cc02 LP |
68 | { |
69 | return container_of(state, struct rcar_du_plane_state, state); | |
70 | } | |
71 | ||
ab334e13 LP |
72 | int rcar_du_atomic_check_planes(struct drm_device *dev, |
73 | struct drm_atomic_state *state); | |
74 | ||
cb2025d2 | 75 | int rcar_du_planes_init(struct rcar_du_group *rgrp); |
7fe99fda | 76 | |
6d62ef3a LP |
77 | void __rcar_du_plane_setup(struct rcar_du_group *rgrp, |
78 | const struct rcar_du_plane_state *state); | |
79 | ||
80 | static inline void rcar_du_plane_setup(struct rcar_du_plane *plane) | |
81 | { | |
82 | struct rcar_du_plane_state *state = | |
83 | to_rcar_plane_state(plane->plane.state); | |
84 | ||
85 | return __rcar_du_plane_setup(plane->group, state); | |
86 | } | |
4bf8e196 LP |
87 | |
88 | #endif /* __RCAR_DU_PLANE_H__ */ |