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

source code of linux/include/linux/soc/amlogic/meson-canvas.h