1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef __DMA2D_H__
15#define __DMA2D_H__
16
17#include <linux/platform_device.h>
18#include <media/v4l2-device.h>
19#include <media/v4l2-ctrls.h>
20
21#define DMA2D_NAME "stm-dma2d"
22#define BUS_INFO "platform:stm-dma2d"
23enum dma2d_op_mode {
24 DMA2D_MODE_M2M,
25 DMA2D_MODE_M2M_FPC,
26 DMA2D_MODE_M2M_BLEND,
27 DMA2D_MODE_R2M
28};
29
30enum dma2d_cmode {
31
32 DMA2D_CMODE_ARGB8888,
33 DMA2D_CMODE_RGB888,
34 DMA2D_CMODE_RGB565,
35 DMA2D_CMODE_ARGB1555,
36 DMA2D_CMODE_ARGB4444,
37
38 DMA2D_CMODE_L8,
39 DMA2D_CMODE_AL44,
40 DMA2D_CMODE_AL88,
41 DMA2D_CMODE_L4,
42 DMA2D_CMODE_A8,
43 DMA2D_CMODE_A4
44};
45
46enum dma2d_alpha_mode {
47 DMA2D_ALPHA_MODE_NO_MODIF,
48 DMA2D_ALPHA_MODE_REPLACE,
49 DMA2D_ALPHA_MODE_COMBINE
50};
51
52struct dma2d_fmt {
53 u32 fourcc;
54 int depth;
55 enum dma2d_cmode cmode;
56};
57
58struct dma2d_frame {
59
60 u32 width;
61 u32 height;
62
63 u32 c_width;
64 u32 c_height;
65
66 u32 o_width;
67 u32 o_height;
68 u32 bottom;
69 u32 right;
70 u16 line_offset;
71
72 struct dma2d_fmt *fmt;
73
74
75
76
77
78 u8 a_rgb[4];
79
80
81
82 enum dma2d_alpha_mode a_mode;
83 u32 size;
84 unsigned int sequence;
85};
86
87struct dma2d_ctx {
88 struct v4l2_fh fh;
89 struct dma2d_dev *dev;
90 struct dma2d_frame cap;
91 struct dma2d_frame out;
92 struct dma2d_frame bg;
93
94 struct v4l2_framebuffer fb_buf;
95
96
97
98 enum dma2d_op_mode op_mode;
99 struct v4l2_ctrl_handler ctrl_handler;
100 enum v4l2_colorspace colorspace;
101 enum v4l2_ycbcr_encoding ycbcr_enc;
102 enum v4l2_xfer_func xfer_func;
103 enum v4l2_quantization quant;
104};
105
106struct dma2d_dev {
107 struct v4l2_device v4l2_dev;
108 struct v4l2_m2m_dev *m2m_dev;
109 struct video_device *vfd;
110
111 struct mutex mutex;
112
113
114
115 spinlock_t ctrl_lock;
116 atomic_t num_inst;
117 void __iomem *regs;
118 struct clk *gate;
119 struct dma2d_ctx *curr;
120 int irq;
121};
122
123void dma2d_start(struct dma2d_dev *d);
124u32 dma2d_get_int(struct dma2d_dev *d);
125void dma2d_clear_int(struct dma2d_dev *d);
126void dma2d_config_out(struct dma2d_dev *d, struct dma2d_frame *frm,
127 dma_addr_t o_addr);
128void dma2d_config_fg(struct dma2d_dev *d, struct dma2d_frame *frm,
129 dma_addr_t f_addr);
130void dma2d_config_bg(struct dma2d_dev *d, struct dma2d_frame *frm,
131 dma_addr_t b_addr);
132void dma2d_config_common(struct dma2d_dev *d, enum dma2d_op_mode op_mode,
133 u16 width, u16 height);
134
135#endif
136