Commit | Line | Data |
---|---|---|
26e0ca22 LP |
1 | /* |
2 | * vsp1_rwpf.h -- R-Car VSP1 Read and Write Pixel Formatters | |
3 | * | |
8a1edc55 | 4 | * Copyright (C) 2013-2014 Renesas Electronics Corporation |
26e0ca22 LP |
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 | ||
894dde5c LP |
16 | #include <linux/spinlock.h> |
17 | ||
26e0ca22 | 18 | #include <media/media-entity.h> |
7578c204 | 19 | #include <media/v4l2-ctrls.h> |
26e0ca22 LP |
20 | #include <media/v4l2-subdev.h> |
21 | ||
22 | #include "vsp1.h" | |
23 | #include "vsp1_entity.h" | |
26e0ca22 LP |
24 | |
25 | #define RWPF_PAD_SINK 0 | |
26 | #define RWPF_PAD_SOURCE 1 | |
27 | ||
3dbb6100 | 28 | struct v4l2_ctrl; |
ef9621bc | 29 | struct vsp1_dl_manager; |
ff7e97c9 | 30 | struct vsp1_pipeline; |
b6af10cd | 31 | struct vsp1_rwpf; |
faf2644d | 32 | struct vsp1_video; |
b58faa95 LP |
33 | |
34 | struct vsp1_rwpf_memory { | |
b58faa95 | 35 | dma_addr_t addr[3]; |
b58faa95 | 36 | }; |
b6af10cd | 37 | |
26e0ca22 LP |
38 | struct vsp1_rwpf { |
39 | struct vsp1_entity entity; | |
7578c204 | 40 | struct v4l2_ctrl_handler ctrls; |
26e0ca22 | 41 | |
ff7e97c9 | 42 | struct vsp1_pipeline *pipe; |
faf2644d LP |
43 | struct vsp1_video *video; |
44 | ||
26e0ca22 LP |
45 | unsigned int max_width; |
46 | unsigned int max_height; | |
e5ad37b6 | 47 | |
86960eec LP |
48 | struct v4l2_pix_format_mplane format; |
49 | const struct vsp1_format_info *fmtinfo; | |
b7e5107e | 50 | unsigned int bru_input; |
e5ad37b6 | 51 | |
bd2fdd5a LP |
52 | unsigned int alpha; |
53 | ||
d05a3310 LP |
54 | u32 mult_alpha; |
55 | u32 outfmt; | |
56 | ||
894dde5c LP |
57 | struct { |
58 | spinlock_t lock; | |
59 | struct v4l2_ctrl *ctrls[2]; | |
60 | unsigned int pending; | |
61 | unsigned int active; | |
62 | } flip; | |
63 | ||
e5ad37b6 | 64 | unsigned int offsets[2]; |
351bbf99 | 65 | struct vsp1_rwpf_memory mem; |
ef9621bc LP |
66 | |
67 | struct vsp1_dl_manager *dlm; | |
26e0ca22 LP |
68 | }; |
69 | ||
70 | static inline struct vsp1_rwpf *to_rwpf(struct v4l2_subdev *subdev) | |
71 | { | |
72 | return container_of(subdev, struct vsp1_rwpf, entity.subdev); | |
73 | } | |
74 | ||
52434534 LP |
75 | static inline struct vsp1_rwpf *entity_to_rwpf(struct vsp1_entity *entity) |
76 | { | |
77 | return container_of(entity, struct vsp1_rwpf, entity); | |
78 | } | |
79 | ||
26e0ca22 LP |
80 | struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index); |
81 | struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index); | |
82 | ||
894dde5c | 83 | int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf, unsigned int ncontrols); |
bd2fdd5a | 84 | |
c6c8efb6 | 85 | extern const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops; |
26e0ca22 | 86 | |
b7e5107e LP |
87 | struct v4l2_rect *vsp1_rwpf_get_crop(struct vsp1_rwpf *rwpf, |
88 | struct v4l2_subdev_pad_config *config); | |
351bbf99 LP |
89 | /** |
90 | * vsp1_rwpf_set_memory - Configure DMA addresses for a [RW]PF | |
91 | * @rwpf: the [RW]PF instance | |
5e8dbbf3 | 92 | * @dl: the display list |
351bbf99 | 93 | * |
5e8dbbf3 | 94 | * This function applies the cached memory buffer address to the display list. |
351bbf99 | 95 | */ |
5e8dbbf3 LP |
96 | static inline void vsp1_rwpf_set_memory(struct vsp1_rwpf *rwpf, |
97 | struct vsp1_dl_list *dl) | |
351bbf99 | 98 | { |
5e8dbbf3 | 99 | rwpf->entity.ops->set_memory(&rwpf->entity, dl); |
351bbf99 | 100 | } |
4d346be5 | 101 | |
26e0ca22 | 102 | #endif /* __VSP1_RWPF_H__ */ |