123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*
- * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
- * Author: Jacob Chen <jacob-chen@iotwrt.com>
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
- #ifndef __RGA_H__
- #define __RGA_H__
- #include <linux/platform_device.h>
- #include <media/videobuf2-v4l2.h>
- #include <media/v4l2-ctrls.h>
- #include <media/v4l2-device.h>
- #define RGA_NAME "rockchip-rga"
- struct rga_fmt {
- u32 fourcc;
- int depth;
- u8 uv_factor;
- u8 y_div;
- u8 x_div;
- u8 color_swap;
- u8 hw_format;
- };
- struct rga_frame {
- /* Original dimensions */
- u32 width;
- u32 height;
- u32 colorspace;
- /* Crop */
- struct v4l2_rect crop;
- /* Image format */
- struct rga_fmt *fmt;
- /* Variables that can calculated once and reused */
- u32 stride;
- u32 size;
- };
- struct rockchip_rga_version {
- u32 major;
- u32 minor;
- };
- struct rga_ctx {
- struct v4l2_fh fh;
- struct rockchip_rga *rga;
- struct rga_frame in;
- struct rga_frame out;
- struct v4l2_ctrl_handler ctrl_handler;
- /* Control values */
- u32 op;
- u32 hflip;
- u32 vflip;
- u32 rotate;
- u32 fill_color;
- };
- struct rockchip_rga {
- struct v4l2_device v4l2_dev;
- struct v4l2_m2m_dev *m2m_dev;
- struct video_device *vfd;
- struct device *dev;
- struct regmap *grf;
- void __iomem *regs;
- struct clk *sclk;
- struct clk *aclk;
- struct clk *hclk;
- struct rockchip_rga_version version;
- /* vfd lock */
- struct mutex mutex;
- /* ctrl parm lock */
- spinlock_t ctrl_lock;
- struct rga_ctx *curr;
- dma_addr_t cmdbuf_phy;
- void *cmdbuf_virt;
- unsigned int *src_mmu_pages;
- unsigned int *dst_mmu_pages;
- };
- struct rga_frame *rga_get_frame(struct rga_ctx *ctx, enum v4l2_buf_type type);
- /* RGA Buffers Manage */
- extern const struct vb2_ops rga_qops;
- void rga_buf_map(struct vb2_buffer *vb);
- /* RGA Hardware */
- static inline void rga_write(struct rockchip_rga *rga, u32 reg, u32 value)
- {
- writel(value, rga->regs + reg);
- };
- static inline u32 rga_read(struct rockchip_rga *rga, u32 reg)
- {
- return readl(rga->regs + reg);
- };
- static inline void rga_mod(struct rockchip_rga *rga, u32 reg, u32 val, u32 mask)
- {
- u32 temp = rga_read(rga, reg) & ~(mask);
- temp |= val & mask;
- rga_write(rga, reg, temp);
- };
- void rga_hw_start(struct rockchip_rga *rga);
- #endif
|