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; | |
28 | ||
29 | struct vsp1_platform_data; | |
629bb6d4 | 30 | struct vsp1_bru; |
5cdf5741 | 31 | struct vsp1_hsit; |
26e0ca22 | 32 | struct vsp1_lif; |
989af883 | 33 | struct vsp1_lut; |
26e0ca22 | 34 | struct vsp1_rwpf; |
a626e64e | 35 | struct vsp1_sru; |
26e0ca22 LP |
36 | struct vsp1_uds; |
37 | ||
7005a817 LP |
38 | #define VSP1_MAX_RPF 5 |
39 | #define VSP1_MAX_UDS 3 | |
40 | #define VSP1_MAX_WPF 4 | |
26e0ca22 | 41 | |
32d17597 LP |
42 | #define VSP1_HAS_LIF (1 << 0) |
43 | #define VSP1_HAS_LUT (1 << 1) | |
44 | #define VSP1_HAS_SRU (1 << 2) | |
45 | ||
46 | struct vsp1_platform_data { | |
47 | unsigned int features; | |
48 | unsigned int rpf_count; | |
49 | unsigned int uds_count; | |
50 | unsigned int wpf_count; | |
51 | }; | |
52 | ||
26e0ca22 LP |
53 | struct vsp1_device { |
54 | struct device *dev; | |
32d17597 | 55 | struct vsp1_platform_data pdata; |
26e0ca22 LP |
56 | |
57 | void __iomem *mmio; | |
58 | struct clk *clock; | |
59 | ||
60 | struct mutex lock; | |
61 | int ref_count; | |
62 | ||
629bb6d4 | 63 | struct vsp1_bru *bru; |
5cdf5741 LP |
64 | struct vsp1_hsit *hsi; |
65 | struct vsp1_hsit *hst; | |
26e0ca22 | 66 | struct vsp1_lif *lif; |
989af883 | 67 | struct vsp1_lut *lut; |
7005a817 | 68 | struct vsp1_rwpf *rpf[VSP1_MAX_RPF]; |
a626e64e | 69 | struct vsp1_sru *sru; |
7005a817 LP |
70 | struct vsp1_uds *uds[VSP1_MAX_UDS]; |
71 | struct vsp1_rwpf *wpf[VSP1_MAX_WPF]; | |
26e0ca22 LP |
72 | |
73 | struct list_head entities; | |
9d40637a | 74 | struct list_head videos; |
26e0ca22 LP |
75 | |
76 | struct v4l2_device v4l2_dev; | |
77 | struct media_device media_dev; | |
78 | }; | |
79 | ||
4c16d6a0 | 80 | int vsp1_device_get(struct vsp1_device *vsp1); |
26e0ca22 LP |
81 | void vsp1_device_put(struct vsp1_device *vsp1); |
82 | ||
83 | static inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg) | |
84 | { | |
85 | return ioread32(vsp1->mmio + reg); | |
86 | } | |
87 | ||
88 | static inline void vsp1_write(struct vsp1_device *vsp1, u32 reg, u32 data) | |
89 | { | |
90 | iowrite32(data, vsp1->mmio + reg); | |
91 | } | |
92 | ||
93 | #endif /* __VSP1_H__ */ |