1 /* 2 * Copyright (C) Icenowy Zheng <icenowy@aosc.io> 3 * 4 * Based on sun4i_layer.h, which is: 5 * Copyright (C) 2015 Free Electrons 6 * Copyright (C) 2015 NextThing Co 7 * 8 * Maxime Ripard <maxime.ripard@free-electrons.com> 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License as 12 * published by the Free Software Foundation; either version 2 of 13 * the License, or (at your option) any later version. 14 */ 15 16 #ifndef _SUN8I_UI_LAYER_H_ 17 #define _SUN8I_UI_LAYER_H_ 18 19 #include <drm/drm_plane.h> 20 21 #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch, layer) \ 22 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0x0) 23 #define SUN8I_MIXER_CHAN_UI_LAYER_SIZE(ch, layer) \ 24 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0x4) 25 #define SUN8I_MIXER_CHAN_UI_LAYER_COORD(ch, layer) \ 26 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0x8) 27 #define SUN8I_MIXER_CHAN_UI_LAYER_PITCH(ch, layer) \ 28 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0xc) 29 #define SUN8I_MIXER_CHAN_UI_LAYER_TOP_LADDR(ch, layer) \ 30 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0x10) 31 #define SUN8I_MIXER_CHAN_UI_LAYER_BOT_LADDR(ch, layer) \ 32 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0x14) 33 #define SUN8I_MIXER_CHAN_UI_LAYER_FCOLOR(ch, layer) \ 34 (0x2000 + 0x1000 * (ch) + 0x20 * (layer) + 0x18) 35 #define SUN8I_MIXER_CHAN_UI_TOP_HADDR(ch) (0x2000 + 0x1000 * (ch) + 0x80) 36 #define SUN8I_MIXER_CHAN_UI_BOT_HADDR(ch) (0x2000 + 0x1000 * (ch) + 0x84) 37 #define SUN8I_MIXER_CHAN_UI_OVL_SIZE(ch) (0x2000 + 0x1000 * (ch) + 0x88) 38 39 #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN BIT(0) 40 #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_MASK GENMASK(2, 1) 41 #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_MASK GENMASK(12, 8) 42 #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_OFFSET 8 43 #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MASK GENMASK(31, 24) 44 45 struct sun8i_mixer; 46 47 struct sun8i_ui_layer { 48 struct drm_plane plane; 49 struct sun8i_mixer *mixer; 50 int channel; 51 int overlay; 52 }; 53 54 static inline struct sun8i_ui_layer * 55 plane_to_sun8i_ui_layer(struct drm_plane *plane) 56 { 57 return container_of(plane, struct sun8i_ui_layer, plane); 58 } 59 60 struct sun8i_ui_layer *sun8i_ui_layer_init_one(struct drm_device *drm, 61 struct sun8i_mixer *mixer, 62 int index); 63 #endif /* _SUN8I_UI_LAYER_H_ */ 64