Commit | Line | Data |
---|---|---|
26e0ca22 LP |
1 | /* |
2 | * vsp1.h -- R-Car VSP1 Driver | |
3 | * | |
8a1edc55 | 4 | * Copyright (C) 2013-2014 Renesas Electronics Corporation |
26e0ca22 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 | #ifndef __VSP1_H__ | |
14 | #define __VSP1_H__ | |
15 | ||
16 | #include <linux/io.h> | |
17 | #include <linux/list.h> | |
18 | #include <linux/mutex.h> | |
26e0ca22 LP |
19 | |
20 | #include <media/media-device.h> | |
21 | #include <media/v4l2-device.h> | |
22 | #include <media/v4l2-subdev.h> | |
23 | ||
24 | #include "vsp1_regs.h" | |
25 | ||
26 | struct clk; | |
27 | struct device; | |
94fcdf82 | 28 | struct rcar_fcp_device; |
26e0ca22 | 29 | |
f3af9572 | 30 | struct vsp1_drm; |
1517b039 | 31 | struct vsp1_entity; |
26e0ca22 | 32 | struct vsp1_platform_data; |
629bb6d4 | 33 | struct vsp1_bru; |
1fd87bf2 | 34 | struct vsp1_clu; |
5cdf5741 | 35 | struct vsp1_hsit; |
26e0ca22 | 36 | struct vsp1_lif; |
989af883 | 37 | struct vsp1_lut; |
26e0ca22 | 38 | struct vsp1_rwpf; |
a626e64e | 39 | struct vsp1_sru; |
26e0ca22 LP |
40 | struct vsp1_uds; |
41 | ||
7005a817 LP |
42 | #define VSP1_MAX_RPF 5 |
43 | #define VSP1_MAX_UDS 3 | |
44 | #define VSP1_MAX_WPF 4 | |
26e0ca22 | 45 | |
32d17597 LP |
46 | #define VSP1_HAS_LIF (1 << 0) |
47 | #define VSP1_HAS_LUT (1 << 1) | |
48 | #define VSP1_HAS_SRU (1 << 2) | |
f74be412 | 49 | #define VSP1_HAS_BRU (1 << 3) |
1fd87bf2 | 50 | #define VSP1_HAS_CLU (1 << 4) |
894dde5c LP |
51 | #define VSP1_HAS_WPF_VFLIP (1 << 5) |
52 | #define VSP1_HAS_WPF_HFLIP (1 << 6) | |
32d17597 | 53 | |
5aa2eb3c LP |
54 | struct vsp1_device_info { |
55 | u32 version; | |
47b4bafd | 56 | const char *model; |
30276a73 | 57 | unsigned int gen; |
32d17597 LP |
58 | unsigned int features; |
59 | unsigned int rpf_count; | |
60 | unsigned int uds_count; | |
61 | unsigned int wpf_count; | |
a96c5fa4 | 62 | unsigned int num_bru_inputs; |
f2ed459d | 63 | bool uapi; |
32d17597 LP |
64 | }; |
65 | ||
26e0ca22 LP |
66 | struct vsp1_device { |
67 | struct device *dev; | |
5aa2eb3c | 68 | const struct vsp1_device_info *info; |
47b4bafd | 69 | u32 version; |
26e0ca22 LP |
70 | |
71 | void __iomem *mmio; | |
94fcdf82 | 72 | struct rcar_fcp_device *fcp; |
26e0ca22 | 73 | |
629bb6d4 | 74 | struct vsp1_bru *bru; |
1fd87bf2 | 75 | struct vsp1_clu *clu; |
5cdf5741 LP |
76 | struct vsp1_hsit *hsi; |
77 | struct vsp1_hsit *hst; | |
26e0ca22 | 78 | struct vsp1_lif *lif; |
989af883 | 79 | struct vsp1_lut *lut; |
7005a817 | 80 | struct vsp1_rwpf *rpf[VSP1_MAX_RPF]; |
a626e64e | 81 | struct vsp1_sru *sru; |
7005a817 LP |
82 | struct vsp1_uds *uds[VSP1_MAX_UDS]; |
83 | struct vsp1_rwpf *wpf[VSP1_MAX_WPF]; | |
26e0ca22 LP |
84 | |
85 | struct list_head entities; | |
9d40637a | 86 | struct list_head videos; |
26e0ca22 LP |
87 | |
88 | struct v4l2_device v4l2_dev; | |
89 | struct media_device media_dev; | |
babca007 | 90 | struct media_entity_operations media_ops; |
1517b039 | 91 | |
f3af9572 | 92 | struct vsp1_drm *drm; |
26e0ca22 LP |
93 | }; |
94 | ||
4c16d6a0 | 95 | int vsp1_device_get(struct vsp1_device *vsp1); |
26e0ca22 LP |
96 | void vsp1_device_put(struct vsp1_device *vsp1); |
97 | ||
1517b039 TS |
98 | int vsp1_reset_wpf(struct vsp1_device *vsp1, unsigned int index); |
99 | ||
26e0ca22 LP |
100 | static inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg) |
101 | { | |
102 | return ioread32(vsp1->mmio + reg); | |
103 | } | |
104 | ||
105 | static inline void vsp1_write(struct vsp1_device *vsp1, u32 reg, u32 data) | |
106 | { | |
107 | iowrite32(data, vsp1->mmio + reg); | |
108 | } | |
109 | ||
110 | #endif /* __VSP1_H__ */ |