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