Loading...
Note: File does not exist in v4.6.
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2018 Texas Instruments Incorporated - https://www.ti.com/
4 * Author: Tomi Valkeinen <tomi.valkeinen@ti.com>
5 */
6
7#ifndef __TIDSS_DISPC_H__
8#define __TIDSS_DISPC_H__
9
10#include "tidss_drv.h"
11
12struct dispc_device;
13
14struct drm_crtc_state;
15
16enum tidss_gamma_type { TIDSS_GAMMA_8BIT, TIDSS_GAMMA_10BIT };
17
18struct tidss_vp_feat {
19 struct tidss_vp_color_feat {
20 u32 gamma_size;
21 enum tidss_gamma_type gamma_type;
22 bool has_ctm;
23 } color;
24};
25
26struct tidss_plane_feat {
27 struct tidss_plane_color_feat {
28 u32 encodings;
29 u32 ranges;
30 enum drm_color_encoding default_encoding;
31 enum drm_color_range default_range;
32 } color;
33 struct tidss_plane_blend_feat {
34 bool global_alpha;
35 } blend;
36};
37
38struct dispc_features_scaling {
39 u32 in_width_max_5tap_rgb;
40 u32 in_width_max_3tap_rgb;
41 u32 in_width_max_5tap_yuv;
42 u32 in_width_max_3tap_yuv;
43 u32 upscale_limit;
44 u32 downscale_limit_5tap;
45 u32 downscale_limit_3tap;
46 u32 xinc_max;
47};
48
49enum dispc_vp_bus_type {
50 DISPC_VP_DPI, /* DPI output */
51 DISPC_VP_OLDI, /* OLDI (LVDS) output */
52 DISPC_VP_INTERNAL, /* SoC internal routing */
53 DISPC_VP_MAX_BUS_TYPE,
54};
55
56enum dispc_dss_subrevision {
57 DISPC_K2G,
58 DISPC_AM65X,
59 DISPC_J721E,
60};
61
62struct dispc_features {
63 int min_pclk_khz;
64 int max_pclk_khz[DISPC_VP_MAX_BUS_TYPE];
65
66 struct dispc_features_scaling scaling;
67
68 enum dispc_dss_subrevision subrev;
69
70 const char *common;
71 const u16 *common_regs;
72 u32 num_vps;
73 const char *vp_name[TIDSS_MAX_PORTS]; /* Should match dt reg names */
74 const char *ovr_name[TIDSS_MAX_PORTS]; /* Should match dt reg names */
75 const char *vpclk_name[TIDSS_MAX_PORTS]; /* Should match dt clk names */
76 const enum dispc_vp_bus_type vp_bus_type[TIDSS_MAX_PORTS];
77 struct tidss_vp_feat vp_feat;
78 u32 num_planes;
79 const char *vid_name[TIDSS_MAX_PLANES]; /* Should match dt reg names */
80 bool vid_lite[TIDSS_MAX_PLANES];
81 u32 vid_order[TIDSS_MAX_PLANES];
82};
83
84extern const struct dispc_features dispc_k2g_feats;
85extern const struct dispc_features dispc_am65x_feats;
86extern const struct dispc_features dispc_j721e_feats;
87
88void dispc_set_irqenable(struct dispc_device *dispc, dispc_irq_t mask);
89dispc_irq_t dispc_read_and_clear_irqstatus(struct dispc_device *dispc);
90
91void dispc_ovr_set_plane(struct dispc_device *dispc, u32 hw_plane,
92 u32 hw_videoport, u32 x, u32 y, u32 layer);
93void dispc_ovr_enable_layer(struct dispc_device *dispc,
94 u32 hw_videoport, u32 layer, bool enable);
95
96void dispc_vp_prepare(struct dispc_device *dispc, u32 hw_videoport,
97 const struct drm_crtc_state *state);
98void dispc_vp_enable(struct dispc_device *dispc, u32 hw_videoport,
99 const struct drm_crtc_state *state);
100void dispc_vp_disable(struct dispc_device *dispc, u32 hw_videoport);
101void dispc_vp_unprepare(struct dispc_device *dispc, u32 hw_videoport);
102bool dispc_vp_go_busy(struct dispc_device *dispc, u32 hw_videoport);
103void dispc_vp_go(struct dispc_device *dispc, u32 hw_videoport);
104int dispc_vp_bus_check(struct dispc_device *dispc, u32 hw_videoport,
105 const struct drm_crtc_state *state);
106enum drm_mode_status dispc_vp_mode_valid(struct dispc_device *dispc,
107 u32 hw_videoport,
108 const struct drm_display_mode *mode);
109int dispc_vp_enable_clk(struct dispc_device *dispc, u32 hw_videoport);
110void dispc_vp_disable_clk(struct dispc_device *dispc, u32 hw_videoport);
111int dispc_vp_set_clk_rate(struct dispc_device *dispc, u32 hw_videoport,
112 unsigned long rate);
113void dispc_vp_setup(struct dispc_device *dispc, u32 hw_videoport,
114 const struct drm_crtc_state *state, bool newmodeset);
115
116int dispc_runtime_suspend(struct dispc_device *dispc);
117int dispc_runtime_resume(struct dispc_device *dispc);
118
119int dispc_plane_check(struct dispc_device *dispc, u32 hw_plane,
120 const struct drm_plane_state *state,
121 u32 hw_videoport);
122int dispc_plane_setup(struct dispc_device *dispc, u32 hw_plane,
123 const struct drm_plane_state *state,
124 u32 hw_videoport);
125int dispc_plane_enable(struct dispc_device *dispc, u32 hw_plane, bool enable);
126const u32 *dispc_plane_formats(struct dispc_device *dispc, unsigned int *len);
127
128int dispc_init(struct tidss_device *tidss);
129void dispc_remove(struct tidss_device *tidss);
130
131#endif