brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 8105bb2 Raw
146 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd4 * Author: Jacob Chen <jacob-chen@iotwrt.com>5 */6#ifndef __RGA_H__7#define __RGA_H__8 9#include <linux/platform_device.h>10#include <media/videobuf2-v4l2.h>11#include <media/v4l2-ctrls.h>12#include <media/v4l2-device.h>13 14#define RGA_NAME "rockchip-rga"15 16struct rga_fmt {17	u32 fourcc;18	int depth;19	u8 uv_factor;20	u8 y_div;21	u8 x_div;22	u8 color_swap;23	u8 hw_format;24};25 26struct rga_frame {27	/* Original dimensions */28	u32 width;29	u32 height;30	u32 colorspace;31 32	/* Crop */33	struct v4l2_rect crop;34 35	/* Image format */36	struct rga_fmt *fmt;37	struct v4l2_pix_format_mplane pix;38 39	/* Variables that can calculated once and reused */40	u32 stride;41	u32 size;42};43 44struct rga_dma_desc {45	u32 addr;46};47 48struct rockchip_rga_version {49	u32 major;50	u32 minor;51};52 53struct rga_ctx {54	struct v4l2_fh fh;55	struct rockchip_rga *rga;56	struct rga_frame in;57	struct rga_frame out;58	struct v4l2_ctrl_handler ctrl_handler;59 60	int osequence;61	int csequence;62 63	/* Control values */64	u32 op;65	u32 hflip;66	u32 vflip;67	u32 rotate;68	u32 fill_color;69};70 71struct rockchip_rga {72	struct v4l2_device v4l2_dev;73	struct v4l2_m2m_dev *m2m_dev;74	struct video_device *vfd;75 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;83 84	/* vfd lock */85	struct mutex mutex;86	/* ctrl parm lock */87	spinlock_t ctrl_lock;88 89	struct rga_ctx *curr;90	dma_addr_t cmdbuf_phy;91	void *cmdbuf_virt;92};93 94struct rga_addr_offset {95	unsigned int y_off;96	unsigned int u_off;97	unsigned int v_off;98};99 100struct rga_vb_buffer {101	struct vb2_v4l2_buffer vb_buf;102	struct list_head queue;103 104	/* RGA MMU mapping for this buffer */105	struct rga_dma_desc *dma_desc;106	dma_addr_t dma_desc_pa;107	size_t n_desc;108 109	/* Plane offsets of this buffer into the mapping */110	struct rga_addr_offset offset;111};112 113static inline struct rga_vb_buffer *vb_to_rga(struct vb2_v4l2_buffer *vb)114{115	return container_of(vb, struct rga_vb_buffer, vb_buf);116}117 118struct rga_frame *rga_get_frame(struct rga_ctx *ctx, enum v4l2_buf_type type);119 120/* RGA Buffers Manage */121extern const struct vb2_ops rga_qops;122 123/* RGA Hardware */124static inline void rga_write(struct rockchip_rga *rga, u32 reg, u32 value)125{126	writel(value, rga->regs + reg);127};128 129static inline u32 rga_read(struct rockchip_rga *rga, u32 reg)130{131	return readl(rga->regs + reg);132};133 134static inline void rga_mod(struct rockchip_rga *rga, u32 reg, u32 val, u32 mask)135{136	u32 temp = rga_read(rga, reg) & ~(mask);137 138	temp |= val & mask;139	rga_write(rga, reg, temp);140};141 142void rga_hw_start(struct rockchip_rga *rga,143		  struct rga_vb_buffer *src, struct rga_vb_buffer *dst);144 145#endif146