xref: /linux/drivers/media/platform/renesas/vsp1/vsp1_rwpf.h (revision c771600c6af14749609b49565ffb4cac2959710d)
11c4b5f49SLaurent Pinchart /* SPDX-License-Identifier: GPL-2.0+ */
226e0ca22SLaurent Pinchart /*
326e0ca22SLaurent Pinchart  * vsp1_rwpf.h  --  R-Car VSP1 Read and Write Pixel Formatters
426e0ca22SLaurent Pinchart  *
58a1edc55SLaurent Pinchart  * Copyright (C) 2013-2014 Renesas Electronics Corporation
626e0ca22SLaurent Pinchart  *
726e0ca22SLaurent Pinchart  * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
826e0ca22SLaurent Pinchart  */
926e0ca22SLaurent Pinchart #ifndef __VSP1_RWPF_H__
1026e0ca22SLaurent Pinchart #define __VSP1_RWPF_H__
1126e0ca22SLaurent Pinchart 
12894dde5cSLaurent Pinchart #include <linux/spinlock.h>
13894dde5cSLaurent Pinchart 
1426e0ca22SLaurent Pinchart #include <media/media-entity.h>
157578c204SLaurent Pinchart #include <media/v4l2-ctrls.h>
1626e0ca22SLaurent Pinchart #include <media/v4l2-subdev.h>
1726e0ca22SLaurent Pinchart 
1826e0ca22SLaurent Pinchart #include "vsp1.h"
1926e0ca22SLaurent Pinchart #include "vsp1_entity.h"
2026e0ca22SLaurent Pinchart 
2126e0ca22SLaurent Pinchart #define RWPF_PAD_SINK				0
2226e0ca22SLaurent Pinchart #define RWPF_PAD_SOURCE				1
2326e0ca22SLaurent Pinchart 
243dbb6100SLaurent Pinchart struct v4l2_ctrl;
25ef9621bcSLaurent Pinchart struct vsp1_dl_manager;
26b6af10cdSLaurent Pinchart struct vsp1_rwpf;
27faf2644dSLaurent Pinchart struct vsp1_video;
28b58faa95SLaurent Pinchart 
29b58faa95SLaurent Pinchart struct vsp1_rwpf_memory {
30b58faa95SLaurent Pinchart 	dma_addr_t addr[3];
31b58faa95SLaurent Pinchart };
32b6af10cdSLaurent Pinchart 
3326e0ca22SLaurent Pinchart struct vsp1_rwpf {
3426e0ca22SLaurent Pinchart 	struct vsp1_entity entity;
357578c204SLaurent Pinchart 	struct v4l2_ctrl_handler ctrls;
3626e0ca22SLaurent Pinchart 
37faf2644dSLaurent Pinchart 	struct vsp1_video *video;
38faf2644dSLaurent Pinchart 
3926e0ca22SLaurent Pinchart 	unsigned int max_width;
4026e0ca22SLaurent Pinchart 	unsigned int max_height;
41e5ad37b6SLaurent Pinchart 
4286960eecSLaurent Pinchart 	struct v4l2_pix_format_mplane format;
4386960eecSLaurent Pinchart 	const struct vsp1_format_info *fmtinfo;
44cbb7fa49SLaurent Pinchart 	unsigned int brx_input;
45e5ad37b6SLaurent Pinchart 
46bd2fdd5aSLaurent Pinchart 	unsigned int alpha;
47bd2fdd5aSLaurent Pinchart 
48d05a3310SLaurent Pinchart 	u32 mult_alpha;
49d05a3310SLaurent Pinchart 	u32 outfmt;
50d05a3310SLaurent Pinchart 
51894dde5cSLaurent Pinchart 	struct {
52894dde5cSLaurent Pinchart 		spinlock_t lock;
533e9a0e0bSLaurent Pinchart 		struct {
543e9a0e0bSLaurent Pinchart 			struct v4l2_ctrl *vflip;
553e9a0e0bSLaurent Pinchart 			struct v4l2_ctrl *hflip;
563e9a0e0bSLaurent Pinchart 			struct v4l2_ctrl *rotate;
573e9a0e0bSLaurent Pinchart 		} ctrls;
58894dde5cSLaurent Pinchart 		unsigned int pending;
59894dde5cSLaurent Pinchart 		unsigned int active;
603e9a0e0bSLaurent Pinchart 		bool rotate;
61894dde5cSLaurent Pinchart 	} flip;
62894dde5cSLaurent Pinchart 
63351bbf99SLaurent Pinchart 	struct vsp1_rwpf_memory mem;
649ec5742bSLaurent Pinchart 	bool writeback;
65ef9621bcSLaurent Pinchart 
66ef9621bcSLaurent Pinchart 	struct vsp1_dl_manager *dlm;
6726e0ca22SLaurent Pinchart };
6826e0ca22SLaurent Pinchart 
to_rwpf(struct v4l2_subdev * subdev)6926e0ca22SLaurent Pinchart static inline struct vsp1_rwpf *to_rwpf(struct v4l2_subdev *subdev)
7026e0ca22SLaurent Pinchart {
7126e0ca22SLaurent Pinchart 	return container_of(subdev, struct vsp1_rwpf, entity.subdev);
7226e0ca22SLaurent Pinchart }
7326e0ca22SLaurent Pinchart 
entity_to_rwpf(struct vsp1_entity * entity)7452434534SLaurent Pinchart static inline struct vsp1_rwpf *entity_to_rwpf(struct vsp1_entity *entity)
7552434534SLaurent Pinchart {
7652434534SLaurent Pinchart 	return container_of(entity, struct vsp1_rwpf, entity);
7752434534SLaurent Pinchart }
7852434534SLaurent Pinchart 
7926e0ca22SLaurent Pinchart struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index);
8026e0ca22SLaurent Pinchart struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index);
8126e0ca22SLaurent Pinchart 
8242d62b7eSLaurent Pinchart void vsp1_wpf_stop(struct vsp1_rwpf *wpf);
8342d62b7eSLaurent Pinchart 
84894dde5cSLaurent Pinchart int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf, unsigned int ncontrols);
85bd2fdd5aSLaurent Pinchart 
8642d62b7eSLaurent Pinchart extern const struct v4l2_subdev_ops vsp1_rwpf_subdev_ops;
8726e0ca22SLaurent Pinchart 
8826e0ca22SLaurent Pinchart #endif /* __VSP1_RWPF_H__ */
89