]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/gpu/drm/rockchip/cdn-dp-core.h
Merge remote-tracking branches 'asoc/topic/es7134', 'asoc/topic/es8328', 'asoc/topic...
[karo-tx-linux.git] / drivers / gpu / drm / rockchip / cdn-dp-core.h
1 /*
2  * Copyright (C) 2016 Chris Zhong <zyw@rock-chips.com>
3  * Copyright (C) 2016 ROCKCHIP, Inc.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14
15 #ifndef _CDN_DP_CORE_H
16 #define _CDN_DP_CORE_H
17
18 #include <drm/drmP.h>
19 #include <drm/drm_crtc_helper.h>
20 #include <drm/drm_dp_helper.h>
21 #include <drm/drm_panel.h>
22 #include "rockchip_drm_drv.h"
23
24 #define MAX_PHY         2
25
26 enum audio_format {
27         AFMT_I2S = 0,
28         AFMT_SPDIF = 1,
29         AFMT_UNUSED,
30 };
31
32 struct audio_info {
33         enum audio_format format;
34         int sample_rate;
35         int channels;
36         int sample_width;
37 };
38
39 enum vic_pxl_encoding_format {
40         PXL_RGB = 0x1,
41         YCBCR_4_4_4 = 0x2,
42         YCBCR_4_2_2 = 0x4,
43         YCBCR_4_2_0 = 0x8,
44         Y_ONLY = 0x10,
45 };
46
47 struct video_info {
48         bool h_sync_polarity;
49         bool v_sync_polarity;
50         bool interlaced;
51         int color_depth;
52         enum vic_pxl_encoding_format color_fmt;
53 };
54
55 struct cdn_firmware_header {
56         u32 size_bytes; /* size of the entire header+image(s) in bytes */
57         u32 header_size; /* size of just the header in bytes */
58         u32 iram_size; /* size of iram */
59         u32 dram_size; /* size of dram */
60 };
61
62 struct cdn_dp_port {
63         struct cdn_dp_device *dp;
64         struct notifier_block event_nb;
65         struct extcon_dev *extcon;
66         struct phy *phy;
67         u8 lanes;
68         bool phy_enabled;
69         u8 id;
70 };
71
72 struct cdn_dp_device {
73         struct device *dev;
74         struct drm_device *drm_dev;
75         struct drm_connector connector;
76         struct drm_encoder encoder;
77         struct drm_display_mode mode;
78         struct platform_device *audio_pdev;
79         struct work_struct event_work;
80         struct edid *edid;
81
82         struct mutex lock;
83         bool connected;
84         bool active;
85         bool suspended;
86
87         const struct firmware *fw;      /* cdn dp firmware */
88         unsigned int fw_version;        /* cdn fw version */
89         bool fw_loaded;
90
91         void __iomem *regs;
92         struct regmap *grf;
93         struct clk *core_clk;
94         struct clk *pclk;
95         struct clk *spdif_clk;
96         struct clk *grf_clk;
97         struct reset_control *spdif_rst;
98         struct reset_control *dptx_rst;
99         struct reset_control *apb_rst;
100         struct reset_control *core_rst;
101         struct audio_info audio_info;
102         struct video_info video_info;
103         struct drm_dp_link link;
104         struct cdn_dp_port *port[MAX_PHY];
105         u8 ports;
106         u8 lanes;
107         int active_port;
108
109         u8 dpcd[DP_RECEIVER_CAP_SIZE];
110         bool sink_has_audio;
111 };
112 #endif  /* _CDN_DP_CORE_H */