Commit | Line | Data |
---|---|---|
96f60e37 RK |
1 | /* |
2 | * Copyright (C) 2012 Russell King | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | */ | |
8 | #ifndef ARMADA_CRTC_H | |
9 | #define ARMADA_CRTC_H | |
10 | ||
11 | struct armada_gem_object; | |
12 | ||
13 | struct armada_regs { | |
14 | uint32_t offset; | |
15 | uint32_t mask; | |
16 | uint32_t val; | |
17 | }; | |
18 | ||
19 | #define armada_reg_queue_mod(_r, _i, _v, _m, _o) \ | |
20 | do { \ | |
21 | struct armada_regs *__reg = _r; \ | |
22 | __reg[_i].offset = _o; \ | |
23 | __reg[_i].mask = ~(_m); \ | |
24 | __reg[_i].val = _v; \ | |
25 | _i++; \ | |
26 | } while (0) | |
27 | ||
28 | #define armada_reg_queue_set(_r, _i, _v, _o) \ | |
29 | armada_reg_queue_mod(_r, _i, _v, ~0, _o) | |
30 | ||
31 | #define armada_reg_queue_end(_r, _i) \ | |
32 | armada_reg_queue_mod(_r, _i, 0, 0, ~0) | |
33 | ||
34 | struct armada_frame_work; | |
35 | ||
36 | struct armada_crtc { | |
37 | struct drm_crtc crtc; | |
38 | unsigned num; | |
39 | void __iomem *base; | |
40 | struct clk *clk; | |
41 | struct { | |
42 | uint32_t spu_v_h_total; | |
43 | uint32_t spu_v_porch; | |
44 | uint32_t spu_adv_reg; | |
45 | } v[2]; | |
46 | bool interlaced; | |
47 | uint8_t csc_yuv_mode; | |
48 | uint8_t csc_rgb_mode; | |
49 | ||
50 | struct drm_plane *plane; | |
51 | ||
52 | int dpms; | |
53 | uint32_t cfg_dumb_ctrl; | |
54 | uint32_t dumb_ctrl; | |
55 | uint32_t spu_iopad_ctrl; | |
56 | ||
57 | wait_queue_head_t frame_wait; | |
58 | struct armada_frame_work *frame_work; | |
59 | ||
60 | spinlock_t irq_lock; | |
61 | uint32_t irq_ena; | |
62 | struct list_head vbl_list; | |
63 | }; | |
64 | #define drm_to_armada_crtc(c) container_of(c, struct armada_crtc, crtc) | |
65 | ||
66 | int armada_drm_crtc_create(struct drm_device *, unsigned, struct resource *); | |
67 | void armada_drm_crtc_gamma_set(struct drm_crtc *, u16, u16, u16, int); | |
68 | void armada_drm_crtc_gamma_get(struct drm_crtc *, u16 *, u16 *, u16 *, int); | |
69 | void armada_drm_crtc_irq(struct armada_crtc *, u32); | |
70 | void armada_drm_crtc_disable_irq(struct armada_crtc *, u32); | |
71 | void armada_drm_crtc_enable_irq(struct armada_crtc *, u32); | |
72 | void armada_drm_crtc_update_regs(struct armada_crtc *, struct armada_regs *); | |
73 | ||
74 | #endif |