Commit | Line | Data |
---|---|---|
4bf8e196 LP |
1 | /* |
2 | * rcar_du_crtc.h -- R-Car Display Unit CRTCs | |
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_CRTC_H__ | |
15 | #define __RCAR_DU_CRTC_H__ | |
16 | ||
17 | #include <linux/mutex.h> | |
36693f3c | 18 | #include <linux/wait.h> |
4bf8e196 LP |
19 | |
20 | #include <drm/drmP.h> | |
21 | #include <drm/drm_crtc.h> | |
22 | ||
cb2025d2 | 23 | struct rcar_du_group; |
6d62ef3a | 24 | struct rcar_du_vsp; |
4bf8e196 | 25 | |
bce9936a LP |
26 | /** |
27 | * struct rcar_du_crtc - the CRTC, representing a DU superposition processor | |
28 | * @crtc: base DRM CRTC | |
29 | * @clock: the CRTC functional clock | |
30 | * @extclock: external pixel dot clock (optional) | |
31 | * @mmio_offset: offset of the CRTC registers in the DU MMIO block | |
32 | * @index: CRTC software and hardware index | |
33 | * @started: whether the CRTC has been started and is running | |
34 | * @event: event to post when the pending page flip completes | |
35 | * @flip_wait: wait queue used to signal page flip completion | |
36 | * @outputs: bitmask of the outputs (enum rcar_du_output) driven by this CRTC | |
bce9936a LP |
37 | * @group: CRTC group this CRTC belongs to |
38 | */ | |
4bf8e196 LP |
39 | struct rcar_du_crtc { |
40 | struct drm_crtc crtc; | |
41 | ||
f66ee304 | 42 | struct clk *clock; |
1b30dbde | 43 | struct clk *extclock; |
4bf8e196 LP |
44 | unsigned int mmio_offset; |
45 | unsigned int index; | |
46 | bool started; | |
47 | ||
48 | struct drm_pending_vblank_event *event; | |
36693f3c LP |
49 | wait_queue_head_t flip_wait; |
50 | ||
4bf8e196 | 51 | unsigned int outputs; |
4bf8e196 | 52 | |
cb2025d2 | 53 | struct rcar_du_group *group; |
6d62ef3a | 54 | struct rcar_du_vsp *vsp; |
4bf8e196 LP |
55 | }; |
56 | ||
90374b5c LP |
57 | #define to_rcar_crtc(c) container_of(c, struct rcar_du_crtc, crtc) |
58 | ||
2378ad12 LP |
59 | enum rcar_du_output { |
60 | RCAR_DU_OUTPUT_DPAD0, | |
61 | RCAR_DU_OUTPUT_DPAD1, | |
62 | RCAR_DU_OUTPUT_LVDS0, | |
63 | RCAR_DU_OUTPUT_LVDS1, | |
64 | RCAR_DU_OUTPUT_TCON, | |
65 | RCAR_DU_OUTPUT_MAX, | |
66 | }; | |
67 | ||
cb2025d2 | 68 | int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int index); |
4bf8e196 | 69 | void rcar_du_crtc_enable_vblank(struct rcar_du_crtc *rcrtc, bool enable); |
4bf8e196 LP |
70 | void rcar_du_crtc_suspend(struct rcar_du_crtc *rcrtc); |
71 | void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc); | |
72 | ||
ef67a902 LP |
73 | void rcar_du_crtc_route_output(struct drm_crtc *crtc, |
74 | enum rcar_du_output output); | |
4bf8e196 LP |
75 | |
76 | #endif /* __RCAR_DU_CRTC_H__ */ |