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