hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2016 Chris Zhong <zyw@rock-chips.com>
 * Copyright (C) 2016 ROCKCHIP, Inc.
 */
 
#ifndef _CDN_DP_CORE_H
#define _CDN_DP_CORE_H
 
#include <drm/drm_dp_helper.h>
#include <drm/drm_panel.h>
#include <drm/drm_probe_helper.h>
 
#include "rockchip_drm_drv.h"
 
#define MAX_PHY        2
 
enum audio_format {
   AFMT_I2S = 0,
   AFMT_SPDIF = 1,
   AFMT_UNUSED,
};
 
struct audio_info {
   enum audio_format format;
   int sample_rate;
   int channels;
   int sample_width;
};
 
enum vic_pxl_encoding_format {
   PXL_RGB = 0x1,
   YCBCR_4_4_4 = 0x2,
   YCBCR_4_2_2 = 0x4,
   YCBCR_4_2_0 = 0x8,
   Y_ONLY = 0x10,
};
 
struct video_info {
   bool h_sync_polarity;
   bool v_sync_polarity;
   bool interlaced;
   int color_depth;
   enum vic_pxl_encoding_format color_fmt;
};
 
struct cdn_firmware_header {
   u32 size_bytes; /* size of the entire header+image(s) in bytes */
   u32 header_size; /* size of just the header in bytes */
   u32 iram_size; /* size of iram */
   u32 dram_size; /* size of dram */
};
 
struct cdn_dp_port {
   struct cdn_dp_device *dp;
   struct phy *phy;
   u8 lanes;
   bool phy_enabled;
   u8 id;
};
 
struct cdn_dp_device {
   struct device *dev;
   struct drm_device *drm_dev;
   struct drm_connector connector;
   struct drm_encoder encoder;
   struct drm_display_mode mode;
   struct platform_device *audio_pdev;
   struct delayed_work event_work;
   struct edid *edid;
   struct drm_dp_aux aux;
   struct rockchip_drm_sub_dev sub_dev;
 
   struct mutex lock;
   bool connected;
   bool active;
   bool suspended;
   bool use_fw_training;
 
   const struct firmware *fw;    /* cdn dp firmware */
   unsigned int fw_version;    /* cdn fw version */
   bool fw_loaded;
 
   void __iomem *regs;
   struct regmap *grf;
   struct clk *core_clk;
   struct clk *pclk;
   struct clk *spdif_clk;
   struct clk *grf_clk;
   struct reset_control *spdif_rst;
   struct reset_control *dptx_rst;
   struct reset_control *apb_rst;
   struct reset_control *core_rst;
   struct audio_info audio_info;
   struct video_info video_info;
   struct cdn_dp_port *port[MAX_PHY];
   u8 ports;
   u8 max_lanes;
   unsigned int max_rate;
   u8 lanes;
   int active_port;
   u8 train_set[4];
 
   u8 dpcd[DP_RECEIVER_CAP_SIZE];
   bool sink_has_audio;
};
#endif  /* _CDN_DP_CORE_H */