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 Pinchartstatic 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 Pinchartstatic 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