84 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (C) STMicroelectronics SA 20144 * Author: Benjamin Gaignard <benjamin.gaignard@st.com> for STMicroelectronics.5 */6 7#ifndef _STI_PLANE_H_8#define _STI_PLANE_H_9 10#include <drm/drm_atomic_helper.h>11 12#define to_sti_plane(x) container_of(x, struct sti_plane, drm_plane)13 14#define STI_PLANE_TYPE_SHIFT 815#define STI_PLANE_TYPE_MASK (~((1 << STI_PLANE_TYPE_SHIFT) - 1))16 17enum sti_plane_type {18 STI_GDP = 1 << STI_PLANE_TYPE_SHIFT,19 STI_VDP = 2 << STI_PLANE_TYPE_SHIFT,20 STI_CUR = 3 << STI_PLANE_TYPE_SHIFT,21 STI_BCK = 4 << STI_PLANE_TYPE_SHIFT22};23 24enum sti_plane_id_of_type {25 STI_ID_0 = 0,26 STI_ID_1 = 1,27 STI_ID_2 = 2,28 STI_ID_3 = 329};30 31enum sti_plane_desc {32 STI_GDP_0 = STI_GDP | STI_ID_0,33 STI_GDP_1 = STI_GDP | STI_ID_1,34 STI_GDP_2 = STI_GDP | STI_ID_2,35 STI_GDP_3 = STI_GDP | STI_ID_3,36 STI_HQVDP_0 = STI_VDP | STI_ID_0,37 STI_CURSOR = STI_CUR,38 STI_BACK = STI_BCK39};40 41enum sti_plane_status {42 STI_PLANE_READY,43 STI_PLANE_UPDATED,44 STI_PLANE_DISABLING,45 STI_PLANE_FLUSHING,46 STI_PLANE_DISABLED,47};48 49#define FPS_LENGTH 12850struct sti_fps_info {51 bool output;52 unsigned int curr_frame_counter;53 unsigned int last_frame_counter;54 unsigned int curr_field_counter;55 unsigned int last_field_counter;56 ktime_t last_timestamp;57 char fps_str[FPS_LENGTH];58 char fips_str[FPS_LENGTH];59};60 61/**62 * STI plane structure63 *64 * @plane: drm plane it is bound to (if any)65 * @desc: plane type & id66 * @status: to know the status of the plane67 * @fps_info: frame per second info68 */69struct sti_plane {70 struct drm_plane drm_plane;71 enum sti_plane_desc desc;72 enum sti_plane_status status;73 struct sti_fps_info fps_info;74};75 76const char *sti_plane_to_str(struct sti_plane *plane);77void sti_plane_update_fps(struct sti_plane *plane,78 bool new_frame,79 bool new_field);80 81void sti_plane_init_property(struct sti_plane *plane,82 enum drm_plane_type type);83#endif84