xref: /openbmc/linux/include/linux/soc/amlogic/meson-canvas.h (revision 976e3645923bdd2fe7893aae33fd7a21098bfb28)
1d4983983SMaxime Jourdan /* SPDX-License-Identifier: GPL-2.0+ */
2d4983983SMaxime Jourdan /*
3d4983983SMaxime Jourdan  * Copyright (C) 2018 BayLibre, SAS
4d4983983SMaxime Jourdan  */
5d4983983SMaxime Jourdan #ifndef __SOC_MESON_CANVAS_H
6d4983983SMaxime Jourdan #define __SOC_MESON_CANVAS_H
7d4983983SMaxime Jourdan 
8d4983983SMaxime Jourdan #include <linux/kernel.h>
9d4983983SMaxime Jourdan 
10d4983983SMaxime Jourdan #define MESON_CANVAS_WRAP_NONE	0x00
11d4983983SMaxime Jourdan #define MESON_CANVAS_WRAP_X	0x01
12d4983983SMaxime Jourdan #define MESON_CANVAS_WRAP_Y	0x02
13d4983983SMaxime Jourdan 
14d4983983SMaxime Jourdan #define MESON_CANVAS_BLKMODE_LINEAR	0x00
15d4983983SMaxime Jourdan #define MESON_CANVAS_BLKMODE_32x32	0x01
16d4983983SMaxime Jourdan #define MESON_CANVAS_BLKMODE_64x64	0x02
17d4983983SMaxime Jourdan 
18d4983983SMaxime Jourdan #define MESON_CANVAS_ENDIAN_SWAP16	0x1
19d4983983SMaxime Jourdan #define MESON_CANVAS_ENDIAN_SWAP32	0x3
20d4983983SMaxime Jourdan #define MESON_CANVAS_ENDIAN_SWAP64	0x7
21d4983983SMaxime Jourdan #define MESON_CANVAS_ENDIAN_SWAP128	0xf
22d4983983SMaxime Jourdan 
23*66620f48SSam Ravnborg struct device;
24d4983983SMaxime Jourdan struct meson_canvas;
25d4983983SMaxime Jourdan 
26d4983983SMaxime Jourdan /**
27d4983983SMaxime Jourdan  * meson_canvas_get() - get a canvas provider instance
28d4983983SMaxime Jourdan  *
29d4983983SMaxime Jourdan  * @dev: consumer device pointer
30d4983983SMaxime Jourdan  */
31d4983983SMaxime Jourdan struct meson_canvas *meson_canvas_get(struct device *dev);
32d4983983SMaxime Jourdan 
33d4983983SMaxime Jourdan /**
34d4983983SMaxime Jourdan  * meson_canvas_alloc() - take ownership of a canvas
35d4983983SMaxime Jourdan  *
36d4983983SMaxime Jourdan  * @canvas: canvas provider instance retrieved from meson_canvas_get()
37d4983983SMaxime Jourdan  * @canvas_index: will be filled with the canvas ID
38d4983983SMaxime Jourdan  */
39d4983983SMaxime Jourdan int meson_canvas_alloc(struct meson_canvas *canvas, u8 *canvas_index);
40d4983983SMaxime Jourdan 
41d4983983SMaxime Jourdan /**
42d4983983SMaxime Jourdan  * meson_canvas_free() - remove ownership from a canvas
43d4983983SMaxime Jourdan  *
44d4983983SMaxime Jourdan  * @canvas: canvas provider instance retrieved from meson_canvas_get()
45d4983983SMaxime Jourdan  * @canvas_index: canvas ID that was obtained via meson_canvas_alloc()
46d4983983SMaxime Jourdan  */
47d4983983SMaxime Jourdan int meson_canvas_free(struct meson_canvas *canvas, u8 canvas_index);
48d4983983SMaxime Jourdan 
49d4983983SMaxime Jourdan /**
50d4983983SMaxime Jourdan  * meson_canvas_config() - configure a canvas
51d4983983SMaxime Jourdan  *
52d4983983SMaxime Jourdan  * @canvas: canvas provider instance retrieved from meson_canvas_get()
53d4983983SMaxime Jourdan  * @canvas_index: canvas ID that was obtained via meson_canvas_alloc()
54d4983983SMaxime Jourdan  * @addr: physical address to the pixel buffer
55d4983983SMaxime Jourdan  * @stride: width of the buffer
56d4983983SMaxime Jourdan  * @height: height of the buffer
57d4983983SMaxime Jourdan  * @wrap: undocumented
58d4983983SMaxime Jourdan  * @blkmode: block mode (linear, 32x32, 64x64)
59d4983983SMaxime Jourdan  * @endian: byte swapping (swap16, swap32, swap64, swap128)
60d4983983SMaxime Jourdan  */
61d4983983SMaxime Jourdan int meson_canvas_config(struct meson_canvas *canvas, u8 canvas_index,
62d4983983SMaxime Jourdan 			u32 addr, u32 stride, u32 height,
63d4983983SMaxime Jourdan 			unsigned int wrap, unsigned int blkmode,
64d4983983SMaxime Jourdan 			unsigned int endian);
65d4983983SMaxime Jourdan 
66d4983983SMaxime Jourdan #endif
67