1 /* 2 * Copyright (C) Jernej Skrabec <jernej.skrabec@siol.net> 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License as 6 * published by the Free Software Foundation; either version 2 of 7 * the License, or (at your option) any later version. 8 */ 9 10 #ifndef _SUN8I_VI_LAYER_H_ 11 #define _SUN8I_VI_LAYER_H_ 12 13 #include <drm/drm_plane.h> 14 15 #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch, layer) \ 16 (0x2000 + 0x1000 * (ch) + 0x30 * (layer) + 0x0) 17 #define SUN8I_MIXER_CHAN_VI_LAYER_SIZE(ch, layer) \ 18 (0x2000 + 0x1000 * (ch) + 0x30 * (layer) + 0x4) 19 #define SUN8I_MIXER_CHAN_VI_LAYER_COORD(ch, layer) \ 20 (0x2000 + 0x1000 * (ch) + 0x30 * (layer) + 0x8) 21 #define SUN8I_MIXER_CHAN_VI_LAYER_PITCH(ch, layer, plane) \ 22 (0x2000 + 0x1000 * (ch) + 0x30 * (layer) + 0xc + 4 * (plane)) 23 #define SUN8I_MIXER_CHAN_VI_LAYER_TOP_LADDR(ch, layer, plane) \ 24 (0x2000 + 0x1000 * (ch) + 0x30 * (layer) + 0x18 + 4 * (plane)) 25 #define SUN8I_MIXER_CHAN_VI_OVL_SIZE(ch) (0x2000 + 0x1000 * (ch) + 0xe8) 26 27 #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN BIT(0) 28 /* RGB mode should be set for RGB formats and cleared for YCbCr */ 29 #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_RGB_MODE BIT(15) 30 #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_OFFSET 8 31 #define SUN8I_MIXER_CHAN_VI_LAYER_ATTR_FBFMT_MASK GENMASK(12, 8) 32 33 struct sun8i_mixer; 34 35 struct sun8i_vi_layer { 36 struct drm_plane plane; 37 struct sun8i_mixer *mixer; 38 int channel; 39 int overlay; 40 }; 41 42 static inline struct sun8i_vi_layer * 43 plane_to_sun8i_vi_layer(struct drm_plane *plane) 44 { 45 return container_of(plane, struct sun8i_vi_layer, plane); 46 } 47 48 struct sun8i_vi_layer *sun8i_vi_layer_init_one(struct drm_device *drm, 49 struct sun8i_mixer *mixer, 50 int index); 51 #endif /* _SUN8I_VI_LAYER_H_ */ 52