13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 23d0407baSopenharmony_ci/* 33d0407baSopenharmony_ci * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd 43d0407baSopenharmony_ci * Author:Mark Yao <mark.yao@rock-chips.com> 53d0407baSopenharmony_ci * 63d0407baSopenharmony_ci * based on exynos_drm_drv.h 73d0407baSopenharmony_ci */ 83d0407baSopenharmony_ci 93d0407baSopenharmony_ci#ifndef _ROCKCHIP_DRM_DRV_H 103d0407baSopenharmony_ci#define _ROCKCHIP_DRM_DRV_H 113d0407baSopenharmony_ci 123d0407baSopenharmony_ci#include <drm/drm_atomic_helper.h> 133d0407baSopenharmony_ci#include <drm/drm_dsc.h> 143d0407baSopenharmony_ci#include <drm/drm_fb_helper.h> 153d0407baSopenharmony_ci#include <drm/drm_fourcc.h> 163d0407baSopenharmony_ci#include <drm/drm_gem.h> 173d0407baSopenharmony_ci#include <uapi/drm/rockchip_drm.h> 183d0407baSopenharmony_ci#include <linux/module.h> 193d0407baSopenharmony_ci#include <linux/component.h> 203d0407baSopenharmony_ci 213d0407baSopenharmony_ci#include <soc/rockchip/rockchip_dmc.h> 223d0407baSopenharmony_ci 233d0407baSopenharmony_ci#include <drm/panel-simple.h> 243d0407baSopenharmony_ci 253d0407baSopenharmony_ci#include <drm/rockchip_drm_debugfs.h> 263d0407baSopenharmony_ci 273d0407baSopenharmony_ci#define ROCKCHIP_MAX_FB_BUFFER 3 283d0407baSopenharmony_ci#define ROCKCHIP_MAX_CONNECTOR 2 293d0407baSopenharmony_ci#define ROCKCHIP_MAX_CRTC 4 303d0407baSopenharmony_ci#define ROCKCHIP_MAX_LAYER 16 313d0407baSopenharmony_ci 323d0407baSopenharmony_ci 333d0407baSopenharmony_cistruct drm_device; 343d0407baSopenharmony_cistruct drm_connector; 353d0407baSopenharmony_cistruct iommu_domain; 363d0407baSopenharmony_ci 373d0407baSopenharmony_ci#define VOP_OUTPUT_IF_RGB BIT(0) 383d0407baSopenharmony_ci#define VOP_OUTPUT_IF_BT1120 BIT(1) 393d0407baSopenharmony_ci#define VOP_OUTPUT_IF_BT656 BIT(2) 403d0407baSopenharmony_ci#define VOP_OUTPUT_IF_LVDS0 BIT(3) 413d0407baSopenharmony_ci#define VOP_OUTPUT_IF_LVDS1 BIT(4) 423d0407baSopenharmony_ci#define VOP_OUTPUT_IF_MIPI0 BIT(5) 433d0407baSopenharmony_ci#define VOP_OUTPUT_IF_MIPI1 BIT(6) 443d0407baSopenharmony_ci#define VOP_OUTPUT_IF_eDP0 BIT(7) 453d0407baSopenharmony_ci#define VOP_OUTPUT_IF_eDP1 BIT(8) 463d0407baSopenharmony_ci#define VOP_OUTPUT_IF_DP0 BIT(9) 473d0407baSopenharmony_ci#define VOP_OUTPUT_IF_DP1 BIT(10) 483d0407baSopenharmony_ci#define VOP_OUTPUT_IF_HDMI0 BIT(11) 493d0407baSopenharmony_ci#define VOP_OUTPUT_IF_HDMI1 BIT(12) 503d0407baSopenharmony_ci 513d0407baSopenharmony_ci#ifndef DRM_FORMAT_NV20 523d0407baSopenharmony_ci#define DRM_FORMAT_NV20 fourcc_code('N', 'V', '2', '0') /* 2x1 subsampled Cr:Cb plane */ 533d0407baSopenharmony_ci#endif 543d0407baSopenharmony_ci 553d0407baSopenharmony_ci#ifndef DRM_FORMAT_NV30 563d0407baSopenharmony_ci#define DRM_FORMAT_NV30 fourcc_code('N', 'V', '3', '0') /* non-subsampled Cr:Cb plane */ 573d0407baSopenharmony_ci#endif 583d0407baSopenharmony_ci 593d0407baSopenharmony_cistruct rockchip_drm_sub_dev { 603d0407baSopenharmony_ci struct list_head list; 613d0407baSopenharmony_ci struct drm_connector *connector; 623d0407baSopenharmony_ci struct device_node *of_node; 633d0407baSopenharmony_ci void (*loader_protect)(struct drm_encoder *encoder, bool on); 643d0407baSopenharmony_ci void (*oob_hotplug_event)(struct drm_connector *connector); 653d0407baSopenharmony_ci}; 663d0407baSopenharmony_ci 673d0407baSopenharmony_cistruct rockchip_sdr2hdr_state { 683d0407baSopenharmony_ci int sdr2hdr_func; 693d0407baSopenharmony_ci 703d0407baSopenharmony_ci bool bt1886eotf_pre_conv_en; 713d0407baSopenharmony_ci bool rgb2rgb_pre_conv_en; 723d0407baSopenharmony_ci bool rgb2rgb_pre_conv_mode; 733d0407baSopenharmony_ci bool st2084oetf_pre_conv_en; 743d0407baSopenharmony_ci 753d0407baSopenharmony_ci bool bt1886eotf_post_conv_en; 763d0407baSopenharmony_ci bool rgb2rgb_post_conv_en; 773d0407baSopenharmony_ci bool rgb2rgb_post_conv_mode; 783d0407baSopenharmony_ci bool st2084oetf_post_conv_en; 793d0407baSopenharmony_ci}; 803d0407baSopenharmony_ci 813d0407baSopenharmony_cistruct rockchip_hdr_state { 823d0407baSopenharmony_ci bool pre_overlay; 833d0407baSopenharmony_ci bool hdr2sdr_en; 843d0407baSopenharmony_ci struct rockchip_sdr2hdr_state sdr2hdr_state; 853d0407baSopenharmony_ci}; 863d0407baSopenharmony_ci 873d0407baSopenharmony_cistruct rockchip_bcsh_state { 883d0407baSopenharmony_ci int brightness; 893d0407baSopenharmony_ci int contrast; 903d0407baSopenharmony_ci int saturation; 913d0407baSopenharmony_ci int sin_hue; 923d0407baSopenharmony_ci int cos_hue; 933d0407baSopenharmony_ci}; 943d0407baSopenharmony_ci 953d0407baSopenharmony_cistruct rockchip_crtc { 963d0407baSopenharmony_ci struct drm_crtc crtc; 973d0407baSopenharmony_ci#if defined(CONFIG_ROCKCHIP_DRM_DEBUG) 983d0407baSopenharmony_ci /** 993d0407baSopenharmony_ci * @vop_dump_status the status of vop dump control 1003d0407baSopenharmony_ci * @vop_dump_list_head the list head of vop dump list 1013d0407baSopenharmony_ci * @vop_dump_list_init_flag init once 1023d0407baSopenharmony_ci * @vop_dump_times control the dump times 1033d0407baSopenharmony_ci * @frme_count the frame of dump buf 1043d0407baSopenharmony_ci */ 1053d0407baSopenharmony_ci enum vop_dump_status vop_dump_status; 1063d0407baSopenharmony_ci struct list_head vop_dump_list_head; 1073d0407baSopenharmony_ci bool vop_dump_list_init_flag; 1083d0407baSopenharmony_ci int vop_dump_times; 1093d0407baSopenharmony_ci int frame_count; 1103d0407baSopenharmony_ci#endif 1113d0407baSopenharmony_ci}; 1123d0407baSopenharmony_ci 1133d0407baSopenharmony_cistruct rockchip_dsc_sink_cap { 1143d0407baSopenharmony_ci /** 1153d0407baSopenharmony_ci * @slice_width: the number of pixel columns that comprise the slice width 1163d0407baSopenharmony_ci * @slice_height: the number of pixel rows that comprise the slice height 1173d0407baSopenharmony_ci * @block_pred: Does block prediction 1183d0407baSopenharmony_ci * @native_420: Does sink support DSC with 4:2:0 compression 1193d0407baSopenharmony_ci * @bpc_supported: compressed bpc supported by sink : 10, 12 or 16 bpc 1203d0407baSopenharmony_ci * @version_major: DSC major version 1213d0407baSopenharmony_ci * @version_minor: DSC minor version 1223d0407baSopenharmony_ci * @target_bits_per_pixel_x16: bits num after compress and multiply 16 1233d0407baSopenharmony_ci */ 1243d0407baSopenharmony_ci u16 slice_width; 1253d0407baSopenharmony_ci u16 slice_height; 1263d0407baSopenharmony_ci bool block_pred; 1273d0407baSopenharmony_ci bool native_420; 1283d0407baSopenharmony_ci u8 bpc_supported; 1293d0407baSopenharmony_ci u8 version_major; 1303d0407baSopenharmony_ci u8 version_minor; 1313d0407baSopenharmony_ci u16 target_bits_per_pixel_x16; 1323d0407baSopenharmony_ci}; 1333d0407baSopenharmony_ci 1343d0407baSopenharmony_cistruct rockchip_crtc_state { 1353d0407baSopenharmony_ci struct drm_crtc_state base; 1363d0407baSopenharmony_ci int output_type; 1373d0407baSopenharmony_ci int output_mode; 1383d0407baSopenharmony_ci int output_bpc; 1393d0407baSopenharmony_ci int output_flags; 1403d0407baSopenharmony_ci bool enable_afbc; 1413d0407baSopenharmony_ci /** 1423d0407baSopenharmony_ci * @splice_mode: enabled when display a hdisplay > 4096 on rk3588 1433d0407baSopenharmony_ci */ 1443d0407baSopenharmony_ci bool splice_mode; 1453d0407baSopenharmony_ci 1463d0407baSopenharmony_ci /** 1473d0407baSopenharmony_ci * @hold_mode: enabled when it's: 1483d0407baSopenharmony_ci * (1) mcu hold mode 1493d0407baSopenharmony_ci * (2) mipi dsi cmd mode 1503d0407baSopenharmony_ci * (3) edp psr mode 1513d0407baSopenharmony_ci */ 1523d0407baSopenharmony_ci bool hold_mode; 1533d0407baSopenharmony_ci 1543d0407baSopenharmony_ci struct drm_tv_connector_state *tv_state; 1553d0407baSopenharmony_ci int left_margin; 1563d0407baSopenharmony_ci int right_margin; 1573d0407baSopenharmony_ci int top_margin; 1583d0407baSopenharmony_ci int bottom_margin; 1593d0407baSopenharmony_ci int vdisplay; 1603d0407baSopenharmony_ci int afbdc_win_format; 1613d0407baSopenharmony_ci int afbdc_win_width; 1623d0407baSopenharmony_ci int afbdc_win_height; 1633d0407baSopenharmony_ci int afbdc_win_ptr; 1643d0407baSopenharmony_ci int afbdc_win_id; 1653d0407baSopenharmony_ci int afbdc_en; 1663d0407baSopenharmony_ci int afbdc_win_vir_width; 1673d0407baSopenharmony_ci int afbdc_win_xoffset; 1683d0407baSopenharmony_ci int afbdc_win_yoffset; 1693d0407baSopenharmony_ci int dsp_layer_sel; 1703d0407baSopenharmony_ci u32 output_if; 1713d0407baSopenharmony_ci u32 bus_format; 1723d0407baSopenharmony_ci u32 bus_flags; 1733d0407baSopenharmony_ci int yuv_overlay; 1743d0407baSopenharmony_ci int post_r2y_en; 1753d0407baSopenharmony_ci int post_y2r_en; 1763d0407baSopenharmony_ci int post_csc_mode; 1773d0407baSopenharmony_ci int bcsh_en; 1783d0407baSopenharmony_ci int color_space; 1793d0407baSopenharmony_ci int eotf; 1803d0407baSopenharmony_ci u32 background; 1813d0407baSopenharmony_ci u32 line_flag; 1823d0407baSopenharmony_ci u8 mode_update; 1833d0407baSopenharmony_ci u8 dsc_id; 1843d0407baSopenharmony_ci u8 dsc_enable; 1853d0407baSopenharmony_ci 1863d0407baSopenharmony_ci u8 dsc_slice_num; 1873d0407baSopenharmony_ci u8 dsc_pixel_num; 1883d0407baSopenharmony_ci 1893d0407baSopenharmony_ci u64 dsc_txp_clk_rate; 1903d0407baSopenharmony_ci u64 dsc_pxl_clk_rate; 1913d0407baSopenharmony_ci u64 dsc_cds_clk_rate; 1923d0407baSopenharmony_ci 1933d0407baSopenharmony_ci struct drm_dsc_picture_parameter_set pps; 1943d0407baSopenharmony_ci struct rockchip_dsc_sink_cap dsc_sink_cap; 1953d0407baSopenharmony_ci struct rockchip_hdr_state hdr; 1963d0407baSopenharmony_ci}; 1973d0407baSopenharmony_ci 1983d0407baSopenharmony_ci#define to_rockchip_crtc_state(s) \ 1993d0407baSopenharmony_ci container_of(s, struct rockchip_crtc_state, base) 2003d0407baSopenharmony_ci 2013d0407baSopenharmony_cistruct rockchip_drm_vcnt { 2023d0407baSopenharmony_ci struct drm_pending_vblank_event *event; 2033d0407baSopenharmony_ci __u32 sequence; 2043d0407baSopenharmony_ci int pipe; 2053d0407baSopenharmony_ci}; 2063d0407baSopenharmony_ci 2073d0407baSopenharmony_cistruct rockchip_logo { 2083d0407baSopenharmony_ci dma_addr_t dma_addr; 2093d0407baSopenharmony_ci void *kvaddr; 2103d0407baSopenharmony_ci phys_addr_t start; 2113d0407baSopenharmony_ci phys_addr_t size; 2123d0407baSopenharmony_ci int count; 2133d0407baSopenharmony_ci}; 2143d0407baSopenharmony_ci 2153d0407baSopenharmony_cistruct loader_cubic_lut { 2163d0407baSopenharmony_ci bool enable; 2173d0407baSopenharmony_ci u32 offset; 2183d0407baSopenharmony_ci}; 2193d0407baSopenharmony_ci 2203d0407baSopenharmony_cistruct rockchip_drm_dsc_cap { 2213d0407baSopenharmony_ci bool v_1p2; 2223d0407baSopenharmony_ci bool native_420; 2233d0407baSopenharmony_ci bool all_bpp; 2243d0407baSopenharmony_ci u8 bpc_supported; 2253d0407baSopenharmony_ci u8 max_slices; 2263d0407baSopenharmony_ci u8 max_lanes; 2273d0407baSopenharmony_ci u8 max_frl_rate_per_lane; 2283d0407baSopenharmony_ci u8 total_chunk_kbytes; 2293d0407baSopenharmony_ci int clk_per_slice; 2303d0407baSopenharmony_ci}; 2313d0407baSopenharmony_ci 2323d0407baSopenharmony_cistruct ver_26_v0 { 2333d0407baSopenharmony_ci u8 yuv422_12bit; 2343d0407baSopenharmony_ci u8 support_2160p_60; 2353d0407baSopenharmony_ci u8 global_dimming; 2363d0407baSopenharmony_ci u8 dm_major_ver; 2373d0407baSopenharmony_ci u8 dm_minor_ver; 2383d0407baSopenharmony_ci u16 t_min_pq; 2393d0407baSopenharmony_ci u16 t_max_pq; 2403d0407baSopenharmony_ci u16 rx; 2413d0407baSopenharmony_ci u16 ry; 2423d0407baSopenharmony_ci u16 gx; 2433d0407baSopenharmony_ci u16 gy; 2443d0407baSopenharmony_ci u16 bx; 2453d0407baSopenharmony_ci u16 by; 2463d0407baSopenharmony_ci u16 wx; 2473d0407baSopenharmony_ci u16 wy; 2483d0407baSopenharmony_ci} __packed; 2493d0407baSopenharmony_ci 2503d0407baSopenharmony_cistruct ver_15_v1 { 2513d0407baSopenharmony_ci u8 yuv422_12bit; 2523d0407baSopenharmony_ci u8 support_2160p_60; 2533d0407baSopenharmony_ci u8 global_dimming; 2543d0407baSopenharmony_ci u8 dm_version; 2553d0407baSopenharmony_ci u8 colorimetry; 2563d0407baSopenharmony_ci u8 t_max_lum; 2573d0407baSopenharmony_ci u8 t_min_lum; 2583d0407baSopenharmony_ci u8 rx; 2593d0407baSopenharmony_ci u8 ry; 2603d0407baSopenharmony_ci u8 gx; 2613d0407baSopenharmony_ci u8 gy; 2623d0407baSopenharmony_ci u8 bx; 2633d0407baSopenharmony_ci u8 by; 2643d0407baSopenharmony_ci} __packed; 2653d0407baSopenharmony_ci 2663d0407baSopenharmony_cistruct ver_12_v1 { 2673d0407baSopenharmony_ci u8 yuv422_12bit; 2683d0407baSopenharmony_ci u8 support_2160p_60; 2693d0407baSopenharmony_ci u8 global_dimming; 2703d0407baSopenharmony_ci u8 dm_version; 2713d0407baSopenharmony_ci u8 colorimetry; 2723d0407baSopenharmony_ci u8 low_latency; 2733d0407baSopenharmony_ci u8 t_max_lum; 2743d0407baSopenharmony_ci u8 t_min_lum; 2753d0407baSopenharmony_ci u8 unique_rx; 2763d0407baSopenharmony_ci u8 unique_ry; 2773d0407baSopenharmony_ci u8 unique_gx; 2783d0407baSopenharmony_ci u8 unique_gy; 2793d0407baSopenharmony_ci u8 unique_bx; 2803d0407baSopenharmony_ci u8 unique_by; 2813d0407baSopenharmony_ci} __packed; 2823d0407baSopenharmony_ci 2833d0407baSopenharmony_cistruct ver_12_v2 { 2843d0407baSopenharmony_ci u8 yuv422_12bit; 2853d0407baSopenharmony_ci u8 backlt_ctrl; 2863d0407baSopenharmony_ci u8 global_dimming; 2873d0407baSopenharmony_ci u8 dm_version; 2883d0407baSopenharmony_ci u8 backlt_min_luma; 2893d0407baSopenharmony_ci u8 interface; 2903d0407baSopenharmony_ci u8 yuv444_10b_12b; 2913d0407baSopenharmony_ci u8 t_min_pq_v2; 2923d0407baSopenharmony_ci u8 t_max_pq_v2; 2933d0407baSopenharmony_ci u8 unique_rx; 2943d0407baSopenharmony_ci u8 unique_ry; 2953d0407baSopenharmony_ci u8 unique_gx; 2963d0407baSopenharmony_ci u8 unique_gy; 2973d0407baSopenharmony_ci u8 unique_bx; 2983d0407baSopenharmony_ci u8 unique_by; 2993d0407baSopenharmony_ci} __packed; 3003d0407baSopenharmony_ci 3013d0407baSopenharmony_cistruct next_hdr_sink_data { 3023d0407baSopenharmony_ci u8 version; 3033d0407baSopenharmony_ci struct ver_26_v0 ver_26_v0; 3043d0407baSopenharmony_ci struct ver_15_v1 ver_15_v1; 3053d0407baSopenharmony_ci struct ver_12_v1 ver_12_v1; 3063d0407baSopenharmony_ci struct ver_12_v2 ver_12_v2; 3073d0407baSopenharmony_ci} __packed; 3083d0407baSopenharmony_ci 3093d0407baSopenharmony_ci/* 3103d0407baSopenharmony_ci * Rockchip drm private crtc funcs. 3113d0407baSopenharmony_ci * @loader_protect: protect loader logo crtc's power 3123d0407baSopenharmony_ci * @enable_vblank: enable crtc vblank irq. 3133d0407baSopenharmony_ci * @disable_vblank: disable crtc vblank irq. 3143d0407baSopenharmony_ci * @bandwidth: report present crtc bandwidth consume. 3153d0407baSopenharmony_ci */ 3163d0407baSopenharmony_cistruct rockchip_crtc_funcs { 3173d0407baSopenharmony_ci int (*loader_protect)(struct drm_crtc *crtc, bool on); 3183d0407baSopenharmony_ci int (*enable_vblank)(struct drm_crtc *crtc); 3193d0407baSopenharmony_ci void (*disable_vblank)(struct drm_crtc *crtc); 3203d0407baSopenharmony_ci size_t (*bandwidth)(struct drm_crtc *crtc, 3213d0407baSopenharmony_ci struct drm_crtc_state *crtc_state, 3223d0407baSopenharmony_ci struct dmcfreq_vop_info *vop_bw_info); 3233d0407baSopenharmony_ci void (*cancel_pending_vblank)(struct drm_crtc *crtc, 3243d0407baSopenharmony_ci struct drm_file *file_priv); 3253d0407baSopenharmony_ci int (*debugfs_init)(struct drm_minor *minor, struct drm_crtc *crtc); 3263d0407baSopenharmony_ci int (*debugfs_dump)(struct drm_crtc *crtc, struct seq_file *s); 3273d0407baSopenharmony_ci void (*regs_dump)(struct drm_crtc *crtc, struct seq_file *s); 3283d0407baSopenharmony_ci enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, 3293d0407baSopenharmony_ci const struct drm_display_mode *mode, 3303d0407baSopenharmony_ci int output_type); 3313d0407baSopenharmony_ci void (*crtc_close)(struct drm_crtc *crtc); 3323d0407baSopenharmony_ci void (*crtc_send_mcu_cmd)(struct drm_crtc *crtc, u32 type, u32 value); 3333d0407baSopenharmony_ci void (*te_handler)(struct drm_crtc *crtc); 3343d0407baSopenharmony_ci}; 3353d0407baSopenharmony_ci 3363d0407baSopenharmony_cistruct rockchip_dclk_pll { 3373d0407baSopenharmony_ci struct clk *pll; 3383d0407baSopenharmony_ci unsigned int use_count; 3393d0407baSopenharmony_ci}; 3403d0407baSopenharmony_ci 3413d0407baSopenharmony_ci/* 3423d0407baSopenharmony_ci * Rockchip drm private structure. 3433d0407baSopenharmony_ci * 3443d0407baSopenharmony_ci * @crtc: array of enabled CRTCs, used to map from "pipe" to drm_crtc. 3453d0407baSopenharmony_ci * @num_pipe: number of pipes for this device. 3463d0407baSopenharmony_ci * @mm_lock: protect drm_mm on multi-threads. 3473d0407baSopenharmony_ci */ 3483d0407baSopenharmony_cistruct rockchip_drm_private { 3493d0407baSopenharmony_ci struct rockchip_logo *logo; 3503d0407baSopenharmony_ci struct drm_fb_helper *fbdev_helper; 3513d0407baSopenharmony_ci struct drm_gem_object *fbdev_bo; 3523d0407baSopenharmony_ci struct iommu_domain *domain; 3533d0407baSopenharmony_ci struct gen_pool *secure_buffer_pool; 3543d0407baSopenharmony_ci struct mutex mm_lock; 3553d0407baSopenharmony_ci struct drm_mm mm; 3563d0407baSopenharmony_ci struct list_head psr_list; 3573d0407baSopenharmony_ci struct mutex psr_list_lock; 3583d0407baSopenharmony_ci struct mutex commit_lock; 3593d0407baSopenharmony_ci 3603d0407baSopenharmony_ci /* private crtc prop */ 3613d0407baSopenharmony_ci struct drm_property *soc_id_prop; 3623d0407baSopenharmony_ci struct drm_property *port_id_prop; 3633d0407baSopenharmony_ci struct drm_property *aclk_prop; 3643d0407baSopenharmony_ci struct drm_property *bg_prop; 3653d0407baSopenharmony_ci struct drm_property *line_flag_prop; 3663d0407baSopenharmony_ci 3673d0407baSopenharmony_ci /* private plane prop */ 3683d0407baSopenharmony_ci struct drm_property *eotf_prop; 3693d0407baSopenharmony_ci struct drm_property *color_space_prop; 3703d0407baSopenharmony_ci struct drm_property *async_commit_prop; 3713d0407baSopenharmony_ci struct drm_property *share_id_prop; 3723d0407baSopenharmony_ci 3733d0407baSopenharmony_ci /* private connector prop */ 3743d0407baSopenharmony_ci struct drm_property *connector_id_prop; 3753d0407baSopenharmony_ci 3763d0407baSopenharmony_ci const struct rockchip_crtc_funcs *crtc_funcs[ROCKCHIP_MAX_CRTC]; 3773d0407baSopenharmony_ci 3783d0407baSopenharmony_ci struct rockchip_dclk_pll default_pll; 3793d0407baSopenharmony_ci struct rockchip_dclk_pll hdmi_pll; 3803d0407baSopenharmony_ci 3813d0407baSopenharmony_ci /* 3823d0407baSopenharmony_ci * protect some shared overlay resource 3833d0407baSopenharmony_ci * OVL_LAYER_SEL/OVL_PORT_SEL 3843d0407baSopenharmony_ci */ 3853d0407baSopenharmony_ci struct mutex ovl_lock; 3863d0407baSopenharmony_ci 3873d0407baSopenharmony_ci struct rockchip_drm_vcnt vcnt[ROCKCHIP_MAX_CRTC]; 3883d0407baSopenharmony_ci /** 3893d0407baSopenharmony_ci * @loader_protect 3903d0407baSopenharmony_ci * ignore restore_fbdev_mode_atomic when in logo on state 3913d0407baSopenharmony_ci */ 3923d0407baSopenharmony_ci bool loader_protect; 3933d0407baSopenharmony_ci 3943d0407baSopenharmony_ci dma_addr_t cubic_lut_dma_addr; 3953d0407baSopenharmony_ci void *cubic_lut_kvaddr; 3963d0407baSopenharmony_ci struct loader_cubic_lut cubic_lut[ROCKCHIP_MAX_CRTC]; 3973d0407baSopenharmony_ci}; 3983d0407baSopenharmony_ci 3993d0407baSopenharmony_ciint rockchip_drm_dma_attach_device(struct drm_device *drm_dev, 4003d0407baSopenharmony_ci struct device *dev); 4013d0407baSopenharmony_civoid rockchip_drm_dma_detach_device(struct drm_device *drm_dev, 4023d0407baSopenharmony_ci struct device *dev); 4033d0407baSopenharmony_ciint rockchip_drm_wait_vact_end(struct drm_crtc *crtc, unsigned int mstimeout); 4043d0407baSopenharmony_ciint rockchip_register_crtc_funcs(struct drm_crtc *crtc, 4053d0407baSopenharmony_ci const struct rockchip_crtc_funcs *crtc_funcs); 4063d0407baSopenharmony_civoid rockchip_unregister_crtc_funcs(struct drm_crtc *crtc); 4073d0407baSopenharmony_ci 4083d0407baSopenharmony_civoid rockchip_drm_register_sub_dev(struct rockchip_drm_sub_dev *sub_dev); 4093d0407baSopenharmony_civoid rockchip_drm_unregister_sub_dev(struct rockchip_drm_sub_dev *sub_dev); 4103d0407baSopenharmony_cistruct rockchip_drm_sub_dev *rockchip_drm_get_sub_dev(struct device_node *node); 4113d0407baSopenharmony_ciint rockchip_drm_add_modes_noedid(struct drm_connector *connector); 4123d0407baSopenharmony_civoid rockchip_drm_te_handle(struct drm_crtc *crtc); 4133d0407baSopenharmony_civoid drm_mode_convert_to_split_mode(struct drm_display_mode *mode); 4143d0407baSopenharmony_civoid drm_mode_convert_to_origin_mode(struct drm_display_mode *mode); 4153d0407baSopenharmony_ci#if IS_ENABLED(CONFIG_DRM_ROCKCHIP) 4163d0407baSopenharmony_ciint rockchip_drm_get_sub_dev_type(void); 4173d0407baSopenharmony_ci#else 4183d0407baSopenharmony_cistatic inline int rockchip_drm_get_sub_dev_type(void) 4193d0407baSopenharmony_ci{ 4203d0407baSopenharmony_ci return DRM_MODE_CONNECTOR_Unknown; 4213d0407baSopenharmony_ci} 4223d0407baSopenharmony_ci#endif 4233d0407baSopenharmony_ci 4243d0407baSopenharmony_ciint rockchip_drm_endpoint_is_subdriver(struct device_node *ep); 4253d0407baSopenharmony_ciuint32_t rockchip_drm_of_find_possible_crtcs(struct drm_device *dev, 4263d0407baSopenharmony_ci struct device_node *port); 4273d0407baSopenharmony_ciuint32_t rockchip_drm_get_bpp(const struct drm_format_info *info); 4283d0407baSopenharmony_ciint rockchip_drm_get_yuv422_format(struct drm_connector *connector, 4293d0407baSopenharmony_ci struct edid *edid); 4303d0407baSopenharmony_ciint rockchip_drm_parse_cea_ext(struct rockchip_drm_dsc_cap *dsc_cap, 4313d0407baSopenharmony_ci u8 *max_frl_rate_per_lane, u8 *max_lanes, 4323d0407baSopenharmony_ci const struct edid *edid); 4333d0407baSopenharmony_ciint rockchip_drm_parse_next_hdr(struct next_hdr_sink_data *sink_data, 4343d0407baSopenharmony_ci const struct edid *edid); 4353d0407baSopenharmony_ci 4363d0407baSopenharmony_ciextern struct platform_driver cdn_dp_driver; 4373d0407baSopenharmony_ciextern struct platform_driver dw_hdmi_rockchip_pltfm_driver; 4383d0407baSopenharmony_ciextern struct platform_driver dw_mipi_dsi_rockchip_driver; 4393d0407baSopenharmony_ciextern struct platform_driver dw_mipi_dsi2_rockchip_driver; 4403d0407baSopenharmony_ciextern struct platform_driver inno_hdmi_driver; 4413d0407baSopenharmony_ciextern struct platform_driver rockchip_dp_driver; 4423d0407baSopenharmony_ciextern struct platform_driver rockchip_lvds_driver; 4433d0407baSopenharmony_ciextern struct platform_driver vop_platform_driver; 4443d0407baSopenharmony_ciextern struct platform_driver vop2_platform_driver; 4453d0407baSopenharmony_ciextern struct platform_driver rk3066_hdmi_driver; 4463d0407baSopenharmony_ciextern struct platform_driver rockchip_rgb_driver; 4473d0407baSopenharmony_ciextern struct platform_driver dw_dp_driver; 4483d0407baSopenharmony_ciextern struct platform_driver vconn_platform_driver; 4493d0407baSopenharmony_ci#endif /* _ROCKCHIP_DRM_DRV_H_ */ 450