Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[cris-mirror.git] / drivers / media / platform / rockchip / rga / rga.h
blob5d43e7ea88af445b785de14a4499cfc6f41d454d
1 /*
2 * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
3 * Author: Jacob Chen <jacob-chen@iotwrt.com>
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 #ifndef __RGA_H__
15 #define __RGA_H__
17 #include <linux/platform_device.h>
18 #include <media/videobuf2-v4l2.h>
19 #include <media/v4l2-ctrls.h>
20 #include <media/v4l2-device.h>
22 #define RGA_NAME "rockchip-rga"
24 struct rga_fmt {
25 u32 fourcc;
26 int depth;
27 u8 uv_factor;
28 u8 y_div;
29 u8 x_div;
30 u8 color_swap;
31 u8 hw_format;
34 struct rga_frame {
35 /* Original dimensions */
36 u32 width;
37 u32 height;
38 u32 colorspace;
40 /* Crop */
41 struct v4l2_rect crop;
43 /* Image format */
44 struct rga_fmt *fmt;
46 /* Variables that can calculated once and reused */
47 u32 stride;
48 u32 size;
51 struct rockchip_rga_version {
52 u32 major;
53 u32 minor;
56 struct rga_ctx {
57 struct v4l2_fh fh;
58 struct rockchip_rga *rga;
59 struct rga_frame in;
60 struct rga_frame out;
61 struct v4l2_ctrl_handler ctrl_handler;
63 /* Control values */
64 u32 op;
65 u32 hflip;
66 u32 vflip;
67 u32 rotate;
68 u32 fill_color;
71 struct rockchip_rga {
72 struct v4l2_device v4l2_dev;
73 struct v4l2_m2m_dev *m2m_dev;
74 struct video_device *vfd;
76 struct device *dev;
77 struct regmap *grf;
78 void __iomem *regs;
79 struct clk *sclk;
80 struct clk *aclk;
81 struct clk *hclk;
82 struct rockchip_rga_version version;
84 /* vfd lock */
85 struct mutex mutex;
86 /* ctrl parm lock */
87 spinlock_t ctrl_lock;
89 wait_queue_head_t irq_queue;
91 struct rga_ctx *curr;
92 dma_addr_t cmdbuf_phy;
93 void *cmdbuf_virt;
94 unsigned int *src_mmu_pages;
95 unsigned int *dst_mmu_pages;
98 struct rga_frame *rga_get_frame(struct rga_ctx *ctx, enum v4l2_buf_type type);
100 /* RGA Buffers Manage */
101 extern const struct vb2_ops rga_qops;
102 void rga_buf_map(struct vb2_buffer *vb);
104 /* RGA Hardware */
105 static inline void rga_write(struct rockchip_rga *rga, u32 reg, u32 value)
107 writel(value, rga->regs + reg);
110 static inline u32 rga_read(struct rockchip_rga *rga, u32 reg)
112 return readl(rga->regs + reg);
115 static inline void rga_mod(struct rockchip_rga *rga, u32 reg, u32 val, u32 mask)
117 u32 temp = rga_read(rga, reg) & ~(mask);
119 temp |= val & mask;
120 rga_write(rga, reg, temp);
123 void rga_hw_start(struct rockchip_rga *rga);
125 #endif