162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) STMicroelectronics SA 2014
462306a36Sopenharmony_ci * Authors: Benjamin Gaignard <benjamin.gaignard@st.com>
562306a36Sopenharmony_ci *          Fabien Dessenne <fabien.dessenne@st.com>
662306a36Sopenharmony_ci *          for STMicroelectronics.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef _STI_MIXER_H_
1062306a36Sopenharmony_ci#define _STI_MIXER_H_
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <drm/drm_crtc.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <drm/drm_debugfs.h>
1562306a36Sopenharmony_ci#include <drm/drm_file.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#include "sti_plane.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct device;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define to_sti_mixer(x) container_of(x, struct sti_mixer, drm_crtc)
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cienum sti_mixer_status {
2462306a36Sopenharmony_ci	STI_MIXER_READY,
2562306a36Sopenharmony_ci	STI_MIXER_DISABLING,
2662306a36Sopenharmony_ci	STI_MIXER_DISABLED,
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci/**
3062306a36Sopenharmony_ci * STI Mixer subdevice structure
3162306a36Sopenharmony_ci *
3262306a36Sopenharmony_ci * @dev: driver device
3362306a36Sopenharmony_ci * @regs: mixer registers
3462306a36Sopenharmony_ci * @id: id of the mixer
3562306a36Sopenharmony_ci * @drm_crtc: crtc object link to the mixer
3662306a36Sopenharmony_ci * @status: to know the status of the mixer
3762306a36Sopenharmony_ci */
3862306a36Sopenharmony_cistruct sti_mixer {
3962306a36Sopenharmony_ci	struct device *dev;
4062306a36Sopenharmony_ci	void __iomem *regs;
4162306a36Sopenharmony_ci	int id;
4262306a36Sopenharmony_ci	struct drm_crtc drm_crtc;
4362306a36Sopenharmony_ci	enum sti_mixer_status status;
4462306a36Sopenharmony_ci};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciconst char *sti_mixer_to_str(struct sti_mixer *mixer);
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistruct sti_mixer *sti_mixer_create(struct device *dev,
4962306a36Sopenharmony_ci				   struct drm_device *drm_dev,
5062306a36Sopenharmony_ci				   int id,
5162306a36Sopenharmony_ci				   void __iomem *baseaddr);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ciint sti_mixer_set_plane_status(struct sti_mixer *mixer,
5462306a36Sopenharmony_ci			       struct sti_plane *plane, bool status);
5562306a36Sopenharmony_ciint sti_mixer_set_plane_depth(struct sti_mixer *mixer, struct sti_plane *plane);
5662306a36Sopenharmony_ciint sti_mixer_active_video_area(struct sti_mixer *mixer,
5762306a36Sopenharmony_ci				struct drm_display_mode *mode);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_civoid sti_mixer_set_background_status(struct sti_mixer *mixer, bool enable);
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_civoid sti_mixer_debugfs_init(struct sti_mixer *mixer, struct drm_minor *minor);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci/* depth in Cross-bar control = z order */
6462306a36Sopenharmony_ci#define GAM_MIXER_NB_DEPTH_LEVEL 6
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci#define STI_MIXER_MAIN 0
6762306a36Sopenharmony_ci#define STI_MIXER_AUX  1
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci#endif
70