1 /* 2 * vsp1_rwpf.h -- R-Car VSP1 Read and Write Pixel Formatters 3 * 4 * Copyright (C) 2013-2014 Renesas Electronics Corporation 5 * 6 * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com) 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 */ 13 #ifndef __VSP1_RWPF_H__ 14 #define __VSP1_RWPF_H__ 15 16 #include <linux/spinlock.h> 17 18 #include <media/media-entity.h> 19 #include <media/v4l2-ctrls.h> 20 #include <media/v4l2-subdev.h> 21 22 #include "vsp1.h" 23 #include "vsp1_entity.h" 24 25 #define RWPF_PAD_SINK 0 26 #define RWPF_PAD_SOURCE 1 27 28 struct v4l2_ctrl; 29 struct vsp1_dl_manager; 30 struct vsp1_pipeline; 31 struct vsp1_rwpf; 32 struct vsp1_video; 33 34 struct vsp1_rwpf_memory { 35 dma_addr_t addr[3]; 36 }; 37 38 struct vsp1_rwpf { 39 struct vsp1_entity entity; 40 struct v4l2_ctrl_handler ctrls; 41 42 struct vsp1_pipeline *pipe; 43 struct vsp1_video *video; 44 45 unsigned int max_width; 46 unsigned int max_height; 47 48 struct v4l2_pix_format_mplane format; 49 const struct vsp1_format_info *fmtinfo; 50 unsigned int bru_input; 51 52 unsigned int alpha; 53 54 u32 mult_alpha; 55 u32 outfmt; 56 57 struct { 58 spinlock_t lock; 59 struct v4l2_ctrl *ctrls[2]; 60 unsigned int pending; 61 unsigned int active; 62 } flip; 63 64 struct vsp1_rwpf_memory mem; 65 66 struct vsp1_dl_manager *dlm; 67 }; 68 to_rwpf(struct v4l2_subdev * subdev)69static inline struct vsp1_rwpf *to_rwpf(struct v4l2_subdev *subdev) 70 { 71 return container_of(subdev, struct vsp1_rwpf, entity.subdev); 72 } 73 entity_to_rwpf(struct vsp1_entity * entity)74static inline struct vsp1_rwpf *entity_to_rwpf(struct vsp1_entity *entity) 75 { 76 return container_of(entity, struct vsp1_rwpf, entity); 77 } 78 79 struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index); 80 struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index); 81 82 int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf, unsigned int ncontrols); 83 84 extern const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops; 85 86 struct v4l2_rect *vsp1_rwpf_get_crop(struct vsp1_rwpf *rwpf, 87 struct v4l2_subdev_pad_config *config); 88 89 #endif /* __VSP1_RWPF_H__ */ 90