aboutsummaryrefslogtreecommitdiffstats
path: root/include/media
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2016-04-23 18:08:59 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-06-17 07:16:16 -0400
commitc6b013ab517b0ae09036d50f6b1684d9dbedf596 (patch)
treede8cd068c7b1bbdfdbad6f0c6b3c81e83f400270 /include/media
parent0c1a41b50805464f397a334a6b2dd95ca6415f32 (diff)
[media] v4l: vsp1: Group DRM RPF parameters in a structure
The vsp1_du_atomic_update_ext() function takes 7 RPF configuration parameters, and more will likely be added later. This makes the code difficult to read and error-prone as multiple parameters have the same type. Make the API safer and easier to extend in the future by grouping all parameters in a structure. Use macro magic to ease the transition to the new function by allowing the old and new functions to be called using the same name. The macros and static inline wrapper will be removed as soon as the caller is updated. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'include/media')
-rw-r--r--include/media/vsp1.h47
1 files changed, 34 insertions, 13 deletions
diff --git a/include/media/vsp1.h b/include/media/vsp1.h
index 3e654a0455bd..ea8ad7537057 100644
--- a/include/media/vsp1.h
+++ b/include/media/vsp1.h
@@ -14,31 +14,52 @@
14#define __MEDIA_VSP1_H__ 14#define __MEDIA_VSP1_H__
15 15
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/videodev2.h>
17 18
18struct device; 19struct device;
19struct v4l2_rect;
20 20
21int vsp1_du_init(struct device *dev); 21int vsp1_du_init(struct device *dev);
22 22
23int vsp1_du_setup_lif(struct device *dev, unsigned int width, 23int vsp1_du_setup_lif(struct device *dev, unsigned int width,
24 unsigned int height); 24 unsigned int height);
25 25
26struct vsp1_du_atomic_config {
27 u32 pixelformat;
28 unsigned int pitch;
29 dma_addr_t mem[2];
30 struct v4l2_rect src;
31 struct v4l2_rect dst;
32 unsigned int alpha;
33 unsigned int zpos;
34};
35
26void vsp1_du_atomic_begin(struct device *dev); 36void vsp1_du_atomic_begin(struct device *dev);
27int vsp1_du_atomic_update_ext(struct device *dev, unsigned int rpf, 37int __vsp1_du_atomic_update(struct device *dev, unsigned int rpf,
28 u32 pixelformat, unsigned int pitch, 38 const struct vsp1_du_atomic_config *cfg);
29 dma_addr_t mem[2], const struct v4l2_rect *src,
30 const struct v4l2_rect *dst, unsigned int alpha,
31 unsigned int zpos);
32void vsp1_du_atomic_flush(struct device *dev); 39void vsp1_du_atomic_flush(struct device *dev);
33 40
34static inline int vsp1_du_atomic_update(struct device *dev, 41static inline int vsp1_du_atomic_update_old(struct device *dev,
35 unsigned int rpf_index, u32 pixelformat, 42 unsigned int rpf, u32 pixelformat, unsigned int pitch,
36 unsigned int pitch, dma_addr_t mem[2], 43 dma_addr_t mem[2], const struct v4l2_rect *src,
37 const struct v4l2_rect *src, 44 const struct v4l2_rect *dst)
38 const struct v4l2_rect *dst)
39{ 45{
40 return vsp1_du_atomic_update_ext(dev, rpf_index, pixelformat, pitch, 46 struct vsp1_du_atomic_config cfg = {
41 mem, src, dst, 255, 0); 47 .pixelformat = pixelformat,
48 .pitch = pitch,
49 .mem[0] = mem[0],
50 .mem[1] = mem[1],
51 .src = *src,
52 .dst = *dst,
53 .alpha = 255,
54 .zpos = 0,
55 };
56
57 return __vsp1_du_atomic_update(dev, rpf, &cfg);
42} 58}
43 59
60#define _vsp1_du_atomic_update(_1, _2, _3, _4, _5, _6, _7, f, ...) f
61#define vsp1_du_atomic_update(...) \
62 _vsp1_du_atomic_update(__VA_ARGS__, vsp1_du_atomic_update_old, 0, 0, \
63 0, __vsp1_du_atomic_update)(__VA_ARGS__)
64
44#endif /* __MEDIA_VSP1_H__ */ 65#endif /* __MEDIA_VSP1_H__ */