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 { 60 struct v4l2_ctrl *vflip; 61 struct v4l2_ctrl *hflip; 62 struct v4l2_ctrl *rotate; 63 } ctrls; 64 unsigned int pending; 65 unsigned int active; 66 bool rotate; 67 } flip; 68 69 struct vsp1_rwpf_memory mem; 70 71 struct vsp1_dl_manager *dlm; 72 }; 73 to_rwpf(struct v4l2_subdev * subdev)74static inline struct vsp1_rwpf *to_rwpf(struct v4l2_subdev *subdev) 75 { 76 return container_of(subdev, struct vsp1_rwpf, entity.subdev); 77 } 78 entity_to_rwpf(struct vsp1_entity * entity)79static inline struct vsp1_rwpf *entity_to_rwpf(struct vsp1_entity *entity) 80 { 81 return container_of(entity, struct vsp1_rwpf, entity); 82 } 83 84 struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index); 85 struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index); 86 87 int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf, unsigned int ncontrols); 88 89 extern const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops; 90 91 struct v4l2_rect *vsp1_rwpf_get_crop(struct vsp1_rwpf *rwpf, 92 struct v4l2_subdev_pad_config *config); 93 94 #endif /* __VSP1_RWPF_H__ */ 95