• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2007-2019 Allwinnertech Co., Ltd.
3  * Author: zhengwanyu <zhengwanyu@allwinnertech.com>
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
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 _SUNXI_HDMI20_H_
16 #define _SUNXI_HDMI20_H_
17 
18 #include <linux/delay.h>
19 #include <linux/of_address.h>
20 #include <linux/of_device.h>
21 #include <linux/of_platform.h>
22 #include <linux/dma-mapping.h>
23 #include <drm/drmP.h>
24 #include <linux/clk.h>
25 
26 #include <video/sunxi_display2.h>
27 
28 #include "sunxi_common.h"
29 #include "sunxi_hdmi.h"
30 
31 #include "hdmi_core/api/hdmitx_dev.h"
32 #include "hdmi_core/api/access.h"
33 
34 enum HDMI_VIC {
35 	HDMI_VIC_640x480P60 = 1,
36 	HDMI_VIC_720x480P60_4_3,
37 	HDMI_VIC_720x480P60_16_9,
38 	HDMI_VIC_1280x720P60,
39 	HDMI_VIC_1920x1080I60,
40 	HDMI_VIC_720x480I_4_3,
41 	HDMI_VIC_720x480I_16_9,
42 	HDMI_VIC_720x240P_4_3,
43 	HDMI_VIC_720x240P_16_9,
44 	HDMI_VIC_1920x1080P60 = 16,
45 	HDMI_VIC_720x576P_4_3,
46 	HDMI_VIC_720x576P_16_9,
47 	HDMI_VIC_1280x720P50,
48 	HDMI_VIC_1920x1080I50,
49 	HDMI_VIC_720x576I_4_3,
50 	HDMI_VIC_720x576I_16_9,
51 	HDMI_VIC_1920x1080P50 = 31,
52 	HDMI_VIC_1920x1080P24,
53 	HDMI_VIC_1920x1080P25,
54 	HDMI_VIC_1920x1080P30,
55 	HDMI_VIC_1280x720P24 = 60,
56 	HDMI_VIC_1280x720P25,
57 	HDMI_VIC_1280x720P30,
58 	HDMI_VIC_3840x2160P24 = 93,
59 	HDMI_VIC_3840x2160P25,
60 	HDMI_VIC_3840x2160P30,
61 	HDMI_VIC_3840x2160P50,
62 	HDMI_VIC_3840x2160P60,
63 	HDMI_VIC_4096x2160P24,
64 	HDMI_VIC_4096x2160P25,
65 	HDMI_VIC_4096x2160P30,
66 	HDMI_VIC_4096x2160P50,
67 	HDMI_VIC_4096x2160P60,
68 
69 	HDMI_VIC_2560x1440P60 = 0x201,
70 	HDMI_VIC_1440x2560P70 = 0x202,
71 	HDMI_VIC_1080x1920P60 = 0x203,
72 };
73 
74 #define HDMI1080P_24_3D_FP  (HDMI_VIC_1920x1080P24 + 0x80)
75 #define HDMI720P_50_3D_FP   (HDMI_VIC_1280x720P50 + 0x80)
76 #define HDMI720P_60_3D_FP   (HDMI_VIC_1280x720P60 + 0x80)
77 
78 struct cec_params {
79 	unsigned int support;
80 	unsigned int support_super_standby;
81 };
82 
83 #define POWER_CNT	4
84 #define POWER_NAME	20
85 /**
86  * sunxi_hdmi device class
87  */
88 struct sunxi_hdmi {
89 	struct platform_device *pdev;
90 
91 	/*sunxi hdmi virtual address*/
92 	void __iomem *reg_base;
93 
94 	/*hdmi clk in ccmu*/
95 	struct clk *mclk;
96 	/*hdmi's parent clk in ccmu*/
97 	struct clk *mclk_parent;
98 
99 	/*hdmi ddc clk in ccmu*/
100 	struct clk *ddc_clk;
101 
102 	/*hdmi hdcp clk in ccmu*/
103 	struct clk *hdcp_clk;
104 
105 	/*hdmi cec clk in ccmu*/
106 	struct clk *cec_clk;
107 
108 	/*name of axp power*/
109 	char		power[POWER_CNT][POWER_NAME];
110 	u32		power_count;
111 
112 	hdmi_tx_dev_t hdmi_dev;
113 	struct hdmi_dev_func dev_funcs;
114 
115 	struct sunxi_hdmi_work_mode init_params;
116 
117 	sink_edid_t sink_caps;
118 
119 	videoParams_t video;
120 	audioParams_t audio;
121 	productParams_t product;
122 	hdcpParams_t hdcp;
123 	struct cec_params cec;
124 
125 	struct disp_video_timings *video_info;
126 
127 	const struct sunxi_hdmi_funcs *funcs;
128 };
129 
130 int __init sunxi_hdmi20_module_init(void);
131 void __exit sunxi_hdmi20_module_exit(void);
132 
133 extern unsigned int __clk_get_enable_count(struct clk *clk);
134 
135 extern void hdmitx_api_init(hdmi_tx_dev_t *dev,
136 	videoParams_t *video,
137 	audioParams_t *audio,
138 	hdcpParams_t *hdcp);
139 extern void hdmitx_api_exit(void);
140 
141 #define HDMI_INFO(fmt, arg...)   DRM_INFO("[SUNXI-HDMI]"fmt, ##arg)
142 #define HDMI_ERR(fmt, arg...)   DRM_ERROR("%s()%d - "fmt, __func__, __LINE__, ##arg)
143 
144 #endif
145