12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
25bb5f5daSJernej Skrabec /*
35bb5f5daSJernej Skrabec * Copyright (C) Icenowy Zheng <icenowy@aosc.io>
45bb5f5daSJernej Skrabec *
55bb5f5daSJernej Skrabec * Based on sun4i_layer.h, which is:
65bb5f5daSJernej Skrabec * Copyright (C) 2015 Free Electrons
75bb5f5daSJernej Skrabec * Copyright (C) 2015 NextThing Co
85bb5f5daSJernej Skrabec *
95bb5f5daSJernej Skrabec * Maxime Ripard <maxime.ripard@free-electrons.com>
105bb5f5daSJernej Skrabec */
115bb5f5daSJernej Skrabec
125bb5f5daSJernej Skrabec #ifndef _SUN8I_UI_LAYER_H_
135bb5f5daSJernej Skrabec #define _SUN8I_UI_LAYER_H_
145bb5f5daSJernej Skrabec
155bb5f5daSJernej Skrabec #include <drm/drm_plane.h>
165bb5f5daSJernej Skrabec
174b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR(base, layer) \
184b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0x0)
194b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_SIZE(base, layer) \
204b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0x4)
214b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_COORD(base, layer) \
224b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0x8)
234b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_PITCH(base, layer) \
244b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0xc)
254b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_TOP_LADDR(base, layer) \
264b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0x10)
274b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_BOT_LADDR(base, layer) \
284b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0x14)
294b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_FCOLOR(base, layer) \
304b09c073SJernej Skrabec ((base) + 0x20 * (layer) + 0x18)
314b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_TOP_HADDR(base) \
324b09c073SJernej Skrabec ((base) + 0x80)
334b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_BOT_HADDR(base) \
344b09c073SJernej Skrabec ((base) + 0x84)
354b09c073SJernej Skrabec #define SUN8I_MIXER_CHAN_UI_OVL_SIZE(base) \
364b09c073SJernej Skrabec ((base) + 0x88)
375bb5f5daSJernej Skrabec
385bb5f5daSJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN BIT(0)
395bb5f5daSJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_MASK GENMASK(2, 1)
405bb5f5daSJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_MASK GENMASK(12, 8)
415bb5f5daSJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_FBFMT_OFFSET 8
425bb5f5daSJernej Skrabec #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MASK GENMASK(31, 24)
43*0ee29373SRoman Stratiienko #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA(x) ((x) << 24)
44*0ee29373SRoman Stratiienko
45*0ee29373SRoman Stratiienko #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_PIXEL ((0) << 1)
46*0ee29373SRoman Stratiienko #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_LAYER ((1) << 1)
47*0ee29373SRoman Stratiienko #define SUN8I_MIXER_CHAN_UI_LAYER_ATTR_ALPHA_MODE_COMBINED ((2) << 1)
485bb5f5daSJernej Skrabec
495bb5f5daSJernej Skrabec struct sun8i_mixer;
505bb5f5daSJernej Skrabec
515bb5f5daSJernej Skrabec struct sun8i_ui_layer {
525bb5f5daSJernej Skrabec struct drm_plane plane;
535bb5f5daSJernej Skrabec struct sun8i_mixer *mixer;
545bb5f5daSJernej Skrabec int channel;
555bb5f5daSJernej Skrabec int overlay;
565bb5f5daSJernej Skrabec };
575bb5f5daSJernej Skrabec
585bb5f5daSJernej Skrabec static inline struct sun8i_ui_layer *
plane_to_sun8i_ui_layer(struct drm_plane * plane)595bb5f5daSJernej Skrabec plane_to_sun8i_ui_layer(struct drm_plane *plane)
605bb5f5daSJernej Skrabec {
615bb5f5daSJernej Skrabec return container_of(plane, struct sun8i_ui_layer, plane);
625bb5f5daSJernej Skrabec }
635bb5f5daSJernej Skrabec
645bb5f5daSJernej Skrabec struct sun8i_ui_layer *sun8i_ui_layer_init_one(struct drm_device *drm,
655bb5f5daSJernej Skrabec struct sun8i_mixer *mixer,
665bb5f5daSJernej Skrabec int index);
675bb5f5daSJernej Skrabec #endif /* _SUN8I_UI_LAYER_H_ */
68