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