T7C: fix unable to boot after connecting with TX

PD#SWPL-128147

Revert "hdmitx: move vinfo out from format_para [1/1]"

This reverts commit 1f858a9ac0.

Revert "hdmitx: move format_para to hdmitx common [1/1]"

This reverts commit 419a23e440.

Change-Id: Id427e28805aa5ada216c0a9b4e62169ebda0201d
This commit is contained in:
Cheng Wang2
2023-06-13 18:30:19 +08:00
committed by gerrit autosubmit
parent 36019fb407
commit 7c11b56e59
33 changed files with 1060 additions and 1029 deletions
@@ -1487,14 +1487,14 @@ bool is_hdr10_src_primary_changed(void)
static bool is_match_amdv_attr(void)
{
const struct vinfo_s *vinfo = get_current_vinfo();
struct hdmitx_dev *hdev = get_hdmitx_device();
if ((dolby_vision_ll_policy == DOLBY_VISION_LL_DISABLE &&
vinfo->cs == HDMI_COLORSPACE_YUV444 &&
vinfo->cd == COLORDEPTH_24B) ||
hdev->para->cs == HDMI_COLORSPACE_YUV444 &&
hdev->para->cd == COLORDEPTH_24B) ||
(dolby_vision_ll_policy == DOLBY_VISION_LL_YUV422 &&
vinfo->cs == HDMI_COLORSPACE_YUV422 &&
vinfo->cd == COLORDEPTH_36B))
hdev->para->cs == HDMI_COLORSPACE_YUV422 &&
hdev->para->cd == COLORDEPTH_36B))
return true;
else
return false;
@@ -38,7 +38,7 @@ static struct hdmi_format_para fmt_para_1920x1080p60_16x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -88,7 +88,7 @@ static struct hdmi_format_para fmt_para_1920x1080p120_16x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080p120hz",
.mode = VMODE_HDMI,
.width = 1920,
@@ -137,7 +137,7 @@ static struct hdmi_format_para fmt_para_1920x1080p30_16x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080p30hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -186,7 +186,7 @@ static struct hdmi_format_para fmt_para_1920x1080p50_16x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080p50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -235,7 +235,7 @@ static struct hdmi_format_para fmt_para_1920x1080p25_16x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080p25hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -285,7 +285,7 @@ static struct hdmi_format_para fmt_para_1920x1080p24_16x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080p24hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -335,7 +335,7 @@ static struct hdmi_format_para fmt_para_3840x2160p30_16x9 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p30hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -385,7 +385,7 @@ static struct hdmi_format_para fmt_para_3840x2160p60_16x9 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -434,7 +434,7 @@ static struct hdmi_format_para fmt_para_3840x2160p50_16x9 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -483,7 +483,7 @@ static struct hdmi_format_para fmt_para_3840x2160p25_16x9 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p25hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -533,7 +533,7 @@ static struct hdmi_format_para fmt_para_3840x2160p24_16x9 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p24hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -582,7 +582,7 @@ static struct hdmi_format_para fmt_para_4096x2160p24_256x135 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte24hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -631,7 +631,7 @@ static struct hdmi_format_para fmt_para_4096x2160p25_256x135 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte25hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -681,7 +681,7 @@ static struct hdmi_format_para fmt_para_4096x2160p30_256x135 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte30hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -730,7 +730,7 @@ static struct hdmi_format_para fmt_para_4096x2160p50_256x135 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -780,7 +780,7 @@ static struct hdmi_format_para fmt_para_4096x2160p60_256x135 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -830,7 +830,7 @@ static struct hdmi_format_para fmt_para_1920x1080i60_16x9 = {
.v_back = 15,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080i60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -879,7 +879,7 @@ static struct hdmi_format_para fmt_para_1920x1080i50_16x9 = {
.v_back = 15,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1080i50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -929,7 +929,7 @@ static struct hdmi_format_para fmt_para_1280x720p60_16x9 = {
.v_back = 20,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "720p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -978,7 +978,7 @@ static struct hdmi_format_para fmt_para_1280x720p50_16x9 = {
.v_back = 20,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "720p50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1028,7 +1028,7 @@ static struct hdmi_format_para fmt_para_720x480p60_4x3 = {
.v_back = 30,
.v_sync_ln = 7,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "480p60hz_4x3",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1078,7 +1078,7 @@ static struct hdmi_format_para fmt_para_720x480p60_16x9 = {
.v_back = 30,
.v_sync_ln = 7,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "480p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1128,7 +1128,7 @@ static struct hdmi_format_para fmt_para_720x480i60_4x3 = {
.v_back = 15,
.v_sync_ln = 4,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "480i60hz_4x3",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1178,7 +1178,7 @@ static struct hdmi_format_para fmt_para_720x480i60_16x9 = {
.v_back = 15,
.v_sync_ln = 4,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "480i60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1227,7 +1227,7 @@ static struct hdmi_format_para fmt_para_720x576p50_4x3 = {
.v_back = 39,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "576p50hz_4x3",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1276,7 +1276,7 @@ static struct hdmi_format_para fmt_para_720x576p50_16x9 = {
.v_back = 39,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "576p50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1325,7 +1325,7 @@ static struct hdmi_format_para fmt_para_720x576i50_4x3 = {
.v_back = 19,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "576i50hz_4x3",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1374,7 +1374,7 @@ static struct hdmi_format_para fmt_para_720x576i50_16x9 = {
.v_back = 19,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "576i50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1425,7 +1425,7 @@ static struct hdmi_format_para fmt_para_3840x2160p50_16x9_y420 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p50hz420",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1474,7 +1474,7 @@ static struct hdmi_format_para fmt_para_4096x2160p50_256x135_y420 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte50hz420",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1524,7 +1524,7 @@ static struct hdmi_format_para fmt_para_3840x2160p60_16x9_y420 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160p60hz420",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1574,7 +1574,7 @@ static struct hdmi_format_para fmt_para_4096x2160p60_256x135_y420 = {
.v_back = 72,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "smpte60hz420",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1598,7 +1598,7 @@ static struct hdmi_format_para fmt_para_non_hdmi_fmt = {
.vic = HDMI_UNKNOWN,
.name = "invalid",
.sname = "invalid",
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "invalid",
.mode = VMODE_MAX,
.width = 1920,
@@ -1646,7 +1646,7 @@ static struct hdmi_format_para fmt_para_2560x1080p50_64x27 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2560x1080p50hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1694,7 +1694,7 @@ static struct hdmi_format_para fmt_para_2560x1080p60_64x27 = {
.v_back = 11,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2560x1080p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1745,7 +1745,7 @@ static struct hdmi_format_para fmt_para_vesa_640x480p60_4x3 = {
.v_back = 33,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "640x480p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1794,7 +1794,7 @@ static struct hdmi_format_para fmt_para_vesa_800x480p60_4x3 = {
.v_back = 10,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "800x480p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1843,7 +1843,7 @@ static struct hdmi_format_para fmt_para_vesa_800x600p60_4x3 = {
.v_back = 23,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "800x600p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1892,7 +1892,7 @@ static struct hdmi_format_para fmt_para_vesa_852x480p60_213x120 = {
.v_back = 40,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "852x480p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1941,7 +1941,7 @@ static struct hdmi_format_para fmt_para_vesa_854x480p60_427x240 = {
.v_back = 39,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "854x480p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -1990,7 +1990,7 @@ static struct hdmi_format_para fmt_para_vesa_1024x600p60_17x10 = {
.v_back = 29,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1024x600p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2039,7 +2039,7 @@ static struct hdmi_format_para fmt_para_vesa_1024x768p60_4x3 = {
.v_back = 29,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1024x768p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2087,7 +2087,7 @@ static struct hdmi_format_para fmt_para_vesa_1152x864p75_4x3 = {
.v_sync = 3,
.v_back = 32,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1152x864p75hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2135,7 +2135,7 @@ static struct hdmi_format_para fmt_para_vesa_1280x768p60_5x3 = {
.v_sync = 7,
.v_back = 20,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1280x768p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2184,7 +2184,7 @@ static struct hdmi_format_para fmt_para_vesa_1280x800p60_8x5 = {
.v_back = 14,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1280x800p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2232,7 +2232,7 @@ static struct hdmi_format_para fmt_para_vesa_1280x960p60_4x3 = {
.v_sync = 3,
.v_back = 36,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1280x960p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2281,7 +2281,7 @@ static struct hdmi_format_para fmt_para_vesa_1280x1024p60_5x4 = {
.v_back = 38,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1280x1024p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2330,7 +2330,7 @@ static struct hdmi_format_para fmt_para_vesa_1360x768p60_16x9 = {
.v_back = 18,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1360x768p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2379,7 +2379,7 @@ static struct hdmi_format_para fmt_para_vesa_1366x768p60_16x9 = {
.v_back = 24,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1366x768p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2428,7 +2428,7 @@ static struct hdmi_format_para fmt_para_vesa_1400x1050p60_4x3 = {
.v_back = 32,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1400x1050p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2477,7 +2477,7 @@ static struct hdmi_format_para fmt_para_vesa_1440x900p60_8x5 = {
.v_back = 25,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1440x900p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2527,7 +2527,7 @@ static struct hdmi_format_para fmt_para_vesa_1440x2560p60_9x16 = {
.v_back = 16,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1440x2560p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2576,7 +2576,7 @@ static struct hdmi_format_para fmt_para_vesa_1600x900p60_16x9 = {
.v_back = 96,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1600x900p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2625,7 +2625,7 @@ static struct hdmi_format_para fmt_para_vesa_1600x1200p60_4x3 = {
.v_back = 46,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1600x1200p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2674,7 +2674,7 @@ static struct hdmi_format_para fmt_para_vesa_1680x1050p60_8x5 = {
.v_back = 30,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1680x1050p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2723,7 +2723,7 @@ static struct hdmi_format_para fmt_para_vesa_1920x1200p60_8x5 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "1920x1200p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2772,7 +2772,7 @@ static struct hdmi_format_para fmt_para_vesa_2048x1080p24_256x135 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2048x1080p24hz",
.mode = VMODE_HDMI,
.width = 2048,
@@ -2820,7 +2820,7 @@ static struct hdmi_format_para fmt_para_vesa_2160x1200p90_9x5 = {
.v_back = 3,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2160x1200p90hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2869,7 +2869,7 @@ static struct hdmi_format_para fmt_para_vesa_2560x1440p60_16x9 = {
.v_back = 33,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2560x1440p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2918,7 +2918,7 @@ static struct hdmi_format_para fmt_para_vesa_2560x1600p60_8x5 = {
.v_back = 49,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2560x1600p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -2966,7 +2966,7 @@ static struct hdmi_format_para fmt_para_vesa_3440x1440p60_43x18 = {
.v_back = 28,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "3440x1440p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -3015,7 +3015,7 @@ static struct hdmi_format_para fmt_para_vesa_2400x1200p90_2x1 = {
.v_back = 30,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "2400x1200p90hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -3064,7 +3064,7 @@ static struct hdmi_format_para fmt_para_vesa_3840x1080p60_32x9 = {
.v_back = 36,
.v_sync_ln = 1,
},
.deprecated_vinfo = {
.hdmitx_vinfo = {
.name = "3840x1080p60hz",
.mode = VMODE_HDMI,
.frac = 0,
@@ -3151,7 +3151,7 @@ static struct hdmi_format_para *all_fmt_paras[] = {
NULL,
};
const struct hdmi_format_para *hdmi_get_fmt_paras(enum hdmi_vic vic)
struct hdmi_format_para *hdmi_get_fmt_paras(enum hdmi_vic vic)
{
int i;
@@ -3315,7 +3315,7 @@ static void hdmi_parse_attr(struct hdmi_format_para *para, char const *name)
* or 3840x2160p60hz, 2160p60hz
* or 3840x2160p60hz420, 2160p60hz420 (Y420 mode)
*/
const struct hdmi_format_para *hdmi_get_fmt_name(char const *name, char const *attr)
struct hdmi_format_para *hdmi_get_fmt_name(char const *name, char const *attr)
{
int i;
char *lname;
@@ -3353,7 +3353,6 @@ const struct hdmi_format_para *hdmi_get_fmt_name(char const *name, char const *a
hdmi_parse_attr(para, name);
hdmi_parse_attr(para, attr);
}
if (strstr(name, "420"))
para->cs = HDMI_COLORSPACE_YUV420;
@@ -3478,11 +3477,11 @@ struct vinfo_s *hdmi_get_valid_vinfo(char *mode)
mode_[i] = 0;
for (i = 0; all_fmt_paras[i]; i++) {
if (all_fmt_paras[i]->deprecated_vinfo.mode == VMODE_MAX)
if (all_fmt_paras[i]->hdmitx_vinfo.mode == VMODE_MAX)
continue;
if (strncmp(all_fmt_paras[i]->deprecated_vinfo.name, mode_,
if (strncmp(all_fmt_paras[i]->hdmitx_vinfo.name, mode_,
strlen(mode_)) == 0) {
info = &all_fmt_paras[i]->deprecated_vinfo;
info = &all_fmt_paras[i]->hdmitx_vinfo;
break;
}
}
@@ -2520,7 +2520,7 @@ bool hdmitx_edid_check_valid_mode(struct hdmitx_dev *hdev,
if (para->cs != HDMI_COLORSPACE_RGB)
return 0;
for (i = 0; vesa_t[i] && i < VESA_MAX_TIMING; i++) {
const struct hdmi_format_para *param = NULL;
struct hdmi_format_para *param = NULL;
param = hdmi_get_fmt_paras(vesa_t[i]);
if (param) {
@@ -2688,7 +2688,7 @@ enum hdmi_vic hdmitx_edid_get_VIC(struct hdmitx_dev *hdev,
struct rx_cap *prxcap = &hdev->tx_comm.rxcap;
int j;
enum hdmi_vic vic = hdmitx_edid_vic_tab_map_vic(disp_mode);
const struct hdmi_format_para *para = NULL;
struct hdmi_format_para *para = NULL;
enum hdmi_vic *vesa_t = &hdev->tx_comm.rxcap.vesa_timing[0];
enum hdmi_vic vesa_vic;
@@ -98,7 +98,6 @@ static void clear_rx_vinfo(struct hdmitx_dev *hdev);
static void edidinfo_attach_to_vinfo(struct hdmitx_dev *hdev);
static void edidinfo_detach_to_vinfo(struct hdmitx_dev *hdev);
static void update_current_para(struct hdmitx_dev *hdev);
static void update_current_para_from_mode(struct hdmitx_dev *hdev, const char *name);
static bool is_cur_tmds_div40(struct hdmitx_dev *hdev);
static void hdmitx_resend_div40(struct hdmitx_dev *hdev);
static unsigned int hdmitx_get_frame_duration(void);
@@ -404,6 +403,16 @@ static void hdmitx_early_suspend(struct early_suspend *h)
mutex_unlock(&hdmimode_mutex);
}
static int hdmitx_is_hdmi_vmode(char *mode_name)
{
enum hdmi_vic vic = hdmitx_edid_vic_tab_map_vic(mode_name);
if (vic == HDMI_UNKNOWN)
return 0;
return 1;
}
static void hdmitx_late_resume(struct early_suspend *h)
{
const struct vinfo_s *info = hdmitx_get_current_vinfo(NULL);
@@ -412,6 +421,9 @@ static void hdmitx_late_resume(struct early_suspend *h)
mutex_lock(&hdmimode_mutex);
if (info && (hdmitx_is_hdmi_vmode(info->name) == 1))
hdev->tx_hw.cntlmisc(&hdev->tx_hw, MISC_HPLL_FAKE, 0);
hdev->hpd_lock = 0;
/* update status for hpd and switch/state */
hpd_state = !!(hdev->tx_hw.cntlmisc(&hdev->tx_hw, MISC_HPD_GPI_ST, 0));
@@ -454,7 +466,6 @@ static void hdmitx_late_resume(struct early_suspend *h)
extcon_set_state(hdmitx_extcon_hdmi, EXTCON_DISP_HDMI, 1);
}
hdev->suspend_flag = false;
extcon_set_state_sync(hdmitx_extcon_hdmi, EXTCON_DISP_HDMI,
hdev->tx_comm.hpd_state);
hdmitx_set_uevent(HDMITX_HPD_EVENT, hdev->tx_comm.hpd_state);
@@ -642,7 +653,7 @@ static void edidinfo_attach_to_vinfo(struct hdmitx_dev *hdev)
mutex_lock(&getedid_mutex);
hdrinfo_to_vinfo(&info->hdr_info, hdev);
if (hdev->tx_comm.fmt_para.cd == COLORDEPTH_24B)
if (hdev->para->cd == COLORDEPTH_24B)
memset(&info->hdr_info, 0, sizeof(struct hdr_info));
rxlatency_to_vinfo(info, &hdev->tx_comm.rxcap);
hdmitx_vdev.dv_info = &hdmitx_device.tx_comm.rxcap.dv_info;
@@ -669,9 +680,9 @@ static int set_disp_mode_auto(void)
struct vinfo_s *info = NULL;
struct hdmitx_dev *hdev = &hdmitx_device;
struct hdmitx_common *tx_comm = &hdev->tx_comm;
struct hdmi_format_para *para = NULL;
unsigned char mode[32];
enum hdmi_vic vic = HDMI_UNKNOWN;
struct hdmi_format_para *para = &tx_comm->fmt_para;
mutex_lock(&hdmimode_mutex);
@@ -720,9 +731,7 @@ static int set_disp_mode_auto(void)
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_AVI_PACKET, 0);
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_VSDB_PACKET, 0);
hdev->tx_hw.cntlmisc(&hdev->tx_hw, MISC_TMDS_PHY_OP, TMDS_PHY_DISABLE);
update_current_para_from_mode(hdev, "invalid");
hdev->para = hdmi_get_fmt_name("invalid", tx_comm->fmt_attr);
if (hdev->cedst_policy)
cancel_delayed_work(&hdev->work_cedst);
mutex_unlock(&hdmimode_mutex);
@@ -755,7 +764,9 @@ static int set_disp_mode_auto(void)
strcat(mode, "420");
}
update_current_para_from_mode(hdev, mode);
para = hdmi_get_fmt_name(mode, tx_comm->fmt_attr);
hdev->para = para;
if (!hdmitx_edid_check_valid_mode(hdev, para)) {
pr_err("check failed vic: %d\n", para->vic);
mutex_unlock(&hdmimode_mutex);
@@ -763,18 +774,6 @@ static int set_disp_mode_auto(void)
}
vic = hdmitx_edid_get_VIC(hdev, mode, 1);
if (vic != HDMI_0_UNKNOWN && vic != para->vic) {
const struct hdmi_format_para *tmp = hdmi_get_fmt_paras(vic);
enum hdmi_color_depth cd = tx_comm->hdmitx_vinfo.cd;
enum hdmi_colorspace cs = tx_comm->hdmitx_vinfo.cs;
pr_info("%s update (%d) to new vic (%d-%s)\n",
__func__, para->vic, vic, tmp->sname);
memcpy(para, tmp, sizeof(struct hdmi_format_para));
para->cs = cs;
para->cd = cd;
}
if (strncmp(info->name, "2160p30hz", strlen("2160p30hz")) == 0) {
vic = HDMI_4k2k_30;
} else if (strncmp(info->name, "2160p25hz",
@@ -1529,7 +1528,7 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data)
if (hdmitx_dv_en()) {
update_current_para(hdev);
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_AVI_RGBYCC_INDIC,
hdev->tx_comm.fmt_para.cs);
hdev->para->cs);
/* if using VSIF/DOVI, then only clear DV_VS10_SIG, else disable VSIF */
if (hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_DV_VS10_SIG, 0) == 0)
hdev->hwop.setpacket(HDMI_PACKET_VEND, NULL, NULL);
@@ -1573,26 +1572,24 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data)
/* currently output y444,8bit or rgb,8bit, if exit playing,
* then switch back to 8bit mode
*/
if (hdev->tx_comm.fmt_para.cs == HDMI_COLORSPACE_YUV444 &&
hdev->tx_comm.fmt_para.cd == COLORDEPTH_24B) {
if (hdev->para->cs == HDMI_COLORSPACE_YUV444 &&
hdev->para->cd == COLORDEPTH_24B) {
/* hdev->hwop.cntlconfig(hdev, */
/* CONF_AVI_RGBYCC_INDIC, */
/* COLORSPACE_YUV444); */
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONFIG_CSC,
CSC_Y444_8BIT | CSC_UPDATE_AVI_CS);
pr_info("%s: switch back to cs:%d, cd:%d\n",
__func__, hdev->tx_comm.fmt_para.cs,
hdev->tx_comm.fmt_para.cd);
} else if (hdev->tx_comm.fmt_para.cs == HDMI_COLORSPACE_RGB &&
hdev->tx_comm.fmt_para.cd == COLORDEPTH_24B) {
__func__, hdev->para->cs, hdev->para->cd);
} else if (hdev->para->cs == HDMI_COLORSPACE_RGB &&
hdev->para->cd == COLORDEPTH_24B) {
/* hdev->hwop.cntlconfig(hdev, */
/* CONF_AVI_RGBYCC_INDIC, */
/* COLORSPACE_RGB444); */
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONFIG_CSC,
CSC_RGB_8BIT | CSC_UPDATE_AVI_CS);
pr_info("%s: switch back to cs:%d, cd:%d\n",
__func__, hdev->tx_comm.fmt_para.cs,
hdev->tx_comm.fmt_para.cd);
__func__, hdev->para->cs, hdev->para->cd);
}
spin_unlock_irqrestore(&hdev->edid_spinlock, flags);
return;
@@ -1723,9 +1720,9 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data)
/* currently output y444,8bit or rgb,8bit, and EDID
* support Y422, then switch to y422,12bit mode
*/
if ((hdev->tx_comm.fmt_para.cs == HDMI_COLORSPACE_YUV444 ||
hdev->tx_comm.fmt_para.cs == HDMI_COLORSPACE_RGB) &&
hdev->tx_comm.fmt_para.cd == COLORDEPTH_24B &&
if ((hdev->para->cs == HDMI_COLORSPACE_YUV444 ||
hdev->para->cs == HDMI_COLORSPACE_RGB) &&
hdev->para->cd == COLORDEPTH_24B &&
(hdev->tx_comm.rxcap.native_Mode & (1 << 4))) {
/* hdev->hwop.cntlconfig(hdev,*/
/* CONF_AVI_RGBYCC_INDIC, */
@@ -1742,6 +1739,7 @@ static void update_current_para(struct hdmitx_dev *hdev)
{
struct vinfo_s *info = NULL;
unsigned char mode[32];
struct hdmitx_common *tx_comm = &hdev->tx_comm;
info = hdmitx_get_current_vinfo(NULL);
if (!info)
@@ -1749,29 +1747,11 @@ static void update_current_para(struct hdmitx_dev *hdev)
memset(mode, 0, sizeof(mode));
strncpy(mode, info->name, sizeof(mode) - 1);
if (strstr(hdev->tx_comm.fmt_attr, "420")) {
if (strstr(tx_comm->fmt_attr, "420")) {
if (!strstr(mode, "420"))
strncat(mode, "420", sizeof(mode) - strlen("420") - 1);
}
update_current_para_from_mode(hdev, mode);
}
static void update_current_para_from_mode(struct hdmitx_dev *hdev, const char *name)
{
struct hdmitx_common *tx_comm = &hdev->tx_comm;
const struct hdmi_format_para *para;
para = hdmi_get_fmt_name(name, tx_comm->fmt_attr);
pr_info("get_fmt_para from %s -> %d,%s\n", name, para->vic,
para->sname ? para->sname : para->name);
memcpy(&tx_comm->fmt_para, para, sizeof(struct hdmi_format_para));
memcpy(&tx_comm->hdmitx_vinfo, &para->deprecated_vinfo, sizeof(struct vinfo_s));
/*dynamic info, always need set.s*/
tx_comm->hdmitx_vinfo.cs = para->cs;
tx_comm->hdmitx_vinfo.cd = para->cd;
hdev->para = hdmi_get_fmt_name(mode, tx_comm->fmt_attr);
}
struct vsif_debug_save vsif_debug_info;
@@ -1783,7 +1763,6 @@ static void hdmitx_set_vsif_pkt(enum eotf_type type,
bool signal_sdr)
{
struct hdmitx_dev *hdev = &hdmitx_device;
struct hdmitx_common *tx_comm = &hdmitx_device.tx_comm;
struct dv_vsif_para para = {0};
unsigned char VEN_HB[3] = {0x81, 0x01};
unsigned char VEN_DB1[24] = {0x00};
@@ -1947,7 +1926,7 @@ static void hdmitx_set_vsif_pkt(enum eotf_type type,
pr_info("hdmitx: H14b VSIF, switching signal to SDR\n");
update_current_para(hdev);
hdev->tx_hw.cntlconfig(&hdev->tx_hw,
CONF_AVI_RGBYCC_INDIC, tx_comm->fmt_para.cs);
CONF_AVI_RGBYCC_INDIC, hdev->para->cs);
hdev->tx_hw.cntlconfig(&hdev->tx_hw,
CONF_AVI_Q01, RGB_RANGE_LIM);
hdev->tx_hw.cntlconfig(&hdev->tx_hw,
@@ -2087,10 +2066,10 @@ static void hdmitx_set_vsif_pkt(enum eotf_type type,
pr_info("hdmitx: Dolby VSIF, switching signal to SDR\n");
update_current_para(hdev);
pr_info("vic:%d, cd:%d, cs:%d, cr:%d\n",
tx_comm->fmt_para.timing.vic, tx_comm->fmt_para.cd,
tx_comm->fmt_para.cs, tx_comm->fmt_para.cr);
hdev->para->vic, hdev->para->cd,
hdev->para->cs, hdev->para->cr);
hdev->tx_hw.cntlconfig(&hdev->tx_hw,
CONF_AVI_RGBYCC_INDIC, tx_comm->fmt_para.cs);
CONF_AVI_RGBYCC_INDIC, hdev->para->cs);
hdev->tx_hw.cntlconfig(&hdev->tx_hw,
CONF_AVI_Q01, RGB_RANGE_DEFAULT);
hdev->tx_hw.cntlconfig(&hdev->tx_hw,
@@ -2489,43 +2468,44 @@ static ssize_t config_show(struct device *dev,
pos += snprintf(buf + pos, PAGE_SIZE,
"cur_video_param->VIC=%d\n",
hdev->cur_video_param->VIC);
switch (hdev->tx_comm.fmt_para.cd) {
case COLORDEPTH_24B:
conf = "8bit";
break;
case COLORDEPTH_30B:
conf = "10bit";
break;
case COLORDEPTH_36B:
conf = "12bit";
break;
case COLORDEPTH_48B:
conf = "16bit";
break;
default:
conf = "reserved";
if (hdev->para) {
switch (hdev->para->cd) {
case COLORDEPTH_24B:
conf = "8bit";
break;
case COLORDEPTH_30B:
conf = "10bit";
break;
case COLORDEPTH_36B:
conf = "12bit";
break;
case COLORDEPTH_48B:
conf = "16bit";
break;
default:
conf = "reserved";
}
pos += snprintf(buf + pos, PAGE_SIZE, "colordepth: %s\n",
conf);
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
conf = "RGB";
break;
case HDMI_COLORSPACE_YUV422:
conf = "422";
break;
case HDMI_COLORSPACE_YUV444:
conf = "444";
break;
case HDMI_COLORSPACE_YUV420:
conf = "420";
break;
default:
conf = "reserved";
}
pos += snprintf(buf + pos, PAGE_SIZE, "colorspace: %s\n",
conf);
}
pos += snprintf(buf + pos, PAGE_SIZE, "colordepth: %s\n",
conf);
switch (hdev->tx_comm.fmt_para.cs) {
case HDMI_COLORSPACE_RGB:
conf = "RGB";
break;
case HDMI_COLORSPACE_YUV422:
conf = "422";
break;
case HDMI_COLORSPACE_YUV444:
conf = "444";
break;
case HDMI_COLORSPACE_YUV420:
conf = "420";
break;
default:
conf = "reserved";
}
pos += snprintf(buf + pos, PAGE_SIZE, "colorspace: %s\n",
conf);
switch (hdev->tx_aud_cfg) {
case 0:
@@ -2941,7 +2921,7 @@ static int is_4k50_fmt(char *mode)
}
/* check the resolution is over 1920x1080 or not */
static bool is_over_1080p(const struct hdmi_format_para *para)
static bool is_over_1080p(struct hdmi_format_para *para)
{
if (!para)
return 1;
@@ -2953,7 +2933,7 @@ static bool is_over_1080p(const struct hdmi_format_para *para)
}
/* check the fresh rate is over 60hz or not */
static bool is_over_60hz(const struct hdmi_format_para *para)
static bool is_over_60hz(struct hdmi_format_para *para)
{
if (!para)
return 1;
@@ -2965,7 +2945,7 @@ static bool is_over_60hz(const struct hdmi_format_para *para)
}
/* test current vic is over 150MHz or not */
static bool is_over_pixel_150mhz(const struct hdmi_format_para *para)
static bool is_over_pixel_150mhz(struct hdmi_format_para *para)
{
if (!para)
return 1;
@@ -2978,7 +2958,7 @@ static bool is_over_pixel_150mhz(const struct hdmi_format_para *para)
bool validate_mode_refreshrate(enum hdmi_vic vic, u32 maxfreq)
{
const struct hdmi_format_para *para = hdmi_get_fmt_paras(vic);
struct hdmi_format_para *para = hdmi_get_fmt_paras(vic);
/* if the vic equals to HDMI_UNKNOWN or VESA,
* then create it as over limited
@@ -2997,7 +2977,7 @@ bool validate_mode_refreshrate(enum hdmi_vic vic, u32 maxfreq)
bool is_vic_over_limited_1080p(enum hdmi_vic vic)
{
const struct hdmi_format_para *para = hdmi_get_fmt_paras(vic);
struct hdmi_format_para *para = hdmi_get_fmt_paras(vic);
/* if the vic equals to HDMI_UNKNOWN or VESA,
* then create it as over limited
@@ -3133,7 +3113,7 @@ static ssize_t vesa_cap_show(struct device *dev,
char *buf)
{
int i;
const struct hdmi_format_para *para = NULL;
struct hdmi_format_para *para = NULL;
enum hdmi_vic *vesa_t = &hdmitx_device.tx_comm.rxcap.vesa_timing[0];
int pos = 0;
@@ -4947,8 +4927,8 @@ static ssize_t hdmitx_basic_config_show(struct device *dev,
pos += snprintf(buf + pos, PAGE_SIZE,
"cur_video_param->VIC=%d\n",
hdev->cur_video_param->VIC);
if (hdev->tx_comm.fmt_para.timing.vic != HDMI_0_UNKNOWN) {
switch (hdev->tx_comm.fmt_para.cd) {
if (hdev->para) {
switch (hdev->para->cd) {
case COLORDEPTH_24B:
conf = "8bit";
break;
@@ -4966,7 +4946,7 @@ static ssize_t hdmitx_basic_config_show(struct device *dev,
}
pos += snprintf(buf + pos, PAGE_SIZE, "colordepth: %s\n",
conf);
switch (hdev->tx_comm.fmt_para.cs) {
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
conf = "RGB";
break;
@@ -5807,13 +5787,12 @@ static int hdmitx_vmode_is_supported(enum vmode_e mode, void *data)
static int hdmitx_module_disable(enum vmode_e cur_vmod, void *data)
{
struct hdmitx_dev *hdev = &hdmitx_device;
struct hdmitx_common *tx_comm = &hdev->tx_comm;
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_AVI_PACKET, 0);
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_VSDB_PACKET, 0);
hdev->tx_hw.cntlmisc(&hdev->tx_hw, MISC_TMDS_PHY_OP, TMDS_PHY_DISABLE);
update_current_para_from_mode(hdev, "invalid");
hdev->para = hdmi_get_fmt_name("invalid", tx_comm->fmt_attr);
hdmitx_validate_vmode("null", 0, NULL);
if (hdev->cedst_policy)
cancel_delayed_work(&hdev->work_cedst);
@@ -6520,7 +6499,7 @@ int tv_audio_support(int type, struct rx_cap *prxcap)
static bool is_cur_tmds_div40(struct hdmitx_dev *hdev)
{
struct hdmitx_common *tx_comm = &hdev->tx_comm;
const struct hdmi_format_para *para1 = NULL;
struct hdmi_format_para *para1 = NULL;
struct hdmi_format_para *para2 = NULL;
unsigned int act_clk = 0;
@@ -6646,18 +6625,17 @@ static int get_dt_vend_init_data(struct device_node *np,
static void hdmitx_fmt_attr(struct hdmitx_dev *hdev)
{
struct hdmitx_common *tx_comm = &hdev->tx_comm;
struct hdmi_format_para *para = &tx_comm->fmt_para;
if (strlen(tx_comm->fmt_attr) >= 8) {
pr_debug(SYS "fmt_attr %s\n", tx_comm->fmt_attr);
return;
}
if (para->cd == COLORDEPTH_RESERVED &&
para->cs == HDMI_COLORSPACE_RESERVED6) {
if (hdev->para->cd == COLORDEPTH_RESERVED &&
hdev->para->cs == HDMI_COLORSPACE_RESERVED6) {
strcpy(tx_comm->fmt_attr, "default");
} else {
memset(tx_comm->fmt_attr, 0, sizeof(tx_comm->fmt_attr));
switch (para->cs) {
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
memcpy(tx_comm->fmt_attr, "rgb,", 5);
break;
@@ -6673,7 +6651,7 @@ static void hdmitx_fmt_attr(struct hdmitx_dev *hdev)
default:
break;
}
switch (para->cd) {
switch (hdev->para->cd) {
case COLORDEPTH_24B:
strcat(tx_comm->fmt_attr, "8bit");
break;
@@ -6895,6 +6873,8 @@ static void hdmitx_hdr_state_init(struct hdmitx_dev *hdev)
static int amhdmitx_device_init(struct hdmitx_dev *hdmi_dev, struct hdmitx_boot_param *params)
{
struct hdmitx_common *tx_comm = &hdmi_dev->tx_comm;
if (!hdmi_dev)
return 1;
@@ -6905,8 +6885,8 @@ static int amhdmitx_device_init(struct hdmitx_dev *hdmi_dev, struct hdmitx_boot_
hdmitx_device.physical_addr = 0xffff;
/* init para for NULL protection */
update_current_para_from_mode(hdmi_dev, "invalid");
hdmitx_device.para = hdmi_get_fmt_name("invalid",
tx_comm->fmt_attr);
hdmitx_device.hdmi_last_hdr_mode = 0;
hdmitx_device.hdmi_current_hdr_mode = 0;
/* hdr/vsif packet status init, no need to get actual status,
@@ -7842,8 +7822,8 @@ bool drm_hdmitx_chk_mode_attr_sup(char *mode, char *attr)
static int drm_hdmitx_get_timing_para(int vic, struct drm_hdmitx_timing_para *para)
{
const struct hdmi_format_para *hdmi_para;
const struct hdmi_cea_timing *timing;
struct hdmi_format_para *hdmi_para;
struct hdmi_cea_timing *timing;
hdmi_para = hdmi_get_fmt_paras(vic);
if (hdmi_para->vic == HDMI_UNKNOWN)
@@ -7851,11 +7831,11 @@ static int drm_hdmitx_get_timing_para(int vic, struct drm_hdmitx_timing_para *pa
timing = &hdmi_para->timing;
strncpy(para->name, hdmi_para->deprecated_vinfo.name, DRM_DISPLAY_MODE_LEN);
para->sync_dura_num = hdmi_para->deprecated_vinfo.sync_duration_num;
para->sync_dura_den = hdmi_para->deprecated_vinfo.sync_duration_den;
if (hdmi_para->deprecated_vinfo.field_height !=
hdmi_para->deprecated_vinfo.height)
strncpy(para->name, hdmi_para->hdmitx_vinfo.name, DRM_DISPLAY_MODE_LEN);
para->sync_dura_num = hdmi_para->hdmitx_vinfo.sync_duration_num;
para->sync_dura_den = hdmi_para->hdmitx_vinfo.sync_duration_den;
if (hdmi_para->hdmitx_vinfo.field_height !=
hdmi_para->hdmitx_vinfo.height)
para->pi_mode = 0;
else
para->pi_mode = 1;
@@ -24,7 +24,7 @@ void scdc_config(struct hdmitx_dev *hdev)
/* if change to > 3.4Gbps mode, or change from > 3.4Gbps
* to < 3.4Gbps mode, need to forcely update clk ratio
*/
if (hdev->tx_comm.fmt_para.tmds_clk_div40)
if (hdev->para->tmds_clk_div40)
scdc_wr_sink(TMDS_CFG, 3);
else if (hdev->tx_comm.rxcap.scdc_present ||
hdev->pre_tmds_clk_div40)
@@ -931,7 +931,6 @@ static int is_dvi_device(struct rx_cap *prxcap)
int hdmitx_set_display(struct hdmitx_dev *hdev, enum hdmi_vic videocode)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmitx_vidpara *param = NULL;
enum hdmi_vic vic;
int i, ret = -1;
@@ -983,13 +982,13 @@ int hdmitx_set_display(struct hdmitx_dev *hdev, enum hdmi_vic videocode)
}
if (param->color == HDMI_COLORSPACE_RGB) {
para->cs = hdev->cur_video_param->color;
hdev->para->cs = hdev->cur_video_param->color;
pr_info(VID "rx edid only support RGB format\n");
}
if (videocode >= HDMITX_VESA_OFFSET) {
para->cs = HDMI_COLORSPACE_RGB;
para->cd = COLORDEPTH_24B;
hdev->para->cs = HDMI_COLORSPACE_RGB;
hdev->para->cd = COLORDEPTH_24B;
pr_info("hdmitx: VESA only support RGB format\n");
}
@@ -453,8 +453,6 @@ static void set_vmode_clk(struct hdmitx_dev *hdev)
static void hdmi_hwp_init(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
hdmitx_set_sys_clk(hdev, 0xff);
hdmitx_set_cts_hdcp22_clk(hdev);
hdmitx_set_hdcp_pclk(hdev);
@@ -487,55 +485,55 @@ static void hdmi_hwp_init(struct hdmitx_dev *hdev)
/* Get uboot output color space from AVI */
switch (hdmitx_rd_reg(HDMITX_DWC_FC_AVICONF0) & 0x3) {
case 1:
para->cs = HDMI_COLORSPACE_YUV422;
hdev->para->cs = HDMI_COLORSPACE_YUV422;
break;
case 2:
para->cs = HDMI_COLORSPACE_YUV444;
hdev->para->cs = HDMI_COLORSPACE_YUV444;
break;
case 3:
para->cs = HDMI_COLORSPACE_YUV420;
hdev->para->cs = HDMI_COLORSPACE_YUV420;
break;
default:
para->cs = HDMI_COLORSPACE_RGB;
hdev->para->cs = HDMI_COLORSPACE_RGB;
break;
}
/* If color space is not 422, then get depth from VP_PR_CD */
if (para->cs != HDMI_COLORSPACE_YUV422) {
if (hdev->para->cs != HDMI_COLORSPACE_YUV422) {
switch ((hdmitx_rd_reg(HDMITX_DWC_VP_PR_CD) >> 4) &
0xf) {
case 5:
para->cd = COLORDEPTH_30B;
hdev->para->cd = COLORDEPTH_30B;
break;
case 6:
para->cd = COLORDEPTH_36B;
hdev->para->cd = COLORDEPTH_36B;
break;
case 7:
para->cd = COLORDEPTH_48B;
hdev->para->cd = COLORDEPTH_48B;
break;
case 0:
case 4:
default:
para->cd = COLORDEPTH_24B;
hdev->para->cd = COLORDEPTH_24B;
break;
}
} else {
/* If colorspace is 422, then get depth from VP_REMAP */
switch (hdmitx_rd_reg(HDMITX_DWC_VP_REMAP) & 0x3) {
case 1:
para->cd = COLORDEPTH_30B;
hdev->para->cd = COLORDEPTH_30B;
break;
case 2:
para->cd = COLORDEPTH_36B;
hdev->para->cd = COLORDEPTH_36B;
break;
case 0:
default:
para->cd = COLORDEPTH_24B;
hdev->para->cd = COLORDEPTH_24B;
break;
}
}
} else {
para->cd = COLORDEPTH_RESERVED;
para->cs = HDMI_COLORSPACE_RESERVED6;
hdev->para->cd = COLORDEPTH_RESERVED;
hdev->para->cs = HDMI_COLORSPACE_RESERVED6;
/* reset HDMITX APB & TX & PHY */
hdmitx_sys_reset();
if (hdev->data->chip_type < MESON_CPU_ID_G12A) {
@@ -1382,8 +1380,8 @@ static void hdmi_tvenc_vesa_set(struct hdmitx_vidpara *param)
unsigned long vs_adjust = 0;
unsigned long vs_bline_evn = 0, vs_eline_evn = 0;
unsigned long vso_begin_evn = 0;
const struct hdmi_format_para *vpara = NULL;
const struct hdmi_cea_timing *vtiming = NULL;
struct hdmi_format_para *vpara = NULL;
struct hdmi_cea_timing *vtiming = NULL;
vpara = hdmi_get_fmt_paras(param->VIC);
if (!vpara) {
@@ -1506,8 +1504,8 @@ static void hdmi_tvenc_set(struct hdmitx_vidpara *param)
unsigned long vs_adjust = 0;
unsigned long vs_bline_evn = 0, vs_eline_evn = 0;
unsigned long vso_begin_evn = 0;
const struct hdmi_format_para *hdmi_encp_para = NULL;
const struct hdmi_cea_timing *hdmi_encp_timing = NULL;
struct hdmi_format_para *hdmi_encp_para = NULL;
struct hdmi_cea_timing *hdmi_encp_timing = NULL;
if ((param->VIC & HDMITX_VESA_OFFSET) == HDMITX_VESA_OFFSET) {
/* VESA modes setting */
@@ -1947,7 +1945,6 @@ static void set_phy_by_mode(unsigned int mode)
static void hdmitx_set_phy(struct hdmitx_dev *hdev)
{
unsigned int phy_addr = 0;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
if (!hdev)
return;
@@ -1994,12 +1991,12 @@ do { \
case HDMI_3840x2160p60_16x9:
case HDMI_4096x2160p50_256x135:
case HDMI_4096x2160p60_256x135:
if (para->cs != HDMI_COLORSPACE_YUV420)
if (hdev->para->cs != HDMI_COLORSPACE_YUV420)
set_phy_by_mode(HDMI_PHYPARA_6G);
else
if (para->cd == COLORDEPTH_36B)
if (hdev->para->cd == COLORDEPTH_36B)
set_phy_by_mode(HDMI_PHYPARA_4p5G);
else if (para->cd == COLORDEPTH_30B)
else if (hdev->para->cd == COLORDEPTH_30B)
set_phy_by_mode(HDMI_PHYPARA_3p7G);
else
set_phy_by_mode(HDMI_PHYPARA_3G);
@@ -2008,9 +2005,9 @@ do { \
case HDMI_3840x2160p60_16x9_Y420:
case HDMI_4096x2160p50_256x135_Y420:
case HDMI_4096x2160p60_256x135_Y420:
if (para->cd == COLORDEPTH_36B)
if (hdev->para->cd == COLORDEPTH_36B)
set_phy_by_mode(HDMI_PHYPARA_4p5G);
else if (para->cd == COLORDEPTH_30B)
else if (hdev->para->cd == COLORDEPTH_30B)
set_phy_by_mode(HDMI_PHYPARA_3p7G);
else
set_phy_by_mode(HDMI_PHYPARA_3G);
@@ -2023,13 +2020,13 @@ do { \
case HDMI_4k2k_smpte_24:
case HDMI_4096x2160p25_256x135:
case HDMI_4096x2160p30_256x135:
if (para->cs == HDMI_COLORSPACE_YUV422 ||
para->cd == COLORDEPTH_24B)
if (hdev->para->cs == HDMI_COLORSPACE_YUV422 ||
hdev->para->cd == COLORDEPTH_24B)
set_phy_by_mode(HDMI_PHYPARA_3G);
else
if (para->cd == COLORDEPTH_36B)
if (hdev->para->cd == COLORDEPTH_36B)
set_phy_by_mode(HDMI_PHYPARA_4p5G);
else if (para->cd == COLORDEPTH_30B)
else if (hdev->para->cd == COLORDEPTH_30B)
set_phy_by_mode(HDMI_PHYPARA_3p7G);
else
set_phy_by_mode(HDMI_PHYPARA_3G);
@@ -2066,18 +2063,16 @@ static void set_tmds_clk_div40(unsigned int div40)
static void hdmitx_set_scdc(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
switch (hdev->cur_video_param->VIC) {
case HDMI_3840x2160p50_16x9:
case HDMI_3840x2160p60_16x9:
case HDMI_4096x2160p50_256x135:
case HDMI_4096x2160p60_256x135:
if (para->cs == HDMI_COLORSPACE_YUV420 &&
para->cd == COLORDEPTH_24B)
para->tmds_clk_div40 = 0;
if (hdev->para->cs == HDMI_COLORSPACE_YUV420 &&
hdev->para->cd == COLORDEPTH_24B)
hdev->para->tmds_clk_div40 = 0;
else
para->tmds_clk_div40 = 1;
hdev->para->tmds_clk_div40 = 1;
break;
case HDMI_3840x2160p50_16x9_Y420:
case HDMI_3840x2160p60_16x9_Y420:
@@ -2085,10 +2080,10 @@ static void hdmitx_set_scdc(struct hdmitx_dev *hdev)
case HDMI_4096x2160p60_256x135_Y420:
case HDMI_3840x2160p50_64x27_Y420:
case HDMI_3840x2160p60_64x27_Y420:
if (para->cd == COLORDEPTH_24B)
para->tmds_clk_div40 = 0;
if (hdev->para->cd == COLORDEPTH_24B)
hdev->para->tmds_clk_div40 = 0;
else
para->tmds_clk_div40 = 1;
hdev->para->tmds_clk_div40 = 1;
break;
case HDMI_3840x2160p24_16x9:
case HDMI_3840x2160p24_64x27:
@@ -2099,29 +2094,28 @@ static void hdmitx_set_scdc(struct hdmitx_dev *hdev)
case HDMI_3840x2160p30_16x9:
case HDMI_3840x2160p30_64x27:
case HDMI_4096x2160p30_256x135:
if (para->cs == HDMI_COLORSPACE_YUV422 ||
para->cd == COLORDEPTH_24B)
para->tmds_clk_div40 = 0;
if (hdev->para->cs == HDMI_COLORSPACE_YUV422 ||
hdev->para->cd == COLORDEPTH_24B)
hdev->para->tmds_clk_div40 = 0;
else
para->tmds_clk_div40 = 1;
hdev->para->tmds_clk_div40 = 1;
break;
case HDMIV_2560x1600p60hz:
para->tmds_clk_div40 = 0;
hdev->para->tmds_clk_div40 = 0;
break;
default:
para->tmds_clk_div40 = 0;
hdev->para->tmds_clk_div40 = 0;
break;
}
set_tmds_clk_div40(para->tmds_clk_div40);
set_tmds_clk_div40(hdev->para->tmds_clk_div40);
scdc_config(hdev);
hdev->pre_tmds_clk_div40 = para->tmds_clk_div40;
hdev->div40 = para->tmds_clk_div40;
hdev->pre_tmds_clk_div40 = hdev->para->tmds_clk_div40;
hdev->div40 = hdev->para->tmds_clk_div40;
}
void hdmitx_set_enc_hw(struct hdmitx_dev *hdev)
{
unsigned int data32 = 0;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
set_vmode_enc_hw(hdev);
@@ -2168,7 +2162,7 @@ void hdmitx_set_enc_hw(struct hdmitx_dev *hdev)
(0 << 4) | /* [4]dith_en: disable dithering */
(0 << 5) |
(0 << 6)); /* [ 9: 6] hdmi_dith10_cntl. */
if (para->cs == HDMI_COLORSPACE_YUV420) {
if (hdev->para->cs == HDMI_COLORSPACE_YUV420) {
hd_set_reg_bits(P_VPU_HDMI_FMT_CTRL, 2, 0, 2);
hd_set_reg_bits(P_VPU_HDMI_SETTING, 0, 4, 4);
hd_set_reg_bits(P_VPU_HDMI_SETTING, 1, 8, 1);
@@ -2177,7 +2171,7 @@ void hdmitx_set_enc_hw(struct hdmitx_dev *hdev)
hd_set_reg_bits(P_VPU_HDMI_SETTING, 0, 8, 1);
}
if (para->cs == HDMI_COLORSPACE_YUV422) {
if (hdev->para->cs == HDMI_COLORSPACE_YUV422) {
hd_set_reg_bits(P_VPU_HDMI_FMT_CTRL, 1, 0, 2);
hd_set_reg_bits(P_VPU_HDMI_SETTING, 0, 4, 4);
}
@@ -2201,7 +2195,7 @@ void hdmitx_set_enc_hw(struct hdmitx_dev *hdev)
break;
}
switch (para->cd) {
switch (hdev->para->cd) {
case COLORDEPTH_30B:
case COLORDEPTH_36B:
case COLORDEPTH_48B:
@@ -2671,7 +2665,6 @@ static int set_aud_acr_pkt(struct hdmitx_dev *hdev,
unsigned int aud_n_para;
unsigned int char_rate;
static unsigned int pre_aud_n_para;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
/* audio packetizer config */
hdmitx_wr_reg(HDMITX_DWC_AUD_INPUTCLKFS, audio_param->aud_src_if ? 4 : 0);
@@ -2680,16 +2673,16 @@ static int set_aud_acr_pkt(struct hdmitx_dev *hdev,
audio_param->type == CT_DTS_HD_MA)
hdmitx_wr_reg(HDMITX_DWC_AUD_INPUTCLKFS, 2);
if (hdev->tx_comm.frac_rate_policy && para->timing.frac_freq)
char_rate = para->timing.frac_freq;
if (hdev->tx_comm.frac_rate_policy && hdev->para->timing.frac_freq)
char_rate = hdev->para->timing.frac_freq;
else
char_rate = para->timing.pixel_freq;
if (para->cs == HDMI_COLORSPACE_YUV422)
char_rate = hdev->para->timing.pixel_freq;
if (hdev->para->cs == HDMI_COLORSPACE_YUV422)
aud_n_para = hdmi_get_aud_n_paras(audio_param->sample_rate,
COLORDEPTH_24B, char_rate);
else
aud_n_para = hdmi_get_aud_n_paras(audio_param->sample_rate,
para->cd, char_rate);
hdev->para->cd, char_rate);
/* N must multiples 4 for DD+ */
switch (audio_param->type) {
case CT_DD_P:
@@ -3122,7 +3115,7 @@ static void mode420_half_horizontal_para(void)
static void hdmitx_set_fake_vic(struct hdmitx_dev *hdev)
{
hdev->tx_comm.fmt_para.cs = HDMI_COLORSPACE_YUV444;
hdev->para->cs = HDMI_COLORSPACE_YUV444;
hdev->tx_comm.cur_VIC = HDMI_VIC_FAKE;
set_vmode_clk(hdev);
}
@@ -3178,7 +3171,6 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
struct extcon_dev *hdmitx_extcon_hdmi = get_hdmitx_extcon_hdmi();
struct extcon_dev *extcon_event_type;
static enum hdmitx_event event_type = HDMITX_NONE_EVENT;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
while ((buf[i]) && (buf[i] != ',') && (buf[i] != ' ')) {
tmpbuf[i] = buf[i];
@@ -3208,7 +3200,7 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
hdev->bist_lock = 1;
hdmitx_wr_reg(HDMITX_DWC_FC_VSDSIZE, 0x05);
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_AVI_RGBYCC_INDIC,
para->cs);
hdev->para->cs);
if (hdev->data->chip_type < MESON_CPU_ID_SC2)
hd_set_reg_bits(P_HHI_GCLK_OTHER, 1, 3, 1);
hd_set_reg_bits(P_ENCP_VIDEO_MODE_ADV, 0, 3, 1);
@@ -4461,7 +4453,7 @@ static void hdmitx_debug_bist(struct hdmitx_dev *hdev, unsigned int num)
/*hdev->bist_lock = 1;*/
/*hdmitx_wr_reg(HDMITX_DWC_FC_VSDSIZE, 0x05);
*hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_AVI_RGBYCC_INDIC,
* hdev->tx_comm.fmt_para.cs);
* hdev->para->cs);
*/
if (hdev->data->chip_type < MESON_CPU_ID_SC2)
hd_set_reg_bits(P_HHI_GCLK_OTHER, 1, 3, 1);
@@ -5233,7 +5225,7 @@ static void hdmitx_dith_ctrl(struct hdmitx_dev *hdev)
{
unsigned int hs_flag = 0;
switch (hdev->tx_comm.fmt_para.cd) {
switch (hdev->para->cd) {
case COLORDEPTH_30B:
case COLORDEPTH_36B:
case COLORDEPTH_48B:
@@ -5596,7 +5588,7 @@ static int hdmitx_cntl_config(struct hdmitx_hw_common *tx_hw, unsigned int cmd,
hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF2, 6, 4, 3);
}
if (argv == CLR_AVI_BT2020)
hdmitx_set_avi_colorimetry(&hdev->tx_comm.fmt_para);
hdmitx_set_avi_colorimetry(hdev->para);
break;
case CONF_GET_AVI_BT2020:
if (((hdmitx_rd_reg(HDMITX_DWC_FC_AVICONF1) & 0xC0) == 0xC0) &&
@@ -6175,7 +6167,7 @@ static void config_hdmi20_tx(enum hdmi_vic vic,
unsigned char input_color_format,
unsigned char output_color_format)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
struct hdmi_cea_timing *t = &para->timing;
unsigned long data32;
unsigned char vid_map;
@@ -6479,7 +6471,7 @@ static void config_hdmi20_tx(enum hdmi_vic vic,
data32 = t->v_sync & 0x3f;
hdmitx_wr_reg(HDMITX_DWC_FC_VSYNCINWIDTH, data32);
if (para->cs == HDMI_COLORSPACE_YUV420)
if (hdev->para->cs == HDMI_COLORSPACE_YUV420)
mode420_half_horizontal_para();
/* control period duration (typ 12 tmds periods) */
@@ -6999,14 +6991,27 @@ static void hdmitx_csc_config(unsigned char input_color_format,
static void hdmitx_set_hw(struct hdmitx_dev *hdev)
{
const struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
enum hdmi_vic vic = HDMI_UNKNOWN;
struct hdmi_format_para *para = NULL;
pr_info(HW " config hdmitx IP vic = %d cd:%d cs: %d\n",
para->vic, para->cd, para->cs);
if (!hdev->cur_video_param) {
pr_info("error at null vidpara!\n");
return;
}
config_hdmi20_tx(para->vic, hdev,
para->cd,
TX_INPUT_COLOR_FORMAT,
para->cs);
vic = (enum hdmi_vic)hdev->cur_video_param->VIC;
para = hdmi_get_fmt_paras(vic);
if (!para) {
pr_info("error at %s[%d] vic = %d\n", __func__, __LINE__, vic);
return;
}
pr_info(HW " config hdmitx IP vic = %d cd:%d cs: %d\n", vic,
hdev->para->cd, hdev->para->cs);
config_hdmi20_tx(vic, hdev,
hdev->para->cd,
TX_INPUT_COLOR_FORMAT,
hdev->para->cs);
}
@@ -922,8 +922,8 @@ static void hdmitx_set_clk_(struct hdmitx_dev *hdev,
int j = 0;
struct hw_enc_clk_val_group *p_enc = NULL;
enum hdmi_vic vic = hdev->tx_comm.cur_VIC;
enum hdmi_colorspace cs = hdev->tx_comm.fmt_para.cs;
enum hdmi_color_depth cd = hdev->tx_comm.fmt_para.cd;
enum hdmi_colorspace cs = hdev->para->cs;
enum hdmi_color_depth cd = hdev->para->cd;
if (!test_clk)
return;
@@ -1010,7 +1010,7 @@ next:
set_vid_clk_div(hdev, p_enc[j].vid_clk_div);
set_hdmi_tx_pixel_div(hdev, p_enc[j].hdmi_tx_pixel_div);
if (hdev->tx_comm.hdmitx_vinfo.viu_mux == VIU_MUX_ENCI) {
if (hdev->para->hdmitx_vinfo.viu_mux == VIU_MUX_ENCI) {
set_enci_div(hdev, p_enc[j].enci_div);
hdmitx_enable_enci_clk(hdev);
} else {
@@ -1032,7 +1032,7 @@ static int likely_frac_rate_mode(char *m)
static void hdmitx_check_frac_rate(struct hdmitx_dev *hdev)
{
enum hdmi_vic vic = hdev->tx_comm.cur_VIC;
const struct hdmi_format_para *para = NULL;
struct hdmi_format_para *para = NULL;
frac_rate = hdev->tx_comm.frac_rate_policy;
para = hdmi_get_fmt_paras(vic);
@@ -1167,7 +1167,7 @@ void hdmitx_set_clk(struct hdmitx_dev *hdev)
void hdmitx_disable_clk(struct hdmitx_dev *hdev)
{
/* cts_encp/enci_clk */
if (hdev->tx_comm.hdmitx_vinfo.viu_mux == VIU_MUX_ENCI)
if (hdev->para->hdmitx_vinfo.viu_mux == VIU_MUX_ENCI)
hdmitx_disable_enci_clk(hdev);
else
hdmitx_disable_encp_clk(hdev);
@@ -83,7 +83,6 @@ static bool set_hpll_hclk_v1(unsigned int m, unsigned int frac_val)
{
int ret = 0;
struct hdmitx_dev *hdev = get_hdmitx_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
hd_write_reg(P_HHI_HDMI_PLL_CNTL0, 0x0b3a0400 | (m & 0xff));
hd_set_reg_bits(P_HHI_HDMI_PLL_CNTL0, 0x3, 28, 2);
@@ -91,11 +90,11 @@ static bool set_hpll_hclk_v1(unsigned int m, unsigned int frac_val)
hd_write_reg(P_HHI_HDMI_PLL_CNTL2, 0x00000000);
if (frac_val == 0x8148) {
if ((para->vic == HDMI_3840x2160p50_16x9 ||
para->vic == HDMI_3840x2160p60_16x9 ||
para->vic == HDMI_3840x2160p50_64x27 ||
para->vic == HDMI_3840x2160p60_64x27) &&
para->cs != HDMI_COLORSPACE_YUV420) {
if ((hdev->para->vic == HDMI_3840x2160p50_16x9 ||
hdev->para->vic == HDMI_3840x2160p60_16x9 ||
hdev->para->vic == HDMI_3840x2160p50_64x27 ||
hdev->para->vic == HDMI_3840x2160p60_64x27) &&
hdev->para->cs != HDMI_COLORSPACE_YUV420) {
hd_write_reg(P_HHI_HDMI_PLL_CNTL3, 0x6a685c00);
hd_write_reg(P_HHI_HDMI_PLL_CNTL4, 0x11551293);
} else {
@@ -105,13 +104,13 @@ static bool set_hpll_hclk_v1(unsigned int m, unsigned int frac_val)
} else {
if (hdev->data->chip_type == MESON_CPU_ID_SM1 &&
hdmitx_find_vendor_6g(hdev) &&
(para->vic == HDMI_3840x2160p50_16x9 ||
para->vic == HDMI_3840x2160p60_16x9 ||
para->vic == HDMI_3840x2160p50_64x27 ||
para->vic == HDMI_3840x2160p60_64x27 ||
para->vic == HDMI_4096x2160p50_256x135 ||
para->vic == HDMI_4096x2160p60_256x135) &&
para->cs != HDMI_COLORSPACE_YUV420) {
(hdev->para->vic == HDMI_3840x2160p50_16x9 ||
hdev->para->vic == HDMI_3840x2160p60_16x9 ||
hdev->para->vic == HDMI_3840x2160p50_64x27 ||
hdev->para->vic == HDMI_3840x2160p60_64x27 ||
hdev->para->vic == HDMI_4096x2160p50_256x135 ||
hdev->para->vic == HDMI_4096x2160p60_256x135) &&
hdev->para->cs != HDMI_COLORSPACE_YUV420) {
hd_write_reg(P_HHI_HDMI_PLL_CNTL3, 0x6a685c00);
hd_write_reg(P_HHI_HDMI_PLL_CNTL4, 0x11551293);
} else {
@@ -171,11 +170,9 @@ static bool set_hpll_hclk_v3(unsigned int m, unsigned int frac_val)
static inline int is_dongle_mode(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
return hdev->dongle_mode &&
(para->cs == HDMI_COLORSPACE_YUV422 ||
para->cd == COLORDEPTH_24B) &&
(hdev->para->cs == HDMI_COLORSPACE_YUV422 ||
hdev->para->cd == COLORDEPTH_24B) &&
(hdev->tx_comm.cur_VIC == HDMI_1280x720p50_16x9 ||
hdev->tx_comm.cur_VIC == HDMI_1280x720p60_16x9 ||
hdev->tx_comm.cur_VIC == HDMI_1920x1080i60_16x9 ||
@@ -41,7 +41,6 @@ static bool set_hpll_hclk_v1(unsigned int m, unsigned int frac_val)
{
int ret = 0;
struct hdmitx_dev *hdev = get_hdmitx_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
hd_write_reg(P_ANACTRL_HDMIPLL_CTRL0, 0x0b3a0400 | (m & 0xff));
hd_set_reg_bits(P_ANACTRL_HDMIPLL_CTRL0, 0x3, 28, 2);
@@ -49,11 +48,11 @@ static bool set_hpll_hclk_v1(unsigned int m, unsigned int frac_val)
hd_write_reg(P_ANACTRL_HDMIPLL_CTRL2, 0x00000000);
if (frac_val == 0x8148) {
if ((para->vic == HDMI_3840x2160p50_16x9 ||
para->vic == HDMI_3840x2160p60_16x9 ||
para->vic == HDMI_3840x2160p50_64x27 ||
para->vic == HDMI_3840x2160p60_64x27) &&
para->cs != HDMI_COLORSPACE_YUV420) {
if ((hdev->para->vic == HDMI_3840x2160p50_16x9 ||
hdev->para->vic == HDMI_3840x2160p60_16x9 ||
hdev->para->vic == HDMI_3840x2160p50_64x27 ||
hdev->para->vic == HDMI_3840x2160p60_64x27) &&
hdev->para->cs != HDMI_COLORSPACE_YUV420) {
hd_write_reg(P_ANACTRL_HDMIPLL_CTRL3, 0x6a685c00);
hd_write_reg(P_ANACTRL_HDMIPLL_CTRL4, 0x11551293);
} else {
@@ -62,13 +61,13 @@ static bool set_hpll_hclk_v1(unsigned int m, unsigned int frac_val)
}
} else {
if (hdmitx_find_vendor_6g(hdev) &&
(para->vic == HDMI_3840x2160p50_16x9 ||
para->vic == HDMI_3840x2160p60_16x9 ||
para->vic == HDMI_3840x2160p50_64x27 ||
para->vic == HDMI_3840x2160p60_64x27 ||
para->vic == HDMI_4096x2160p50_256x135 ||
para->vic == HDMI_4096x2160p60_256x135) &&
para->cs != HDMI_COLORSPACE_YUV420) {
(hdev->para->vic == HDMI_3840x2160p50_16x9 ||
hdev->para->vic == HDMI_3840x2160p60_16x9 ||
hdev->para->vic == HDMI_3840x2160p50_64x27 ||
hdev->para->vic == HDMI_3840x2160p60_64x27 ||
hdev->para->vic == HDMI_4096x2160p50_256x135 ||
hdev->para->vic == HDMI_4096x2160p60_256x135) &&
hdev->para->cs != HDMI_COLORSPACE_YUV420) {
hd_write_reg(P_ANACTRL_HDMIPLL_CTRL3, 0x6a685c00);
hd_write_reg(P_ANACTRL_HDMIPLL_CTRL4, 0x11551293);
} else {
+7 -7
View File
@@ -315,19 +315,21 @@ static void recalc_vinfo_sync_duration(struct vinfo_s *info, u32 frac)
* 3840x2160p60hz, etc
* attr strings likes as '444,8bit'
*/
int hdmitx21_get_fmtpara(const char *mode, const char *attr, struct hdmi_format_para *para)
struct hdmi_format_para *hdmitx21_get_fmtpara(const char *mode,
const char *attr)
{
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmitx_common *tx_comm = &hdev->tx_comm;
struct vinfo_s *tx_vinfo = &tx_comm->hdmitx_vinfo;
const struct hdmi_timing *timing;
struct vinfo_s *tx_vinfo = &hdev->para->hdmitx_vinfo;
struct hdmi_format_para *para = hdev->para;
if (!mode || !attr)
return -EINVAL;
return NULL;
timing = hdmitx21_gettiming_from_name(mode);
if (!timing)
return -EINVAL;
return NULL;
para->timing = *timing;
_parse_hdmi_attr(attr, &para->cs, &para->cd, &para->cr);
@@ -367,10 +369,8 @@ int hdmitx21_get_fmtpara(const char *mode, const char *attr, struct hdmi_format_
if (strstr(timing->name, "1080i"))
tx_vinfo->viu_mux = VIU_MUX_ENCP;
tx_vinfo->viu_mux |= hdev->enc_idx << 4;
tx_vinfo->cd = para->cd;
tx_vinfo->cs = para->cs;
return 0;
return hdev->para;
}
/* For check all format parameters only */
+1 -1
View File
@@ -73,7 +73,7 @@ u8 hdmi_ddc_status_check(void);
u8 hdmi_ddc_busy_check(void);
void hdmi_ddc_error_reset(void);
void hdmitx21_rebuild_fmt_attr_str(struct hdmitx_dev *hdev, struct hdmi_format_para *para);
void hdmitx21_fmt_attr(struct hdmitx_dev *hdev);
int hdmitx21_hdcp_init(void);
int hdmitx21_uboot_audio_en(void);
@@ -160,7 +160,7 @@ void hdmi_avi_infoframe_config(enum avi_component_conf conf, u8 val)
{
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_avi_infoframe *info = &hdev->infoframes.avi.avi;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
switch (conf) {
case CONF_AVI_CS:
+84 -75
View File
@@ -611,7 +611,6 @@ static void rxlatency_to_vinfo(struct vinfo_s *info, struct rx_cap *rx)
static void edidinfo_attach_to_vinfo(struct hdmitx_dev *hdev)
{
struct vinfo_s *info = NULL;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
/* get current vinfo */
info = hdmitx_get_current_vinfo(NULL);
@@ -626,7 +625,7 @@ static void edidinfo_attach_to_vinfo(struct hdmitx_dev *hdev)
mutex_lock(&getedid_mutex);
hdrinfo_to_vinfo(&info->hdr_info, hdev);
memcpy(&ext_dvinfo, &hdev->tx_comm.rxcap.dv_info, sizeof(ext_dvinfo));
if (para->cd == COLORDEPTH_24B)
if (hdev->para && hdev->para->cd == COLORDEPTH_24B)
memset(&info->hdr_info, 0, sizeof(struct hdr_info));
rxlatency_to_vinfo(info, &hdev->tx_comm.rxcap);
hdmitx_vdev.dv_info = &hdev->tx_comm.rxcap.dv_info;
@@ -757,7 +756,7 @@ static int set_disp_mode_auto(void)
struct vinfo_s *info = NULL;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmitx_common *tx_comm = &hdev->tx_comm;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = NULL;
u8 mode[32];
enum hdmi_vic vic = HDMI_0_UNKNOWN;
@@ -811,7 +810,8 @@ static int set_disp_mode_auto(void)
}
}
if (hdmitx21_get_fmtpara(mode, tx_comm->fmt_attr, para) == 0) {
para = hdmitx21_get_fmtpara(mode, tx_comm->fmt_attr);
if (!para) {
pr_info("%s[%d] %s %s\n", __func__, __LINE__, mode,
tx_comm->fmt_attr);
mutex_unlock(&hdev->hdmimode_mutex);
@@ -827,6 +827,7 @@ static int set_disp_mode_auto(void)
hdmitx21_disable_hdcp(hdev);
pr_info("setting hdmi mode %s %s\n", mode, tx_comm->fmt_attr);
pr_info("cd/cs/cr: %d/%d/%d\n", para->cd, para->cs, para->cr);
hdev->para = para;
vic = hdmitx21_edid_get_VIC(hdev, mode, 1);
if (strncmp(info->name, "2160p30hz", strlen("2160p30hz")) == 0) {
vic = HDMI_95_3840x2160p30_16x9;
@@ -845,7 +846,7 @@ static int set_disp_mode_auto(void)
if (tx_comm->rxcap.max_frl_rate) {
hdev->frl_rate = hdmitx21_select_frl_rate(hdev->dsc_en, vic,
para->cs, para->cd);
hdev->para->cs, hdev->para->cd);
if (hdev->frl_rate > hdev->tx_max_frl_rate)
pr_info("Current frl_rate %d is larger than tx_max_frl_rate %d\n",
hdev->frl_rate, hdev->tx_max_frl_rate);
@@ -909,9 +910,12 @@ static ssize_t disp_mode_show(struct device *dev,
int pos = 0;
int i = 0;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
struct hdmi_timing *timing = &para->timing;
struct vinfo_s *vinfo = &hdev->tx_comm.hdmitx_vinfo;
struct vinfo_s *vinfo = &para->hdmitx_vinfo;
if (!para)
return pos;
pos += snprintf(buf + pos, PAGE_SIZE, "cd/cs/cr: %d/%d/%d\n", para->cd,
para->cs, para->cr);
@@ -1493,7 +1497,7 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data)
/* if VSIF/DV or VSIF/HDR10P packet is enabled, disable it */
if (hdmitx21_dv_en()) {
update_current_para(hdev);
hdmi_avi_infoframe_config(CONF_AVI_CS, hdev->tx_comm.fmt_para.cs);
hdmi_avi_infoframe_config(CONF_AVI_CS, hdev->para->cs);
/* if using VSIF/DOVI, then only clear DV_VS10_SIG, else disable VSIF */
if (hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_DV_VS10_SIG, 0) == 0)
/* hdmi_vend_infoframe_set(NULL); */
@@ -1647,7 +1651,7 @@ static void update_current_para(struct hdmitx_dev *hdev)
memset(mode, 0, sizeof(mode));
strncpy(mode, info->name, sizeof(mode) - 1);
hdmitx21_get_fmtpara(mode, tx_comm->fmt_attr, &tx_comm->fmt_para);
hdev->para = hdmitx21_get_fmtpara(mode, tx_comm->fmt_attr);
}
static struct vsif_debug_save vsif_debug_info;
@@ -1670,7 +1674,6 @@ static void hdmitx_set_vsif_pkt(enum eotf_type type,
static u8 ltmode = -1;
enum hdmi_tf_type hdr_type = HDMI_NONE;
unsigned long flags = 0;
struct hdmi_format_para *fmt_para = &hdev->tx_comm.fmt_para;
if (!_check_hdmi_mode())
return;
@@ -1800,7 +1803,7 @@ static void hdmitx_set_vsif_pkt(enum eotf_type type,
if (signal_sdr) {
pr_info("hdmitx: Dolby H14b VSIF, switching signal to SDR\n");
update_current_para(hdev);
hdmi_avi_infoframe_config(CONF_AVI_CS, fmt_para->cs);
hdmi_avi_infoframe_config(CONF_AVI_CS, hdev->para->cs);
hdmi_avi_infoframe_config(CONF_AVI_Q01, RGB_RANGE_LIM);
hdmi_avi_infoframe_config(CONF_AVI_YQ01, YCC_RANGE_LIM);
hdmi_avi_infoframe_config(CONF_AVI_BT2020, CLR_AVI_BT2020);/*BT709*/
@@ -1936,9 +1939,9 @@ static void hdmitx_set_vsif_pkt(enum eotf_type type,
pr_info("hdmitx: Dolby VSIF, switching signal to SDR\n");
update_current_para(hdev);
pr_info("vic:%d, cd:%d, cs:%d, cr:%d\n",
fmt_para->timing.vic, fmt_para->cd,
fmt_para->cs, fmt_para->cr);
hdmi_avi_infoframe_config(CONF_AVI_CS, fmt_para->cs);
hdev->para->timing.vic, hdev->para->cd,
hdev->para->cs, hdev->para->cr);
hdmi_avi_infoframe_config(CONF_AVI_CS, hdev->para->cs);
hdmi_avi_infoframe_config(CONF_AVI_Q01, RGB_RANGE_DEFAULT);
hdmi_avi_infoframe_config(CONF_AVI_YQ01, YCC_RANGE_LIM);
hdmi_avi_infoframe_config(CONF_AVI_BT2020, CLR_AVI_BT2020);/*BT709*/
@@ -2171,46 +2174,47 @@ static ssize_t config_show(struct device *dev,
int pos = 0;
u8 *conf;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
pos += snprintf(buf + pos, PAGE_SIZE, "cur_VIC: %d\n", hdev->tx_comm.cur_VIC);
switch (para->cd) {
case COLORDEPTH_24B:
conf = "8bit";
break;
case COLORDEPTH_30B:
conf = "10bit";
break;
case COLORDEPTH_36B:
conf = "12bit";
break;
case COLORDEPTH_48B:
conf = "16bit";
break;
default:
conf = "reserved";
if (hdev->para) {
switch (hdev->para->cd) {
case COLORDEPTH_24B:
conf = "8bit";
break;
case COLORDEPTH_30B:
conf = "10bit";
break;
case COLORDEPTH_36B:
conf = "12bit";
break;
case COLORDEPTH_48B:
conf = "16bit";
break;
default:
conf = "reserved";
}
pos += snprintf(buf + pos, PAGE_SIZE, "colordepth: %s\n",
conf);
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
conf = "RGB";
break;
case HDMI_COLORSPACE_YUV422:
conf = "422";
break;
case HDMI_COLORSPACE_YUV444:
conf = "444";
break;
case HDMI_COLORSPACE_YUV420:
conf = "420";
break;
default:
conf = "reserved";
}
pos += snprintf(buf + pos, PAGE_SIZE, "colorspace: %s\n",
conf);
}
pos += snprintf(buf + pos, PAGE_SIZE, "colordepth: %s\n",
conf);
switch (para->cs) {
case HDMI_COLORSPACE_RGB:
conf = "RGB";
break;
case HDMI_COLORSPACE_YUV422:
conf = "422";
break;
case HDMI_COLORSPACE_YUV444:
conf = "444";
break;
case HDMI_COLORSPACE_YUV420:
conf = "420";
break;
default:
conf = "reserved";
}
pos += snprintf(buf + pos, PAGE_SIZE, "colorspace: %s\n",
conf);
switch (hdev->tx_aud_cfg) {
case 0:
@@ -2668,7 +2672,6 @@ static ssize_t disp_cap_show(struct device *dev,
pos += snprintf(buf + pos, PAGE_SIZE, "*");
pos += snprintf(buf + pos, PAGE_SIZE, "\n");
}
if (is_vic_support_y420(vic)) {
/* backup only for old android */
/* pos += snprintf(buf + pos, PAGE_SIZE, "%s420\n", */
@@ -4602,7 +4605,9 @@ static struct vinfo_s *hdmitx_get_current_vinfo(void *data)
{
struct hdmitx_dev *hdev = get_hdmitx21_device();
return &hdev->tx_comm.hdmitx_vinfo;
if (!hdev->para)
return NULL;
return &hdev->para->hdmitx_vinfo;
}
static int hdmitx_set_current_vmode(enum vmode_e mode, void *data)
@@ -4624,8 +4629,7 @@ static int hdmitx_set_current_vmode(enum vmode_e mode, void *data)
update_current_para(hdev);
if (tx_comm->rxcap.max_frl_rate) {
hdev->frl_rate = hdmitx21_select_frl_rate(hdev->dsc_en,
tx_comm->cur_VIC, hdev->tx_comm.fmt_para.cs,
hdev->tx_comm.fmt_para.cd);
tx_comm->cur_VIC, hdev->para->cs, hdev->para->cd);
if (hdev->frl_rate > hdev->tx_max_frl_rate)
pr_info("Current frl_rate %d is larger than tx_max_frl_rate %d\n",
hdev->frl_rate, hdev->tx_max_frl_rate);
@@ -4644,8 +4648,8 @@ static int hdmitx_set_current_vmode(enum vmode_e mode, void *data)
static enum vmode_e hdmitx_validate_vmode(char *_mode, u32 frac, void *data)
{
struct hdmi_format_para *para = NULL;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
char mode[32] = {0};
char *y420;
@@ -4657,15 +4661,17 @@ static enum vmode_e hdmitx_validate_vmode(char *_mode, u32 frac, void *data)
if (y420)
*y420 = '\0';
if (hdmitx21_get_fmtpara(mode, hdev->tx_comm.fmt_attr, para) == 0) {
para = hdmitx21_get_fmtpara(mode, hdev->tx_comm.fmt_attr);
if (para) {
/* //remove frac support for vout api
*if (frac)
* hdev->frac_rate_policy = 1;
*else
* hdev->frac_rate_policy = 0;
*/
hdev->tx_comm.hdmitx_vinfo.info_3d = NON_3D;
hdev->tx_comm.hdmitx_vinfo.vout_device = &hdmitx_vdev;
hdev->para->hdmitx_vinfo.info_3d = NON_3D;
hdev->para->hdmitx_vinfo.vout_device = &hdmitx_vdev;
return VMODE_HDMI;
}
return VMODE_MAX;
@@ -4682,13 +4688,14 @@ static int hdmitx_vmode_is_supported(enum vmode_e mode, void *data)
static int hdmitx_module_disable(enum vmode_e cur_vmod, void *data)
{
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmitx_common *tx_comm = &hdev->tx_comm;
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_AVI_PACKET, 0);
hdev->tx_hw.cntlconfig(&hdev->tx_hw, CONF_CLR_VSDB_PACKET, 0);
frl_tx_stop(hdev);
hdev->tx_hw.cntlmisc(&hdev->tx_hw, MISC_TMDS_PHY_OP, TMDS_PHY_DISABLE);
/* hdmitx21_disable_clk(hdev); */
hdmitx21_get_fmtpara("invalid", hdev->tx_comm.fmt_attr, &hdev->tx_comm.fmt_para);
hdev->para = hdmitx21_get_fmtpara("invalid", tx_comm->fmt_attr);
hdmitx_validate_vmode("null", 0, NULL);
if (hdev->cedst_policy)
cancel_delayed_work(&hdev->work_cedst);
@@ -5460,24 +5467,25 @@ int get21_hpd_state(void)
/******************************
* hdmitx kernel task
*******************************/
/*TODO: called when there is no modesetting?*/
static bool is_cur_tmds_div40(struct hdmitx_dev *hdev)
{
const struct hdmi_timing *tp;
const char *name;
unsigned int act_clk = 0;
struct hdmitx_common *tx_comm = &hdev->tx_comm;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
if (!hdev)
return false;
tp = hdmitx21_gettiming_from_vic(hdev->tx_comm.cur_VIC);
if (tp) {
name = tp->sname ? tp->sname : tp->name;
hdmitx21_get_fmtpara(name, tx_comm->fmt_attr, para);
hdev->para = hdmitx21_get_fmtpara(name,
tx_comm->fmt_attr);
}
act_clk = para->tmds_clk / 1000;
if (!hdev->para)
return false;
act_clk = hdev->para->tmds_clk / 1000;
pr_info("hdmitx: get vic %d cscd %s act_clk %d\n",
hdev->tx_comm.cur_VIC, tx_comm->fmt_attr, act_clk);
@@ -5538,7 +5546,7 @@ static int get_dt_vend_init_data(struct device_node *np,
return 0;
}
void hdmitx21_rebuild_fmt_attr_str(struct hdmitx_dev *hdev, struct hdmi_format_para *para)
void hdmitx21_fmt_attr(struct hdmitx_dev *hdev)
{
struct hdmitx_common *tx_comm = &hdev->tx_comm;
@@ -5547,7 +5555,7 @@ void hdmitx21_rebuild_fmt_attr_str(struct hdmitx_dev *hdev, struct hdmi_format_p
return;
}
memset(tx_comm->fmt_attr, 0, sizeof(tx_comm->fmt_attr));
switch (para->cs) {
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
memcpy(tx_comm->fmt_attr, "rgb,", 5);
break;
@@ -5563,7 +5571,7 @@ void hdmitx21_rebuild_fmt_attr_str(struct hdmitx_dev *hdev, struct hdmi_format_p
default:
break;
}
switch (para->cd) {
switch (hdev->para->cd) {
case COLORDEPTH_24B:
strcat(tx_comm->fmt_attr, "8bit");
break;
@@ -5585,14 +5593,15 @@ void hdmitx21_rebuild_fmt_attr_str(struct hdmitx_dev *hdev, struct hdmi_format_p
static void hdmitx_init_fmt_attr(struct hdmitx_dev *hdev)
{
struct hdmitx_common *tx_comm = &hdev->tx_comm;
struct hdmi_format_para *para = &tx_comm->fmt_para;
if (!hdev->para)
return;
if (strlen(tx_comm->fmt_attr) >= 8) {
pr_info("fmt_attr %s\n", tx_comm->fmt_attr);
return;
}
memset(tx_comm->fmt_attr, 0, sizeof(tx_comm->fmt_attr));
switch (para->cs) {
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
memcpy(tx_comm->fmt_attr, "rgb,", 5);
break;
@@ -5608,7 +5617,7 @@ static void hdmitx_init_fmt_attr(struct hdmitx_dev *hdev)
default:
break;
}
switch (para->cd) {
switch (hdev->para->cd) {
case COLORDEPTH_24B:
strcat(tx_comm->fmt_attr, "8bit");
break;
@@ -5720,14 +5729,17 @@ static void hdmitx_init_parameters(struct hdmitx_info *info)
static int amhdmitx21_device_init(struct hdmitx_dev *hdmi_dev)
{
struct hdmitx_dev *hdev = get_hdmitx21_device();
static struct hdmi_format_para para;
if (!hdmi_dev)
return 1;
memset(&para, 0, sizeof(para));
pr_info("Ver: %s\n", HDMITX_VER);
hdmi_dev->hdtx_dev = NULL;
hdev->para = &para;
hdev->physical_addr = 0xffff;
hdev->hdmi_last_hdr_mode = 0;
hdev->hdmi_current_hdr_mode = 0;
@@ -6235,10 +6247,7 @@ static int amhdmitx_probe(struct platform_device *pdev)
aout_register_client(&hdmitx_notifier_nb_a);
#endif
hdmitx_extcon_register(pdev, dev);
/**
* update fmt_attr string from fmt_para,
* because fmt_para may update in hdmitx_meson_init().
*/
/* update fmt_attr */
hdmitx_init_fmt_attr(hdev);
tx_comm->hpd_state = !!hdev->tx_hw.cntlmisc(&hdev->tx_hw,
@@ -6747,7 +6756,7 @@ static bool drm_hdmitx_chk_mode_attr_sup(char *mode, char *attr)
para = hdmitx21_tst_fmt_name(mode, attr);
if (para) {
pr_info("sname = %s\n", hdmitx21_device.tx_comm.hdmitx_vinfo.name);
pr_info("sname = %s\n", para->hdmitx_vinfo.name);
pr_info("char_clk = %d\n", para->tmds_clk);
pr_info("cd = %d\n", para->cd);
pr_info("cs = %d\n", para->cs);
+1 -2
View File
@@ -11,8 +11,7 @@
void scdc21_config(struct hdmitx_dev *hdev)
{
/* TMDS 1/40 & Scramble */
scdc21_wr_sink(SCDC_TMDS_CFG,
hdev->tx_comm.fmt_para.tmds_clk_div40 ? 0x3 : 0);
scdc21_wr_sink(SCDC_TMDS_CFG, hdev->para->tmds_clk_div40 ? 0x3 : 0);
}
/* update CED, 10.4.1.8 */
+10 -4
View File
@@ -30,7 +30,7 @@ static void hdmi_set_vend_spec_infofram(struct hdmitx_dev *hdev,
static void construct_avi_packet(struct hdmitx_dev *hdev)
{
struct hdmi_avi_infoframe *info = &hdev->infoframes.avi.avi;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
hdmi_avi_infoframe_init(info);
@@ -88,7 +88,7 @@ static int is_dvi_device(struct rx_cap *prxcap)
int hdmitx21_set_display(struct hdmitx_dev *hdev, enum hdmi_vic videocode)
{
struct hdmi_format_para *param = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *param = NULL;
enum hdmi_vic vic;
int ret = -1;
@@ -100,6 +100,12 @@ int hdmitx21_set_display(struct hdmitx_dev *hdev, enum hdmi_vic videocode)
if (vic != HDMI_0_UNKNOWN && vic == videocode)
hdev->tx_comm.cur_VIC = vic;
param = hdev->para;
if (!param) {
pr_info("%s[%d]\n", __func__, __LINE__);
return ret;
}
if (param->cs == HDMI_COLORSPACE_YUV444)
if (!(hdev->tx_comm.rxcap.native_Mode & (1 << 5))) {
param->cs = HDMI_COLORSPACE_YUV422;
@@ -126,8 +132,8 @@ int hdmitx21_set_display(struct hdmitx_dev *hdev, enum hdmi_vic videocode)
pr_info(VID "rx edid only support RGB format\n");
if (videocode >= HDMITX_VESA_OFFSET) {
param->cs = HDMI_COLORSPACE_RGB;
param->cd = COLORDEPTH_24B;
hdev->para->cs = HDMI_COLORSPACE_RGB;
hdev->para->cd = COLORDEPTH_24B;
pr_info("hdmitx: VESA only support RGB format\n");
}
+9 -4
View File
@@ -918,12 +918,15 @@ int hdmitx_set_fr_hint(int rate, void *data)
struct vrr_conf_para para;
enum TARGET_FRAME_RATE tfr = TFR_QMSVRR_INACTIVE;
int tmp_rate;
struct hdmi_format_para *fmt_para = &hdev->tx_comm.fmt_para;
hdmitx_vrr_disable();
if (!hdev->para) {
para.vrr_enabled = 0;
return 0;
}
/* check current rate, should less or equal than current rate of BRR */
tmp_rate = fmt_para->timing.v_freq / 10;
tmp_rate = hdev->para->timing.v_freq / 10;
if (rate < 2397 || rate > 120000 || rate > tmp_rate) {
pr_info("vrr rate over range %d [2397~%d]\n", rate, tmp_rate);
return 0;
@@ -939,7 +942,7 @@ int hdmitx_set_fr_hint(int rate, void *data)
}
para.duration = rate;
para.brr_vic = fmt_para->timing.vic;
para.brr_vic = hdev->para->timing.vic;
if (para.type == T_VRR_QMS) {
tfr = vsync_match_to_tfr(rate);
if (tfr == TFR_QMSVRR_INACTIVE || tfr == TFR_MAX) {
@@ -1010,7 +1013,9 @@ static struct vinfo_s *hdmitx_get_curvinfo(void *data)
{
struct hdmitx_dev *hdev = get_hdmitx21_device();
return &hdev->tx_comm.hdmitx_vinfo;
if (!hdev->para)
return NULL;
return &hdev->para->hdmitx_vinfo;
}
void hdmitx_register_vrr(struct hdmitx_dev *hdev)
+8 -2
View File
@@ -48,7 +48,10 @@ static void config_tv_enc_calc(struct hdmitx_dev *hdev, enum hdmi_vic vic)
bool y420_mode = 0;
int hpara_div = 1;
if (hdev->tx_comm.fmt_para.cs == HDMI_COLORSPACE_YUV420)
if (!hdev || !hdev->para)
return;
if (hdev->para->cs == HDMI_COLORSPACE_YUV420)
y420_mode = 1;
tp = hdmitx21_gettiming_from_vic(vic);
if (!tp) {
@@ -399,6 +402,9 @@ void set_tv_encp_new(struct hdmitx_dev *hdev, u32 enc_index, enum hdmi_vic vic,
// VENC2A 0x23
reg_offset = enc_index == 0 ? 0 : enc_index == 1 ? 0x600 : 0x800;
if (!hdev || !hdev->para)
return;
switch (vic) {
case HDMI_5_1920x1080i60_16x9:
case HDMI_46_1920x1080i120_16x9:
@@ -411,7 +417,7 @@ void set_tv_encp_new(struct hdmitx_dev *hdev, u32 enc_index, enum hdmi_vic vic,
break;
}
if (hdev->frl_rate && hdev->tx_comm.fmt_para.cs != HDMI_COLORSPACE_YUV420)
if (hdev->frl_rate && hdev->para->cs != HDMI_COLORSPACE_YUV420)
hd21_set_reg_bits(ENCP_VIDEO_MODE_ADV, 1, 0, 3);
else
hd21_set_reg_bits(ENCP_VIDEO_MODE_ADV, 0, 0, 3);
+67 -52
View File
@@ -341,7 +341,6 @@ static enum hdmi_vic _get_vic_from_vsif(struct hdmitx_dev *hdev)
static void hdmi_hwp_init(struct hdmitx_dev *hdev, u8 reset)
{
u32 data32;
struct hdmi_format_para tmp_para;
if (hdev->data->chip_type >= MESON_CPU_ID_S5) {
hd21_set_reg_bits(CLKCTRL_VID_CLK0_CTRL, 7, 0, 3);
@@ -372,23 +371,31 @@ static void hdmi_hwp_init(struct hdmitx_dev *hdev, u8 reset)
if (ret < 0) {
pr_info("hdmitx21: parsing AVI failed %d\n", ret);
} else {
tmp_para.cs = avi->colorspace;
tmp_para.cd = _get_colordepth();
if (tmp_para.cs == HDMI_COLORSPACE_YUV422)
tmp_para.cd = COLORDEPTH_36B;
hdmitx21_rebuild_fmt_attr_str(hdev, &tmp_para);
vic = avi->video_code;
if (vic == HDMI_0_UNKNOWN)
vic = _get_vic_from_vsif(hdev);
hdev->tx_comm.cur_VIC = vic;
tp = hdmitx21_gettiming_from_vic(vic);
if (tp) {
name = tp->sname ? tp->sname : tp->name;
hdmitx21_get_fmtpara(name,
hdev->tx_comm.fmt_attr, &hdev->tx_comm.fmt_para);
if (!hdev->para)
return;
if (hdev->para) {
hdev->para->cs = avi->colorspace;
hdev->para->cd = _get_colordepth();
if (hdev->para->cs == HDMI_COLORSPACE_YUV422)
hdev->para->cd = COLORDEPTH_36B;
hdmitx21_fmt_attr(hdev);
vic = avi->video_code;
if (vic == HDMI_0_UNKNOWN)
vic = _get_vic_from_vsif(hdev);
hdev->tx_comm.cur_VIC = vic;
tp = hdmitx21_gettiming_from_vic(vic);
if (tp) {
name = tp->sname ? tp->sname : tp->name;
hdev->para = hdmitx21_get_fmtpara(name,
hdev->tx_comm.fmt_attr);
}
} else {
pr_info("hdmitx21: failed to get para\n");
hdev->para->cs = HDMI_COLORSPACE_YUV444;
hdev->para->cd = COLORDEPTH_24B;
}
pr_info("hdmitx21: parsing AVI CS%d CD%d VIC%d\n",
avi->colorspace, hdev->tx_comm.fmt_para.cd, hdev->tx_comm.cur_VIC);
avi->colorspace, hdev->para->cd, hdev->tx_comm.cur_VIC);
}
return;
}
@@ -534,7 +541,7 @@ static void set_phy_by_mode(u32 mode)
set21_phy_by_mode_t7(mode);
break;
case MESON_CPU_ID_S5:
tmds_clk = hdev->tx_comm.fmt_para.tmds_clk;
tmds_clk = hdev->para->tmds_clk;
pr_info("%s[%d] tmds_clk %d\n", __func__, __LINE__, tmds_clk);
hdmitx_set_s5_phypara(hdev->frl_rate, tmds_clk);
break;
@@ -576,9 +583,9 @@ do { \
RESET_HDMI_PHY();
#undef RESET_HDMI_PHY
if (hdev->tx_comm.fmt_para.tmds_clk > 340000)
if (hdev->para->tmds_clk > 340000)
set_phy_by_mode(HDMI_PHYPARA_6G);
else if (hdev->tx_comm.fmt_para.tmds_clk > 290000)
else if (hdev->para->tmds_clk > 290000)
set_phy_by_mode(HDMI_PHYPARA_3G);
else
set_phy_by_mode(HDMI_PHYPARA_DEF);
@@ -682,7 +689,7 @@ void enable_crt_video_hdmi(u32 enable, u32 in_sel, u8 enc_sel)
u32 addr_viid_clk02;
u32 addr_vid_clk022;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
addr_vid_clk02 = (enc_sel == 0) ? CLKCTRL_VID_CLK0_CTRL : CLKCTRL_VID_CLK2_CTRL;
addr_viid_clk02 = (enc_sel == 0) ? CLKCTRL_VIID_CLK0_CTRL : CLKCTRL_VIID_CLK2_CTRL;
@@ -755,7 +762,7 @@ MODULE_PARM_DESC(dfm_type, "for dfm debug");
static int hdmitx_set_dispmode(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
u32 data32;
enum hdmi_vic vic = para->timing.vic;
struct vinfo_s *vinfo = NULL;
@@ -886,7 +893,7 @@ static int hdmitx_set_dispmode(struct hdmitx_dev *hdev)
data32 |= (1920 << 0); // [13: 0] cntl_hdcp22_min_size_h
hdmitx21_wr_reg(HDMITX_TOP_HDCP22_MIN_SIZE, data32);
hdev->tx_comm.cur_VIC = para->timing.vic;
hdev->tx_comm.cur_VIC = hdev->para->timing.vic;
//[4] reg_bypass_video_path
// For non-DSC, set to bit4 as 0
@@ -954,7 +961,7 @@ static int hdmitx_set_dispmode(struct hdmitx_dev *hdev)
data32 |= 1 << 28;
}
hd21_write_reg(VPU_HDMI_SETTING, data32);
if (hdev->data->chip_type >= MESON_CPU_ID_S5 && para->cs == HDMI_COLORSPACE_RGB)
if (hdev->data->chip_type >= MESON_CPU_ID_S5 && hdev->para->cs == HDMI_COLORSPACE_RGB)
hd21_set_reg_bits(VPU_HDMI_SETTING, 4, 16, 3);
// [ 1] src_sel_encp: Enable ENCI or ENCP output to HDMI
hd21_set_reg_bits(VPU_HDMI_SETTING, 1, (hdev->enc_idx == 0) ? 0 : 1, 1);
@@ -962,11 +969,11 @@ static int hdmitx_set_dispmode(struct hdmitx_dev *hdev)
if (hdev->frl_rate) {
hd21_set_reg_bits(VPU_HDMI_SETTING, 0, 20, 4);
hd21_set_reg_bits(VPU_HDMI_SETTING, 0, 24, 4);
if (para->cs != HDMI_COLORSPACE_YUV420)
if (hdev->para->cs != HDMI_COLORSPACE_YUV420)
hd21_set_reg_bits(VPU_HDMI_SETTING, 1, 1, 1);
}
hd21_set_reg_bits(VPU_HDMI_SETTING, 0, 16, 3); //hard code
if (!hdev->frl_rate && para->cs == HDMI_COLORSPACE_YUV420) {
if (!hdev->frl_rate && hdev->para->cs == HDMI_COLORSPACE_YUV420) {
hd21_set_reg_bits(VPU_HDMI_SETTING, 0, 20, 8);
hd21_set_reg_bits(VPU_HDMI_SETTING, 1, 8, 8);
}
@@ -982,6 +989,7 @@ static int hdmitx_set_dispmode(struct hdmitx_dev *hdev)
if (hdev->data->chip_type >= MESON_CPU_ID_S5) {
hdmitx_dfm_cfg(0, 0);
if (hdev->frl_rate) {
struct hdmi_format_para *para = hdev->para;
enum hdmi_colorspace cs = para->cs;
enum hdmi_color_depth cd = para->cd;
u32 tribytes_per_line = para->timing.h_active;
@@ -1285,26 +1293,27 @@ static void set_aud_acr_pkt(struct hdmitx_dev *hdev,
{
u32 aud_n_para;
u32 char_rate = 0;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para;
if (!hdev || !para)
if (!hdev)
return;
if (para->vic == HDMI_0_UNKNOWN)
para = hdev->para;
if (!para)
return;
/* if current mode is 59.94hz not 60hz, char_rate will shift down 0.1% */
char_rate = para->timing.pixel_freq;
if (para->timing.name && likely_frac_rate_mode(para->timing.name))
char_rate = hdev->para->timing.pixel_freq;
if (para && para->timing.name && likely_frac_rate_mode(para->timing.name))
if (hdev->tx_comm.frac_rate_policy)
char_rate = char_rate * 1000 / 1001;
if (para->cs == HDMI_COLORSPACE_YUV422)
if (hdev->para->cs == HDMI_COLORSPACE_YUV422)
aud_n_para = hdmi21_get_aud_n_paras(audio_param->sample_rate,
COLORDEPTH_24B, char_rate);
else
aud_n_para = hdmi21_get_aud_n_paras(audio_param->sample_rate,
para->cd, char_rate);
hdev->para->cd, char_rate);
if (hdev->frl_rate)
aud_n_para = hdmi21_get_frl_aud_n_paras(audio_param->sample_rate, hdev->frl_rate);
hdmitx21_set_reg_bits(ACR_CTS_CLK_DIV_IVCTX, hdev->frl_rate ? 1 : 0, 4, 1);
@@ -1649,8 +1658,7 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
unsigned long adr = 0;
unsigned long value = 0;
static enum hdmitx_event event_type = HDMITX_NONE_EVENT;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct vinfo_s *vinfo = &hdev->tx_comm.hdmitx_vinfo;
struct vinfo_s *vinfo;
if (!buf)
return;
@@ -1721,6 +1729,10 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
hdev->tx_hw.cntlmisc(&hdev->tx_hw, MISC_I2C_REACTIVE, 0);
return;
} else if (strncmp(tmpbuf, "bist", 4) == 0) {
if (!hdev->para)
return;
vinfo = &hdev->para->hdmitx_vinfo;
if (strncmp(tmpbuf + 4, "off", 3) == 0) {
if (vinfo->viu_mux == VIU_MUX_ENCI) {
hd21_write_reg(ENCI_TST_EN, 0);
@@ -1751,7 +1763,7 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
return;
}
/* for encp including 1080i */
hdmi_avi_infoframe_config(CONF_AVI_CS, para->cs);
hdmi_avi_infoframe_config(CONF_AVI_CS, hdev->para->cs);
hd21_set_reg_bits(ENCP_VIDEO_MODE_ADV, 0, 3, 1);
hd21_write_reg(VENC_VIDEO_TST_EN, 1);
if (strncmp(tmpbuf + 4, "line", 4) == 0) {
@@ -1774,12 +1786,15 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
}
if (strncmp(tmpbuf + 4, "auto", 4) == 0) {
const struct hdmi_timing *t;
t = &para->timing;
if (!hdev->para)
return;
t = &hdev->para->timing;
value = t->h_active;
/* when FRL works, here will be half rate */
if (hdev->frl_rate) {
value /= 2;
if (para->cs == HDMI_COLORSPACE_YUV420)
if (hdev->para->cs == HDMI_COLORSPACE_YUV420)
value /= 2;
}
hd21_write_reg(VENC_VIDEO_TST_CLRBAR_STRT, 0x113);
@@ -1792,16 +1807,18 @@ static void hdmitx_debug(struct hdmitx_dev *hdev, const char *buf)
u32 width = 1920;
u32 height = 1080;
if (!hdev->para)
return;
if (hdev->data->chip_type < MESON_CPU_ID_S5) {
pr_info("s5 or later support x pattern\n");
return;
}
t = &para->timing;
t = &hdev->para->timing;
width = t->h_active;
/* when FRL works, here will be half rate */
if (hdev->frl_rate) {
width /= 2;
if (para->cs == HDMI_COLORSPACE_YUV420)
if (hdev->para->cs == HDMI_COLORSPACE_YUV420)
width /= 2;
}
height = t->v_active;
@@ -1986,8 +2003,11 @@ static char *hdmitx_bist_str[] = {
static void hdmitx_debug_bist(struct hdmitx_dev *hdev, u32 num)
{
u32 h_active, video_start;
struct vinfo_s *vinfo = &hdev->tx_comm.hdmitx_vinfo;
struct vinfo_s *vinfo;
if (!hdev->para)
return;
vinfo = &hdev->para->hdmitx_vinfo;
switch (num) {
case 1:
case 2:
@@ -2318,8 +2338,7 @@ static int hdmitx_hdmi_dvi_config(struct hdmitx_dev *hdev,
u32 dvi_mode)
{
if (dvi_mode == 1)
hdmitx_csc_config(TX_INPUT_COLOR_FORMAT, HDMI_COLORSPACE_RGB,
hdev->tx_comm.fmt_para.cd);
hdmitx_csc_config(TX_INPUT_COLOR_FORMAT, HDMI_COLORSPACE_RGB, hdev->para->cd);
return 0;
}
@@ -2376,8 +2395,7 @@ static int hdmitx_cntl_config(struct hdmitx_hw_common *tx_hw, u32 cmd,
case CONF_CLR_VSDB_PACKET:
break;
case CONF_VIDEO_MAPPING:
config_video_mapping(hdev->tx_comm.fmt_para.cs,
hdev->tx_comm.fmt_para.cd);
config_video_mapping(hdev->para->cs, hdev->para->cd);
break;
case CONF_CLR_AUDINFO_PACKET:
break;
@@ -2590,7 +2608,7 @@ static void hdmi_phy_wakeup(struct hdmitx_dev *hdev)
static void config_hdmi21_tx(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
u8 color_depth = COLORDEPTH_24B; // Pixel bit width: 4=24-bit; 5=30-bit; 6=36-bit; 7=48-bit.
// Pixel format: 0=RGB444; 1=YCbCr422; 2=YCbCr444; 3=YCbCr420.
u8 input_color_format = HDMI_COLORSPACE_YUV444;
@@ -2886,10 +2904,8 @@ static void hdmitx_csc_config(u8 input_color_format,
static void hdmitx_set_hw(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
pr_info(HW " config hdmitx IP vic = %d cd:%d cs: %d\n",
para->timing.vic, para->cd, para->cs);
hdev->para->timing.vic, hdev->para->cd, hdev->para->cs);
config_hdmi21_tx(hdev);
}
@@ -2923,7 +2939,7 @@ int hdmitx21_read_phy_status(void)
void hdmitx21_dither_config(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
if (para->cd == COLORDEPTH_24B && hdmitx21_dv_en() == 0)
hd21_set_reg_bits(VPU_HDMI_DITH_CNTL, 1, 4, 1);
@@ -2940,15 +2956,14 @@ void hdmitx_dhdr_send(u8 *body, int max_size)
int blank_lines;
int hdr_emp_num;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
if (!body) {
hdmitx21_wr_reg(D_HDR_INSERT_CTRL_IVCTX, 0);
return;
}
active_lines = para->timing.v_active;
blank_lines = para->timing.v_blank;
active_lines = hdev->para->timing.v_active;
blank_lines = hdev->para->timing.v_blank;
hdr_emp_num = (3 - 1) * 28 + 21; //emds total send 3 packet as one dhdr
// step1: hdr timing
+32 -35
View File
@@ -802,17 +802,19 @@ static void set_hdmitx_s5_htx_pll(struct hdmitx_dev *hdev)
u32 base_pixel_clk = 25200;
u32 htx_vco = 5940000;
u32 div = 1;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
vic = para->timing.vic;
cs = para->cs;
cd = para->cd;
if (!hdev || !hdev->para)
return;
vic = hdev->para->timing.vic;
cs = hdev->para->cs;
cd = hdev->para->cd;
if (vic == HDMI_0_UNKNOWN) {
pr_err("%s[%d] not valid vic %d\n", __func__, __LINE__, vic);
return;
}
base_pixel_clk = para->timing.pixel_freq;
base_pixel_clk = hdev->para->timing.pixel_freq;
if (base_pixel_clk < 25175 || base_pixel_clk > 5940000) {
pr_err("%s[%d] not valid pixel clock %d\n", __func__, __LINE__, base_pixel_clk);
return;
@@ -903,10 +905,9 @@ static void set_hdmitx_htx_pll(struct hdmitx_dev *hdev,
int i = 0;
int j = 0;
struct hw_enc_clk_val_group *p_enc = NULL;
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
enum hdmi_vic vic = para->timing.vic;
enum hdmi_colorspace cs = para->cs;
enum hdmi_color_depth cd = para->cd;
enum hdmi_vic vic = hdev->para->timing.vic;
enum hdmi_colorspace cs = hdev->para->cs;
enum hdmi_color_depth cd = hdev->para->cd;
#ifndef CONFIG_AMLOGIC_ZAPPER_CUT
u8 clk_div_val = VID_PLL_DIV_5;
#endif
@@ -1077,43 +1078,41 @@ static void hdmitx_set_fpll_without_dsc(struct hdmitx_dev *hdev)
u32 tmp_clk = 0;
u32 pixel_od = 0;
enum hdmi_vic vic = HDMI_0_UNKNOWN;
struct hdmi_format_para *para;
if (!hdev)
if (!hdev && !hdev->para)
return;
para = &hdev->tx_comm.fmt_para;
vic = para->timing.vic;
tmp_clk = para->timing.pixel_freq;
vic = hdev->para->timing.vic;
tmp_clk = hdev->para->timing.pixel_freq;
if (hdev->frl_rate)
tmp_clk /= 2;
switch (para->cs) {
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
case HDMI_COLORSPACE_YUV444:
if (para->cd == COLORDEPTH_30B) {
if (hdev->para->cd == COLORDEPTH_30B) {
tmp_clk = tmp_clk * 5 / 4;
pixel_od = 1;
}
if (para->cd == COLORDEPTH_36B) {
if (hdev->para->cd == COLORDEPTH_36B) {
tmp_clk = tmp_clk * 3 / 2;
pixel_od = 2;
}
if (para->cd == COLORDEPTH_48B) {
if (hdev->para->cd == COLORDEPTH_48B) {
tmp_clk = tmp_clk * 2;
pixel_od = 4;
}
break;
case HDMI_COLORSPACE_YUV420:
tmp_clk /= 2;
if (para->cd == COLORDEPTH_30B) {
if (hdev->para->cd == COLORDEPTH_30B) {
tmp_clk = tmp_clk * 5 / 4;
pixel_od = 1;
}
if (para->cd == COLORDEPTH_36B) {
if (hdev->para->cd == COLORDEPTH_36B) {
tmp_clk = tmp_clk * 3 / 2;
pixel_od = 2;
}
if (para->cd == COLORDEPTH_48B) {
if (hdev->para->cd == COLORDEPTH_48B) {
tmp_clk *= 1;
pixel_od = 4;
}
@@ -1157,7 +1156,7 @@ static void hdmitx_set_fpll_with_dsc(struct hdmitx_dev *hdev)
u32 tmp_clk = 0;
u32 pixel_od = 0;
if (!hdev)
if (!hdev && !hdev->para)
return;
/* HARD CODE, FRL8G4L 4320p60 y420 8bit, HDMI 2.1 Spec, Page 281 */
@@ -1197,32 +1196,30 @@ void hdmitx_set_gp2pll(struct hdmitx_dev *hdev)
u32 gp2pll_vco = 2376000;
u32 div = 1;
u32 tmp_clk = 0;
struct hdmi_format_para *para;
if (!hdev)
if (!hdev && !hdev->para)
return;
para = &hdev->tx_comm.fmt_para;
tmp_clk = para->timing.pixel_freq;
tmp_clk = hdev->para->timing.pixel_freq;
if (hdev->frl_rate)
tmp_clk /= 2;
switch (para->cs) {
switch (hdev->para->cs) {
case HDMI_COLORSPACE_RGB:
case HDMI_COLORSPACE_YUV444:
if (para->cd == COLORDEPTH_30B)
if (hdev->para->cd == COLORDEPTH_30B)
tmp_clk = tmp_clk * 5 / 4;
if (para->cd == COLORDEPTH_36B)
if (hdev->para->cd == COLORDEPTH_36B)
tmp_clk = tmp_clk * 3 / 2;
if (para->cd == COLORDEPTH_48B)
if (hdev->para->cd == COLORDEPTH_48B)
tmp_clk = tmp_clk * 2;
break;
case HDMI_COLORSPACE_YUV420:
tmp_clk /= 2;
if (para->cd == COLORDEPTH_30B)
if (hdev->para->cd == COLORDEPTH_30B)
tmp_clk = tmp_clk * 5 / 4;
if (para->cd == COLORDEPTH_36B)
if (hdev->para->cd == COLORDEPTH_36B)
tmp_clk = tmp_clk * 3 / 2;
if (para->cd == COLORDEPTH_48B)
if (hdev->para->cd == COLORDEPTH_48B)
tmp_clk *= 1;
break;
case HDMI_COLORSPACE_YUV422:
@@ -1259,7 +1256,7 @@ void hdmitx_set_clkdiv(struct hdmitx_dev *hdev)
static void hdmitx_check_frac_rate(struct hdmitx_dev *hdev)
{
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
struct hdmi_format_para *para = hdev->para;
frac_rate = hdev->tx_comm.frac_rate_policy;
if (para && para->timing.name && likely_frac_rate_mode(para->timing.name)) {
@@ -1412,7 +1409,7 @@ void hdmitx21_set_clk(struct hdmitx_dev *hdev)
void hdmitx21_disable_clk(struct hdmitx_dev *hdev)
{
/* cts_encp/enci_clk */
if (hdev->tx_comm.hdmitx_vinfo.viu_mux == VIU_MUX_ENCI)
if (hdev->para->hdmitx_vinfo.viu_mux == VIU_MUX_ENCI)
hdmitx_disable_enci_clk(hdev);
else
hdmitx_disable_encp_clk(hdev);
+5 -5
View File
@@ -203,11 +203,11 @@ void set21_s5_htxpll_clk_out(const u32 clk, const u32 div)
enum hdmi_colorspace cs = HDMI_COLORSPACE_YUV444;
enum hdmi_color_depth cd = COLORDEPTH_24B;
if (!hdev)
if (!hdev || !hdev->para)
return;
cs = hdev->tx_comm.fmt_para.cs;
cd = hdev->tx_comm.fmt_para.cd;
cs = hdev->para->cs;
cd = hdev->para->cd;
pr_info("%s[%d] htxpll vco %d div %d\n", __func__, __LINE__, clk, div);
@@ -357,12 +357,12 @@ void hdmitx_set_s5_gp2pll(u32 clk, u32 div)
void hdmitx_set_s5_clkdiv(struct hdmitx_dev *hdev)
{
if (!hdev)
if (!hdev && !hdev->para)
return;
/* cts_htx_tmds_clk selects the htx_tmds20_clk or fll_tmds_clk */
hd21_set_reg_bits(CLKCTRL_HTX_CLK_CTRL1, hdev->frl_rate ? 1 : 0, 25, 2);
if (!hdev->frl_rate && hdev->tx_comm.fmt_para.cs == HDMI_COLORSPACE_YUV420)
if (!hdev->frl_rate && hdev->para->cs == HDMI_COLORSPACE_YUV420)
hd21_set_reg_bits(CLKCTRL_HTX_CLK_CTRL1, 1, 16, 7);
else
hd21_set_reg_bits(CLKCTRL_HTX_CLK_CTRL1, 0, 16, 7);
+12 -13
View File
@@ -37,7 +37,6 @@ static bool set_hpll_hclk_v1(u32 m, u32 frac_val)
{
int ret = 0;
struct hdmitx_dev *hdev = get_hdmitx21_device();
struct hdmi_format_para *para = &hdev->tx_comm.fmt_para;
hd21_write_reg(ANACTRL_HDMIPLL_CTRL0, 0x0b3a0400 | (m & 0xff));
hd21_set_reg_bits(ANACTRL_HDMIPLL_CTRL0, 0x3, 28, 2);
@@ -45,11 +44,11 @@ static bool set_hpll_hclk_v1(u32 m, u32 frac_val)
hd21_write_reg(ANACTRL_HDMIPLL_CTRL2, 0x00000000);
if (frac_val == 0x8148) {
if ((para->timing.vic == HDMI_96_3840x2160p50_16x9 ||
para->timing.vic == HDMI_97_3840x2160p60_16x9 ||
para->timing.vic == HDMI_106_3840x2160p50_64x27 ||
para->timing.vic == HDMI_107_3840x2160p60_64x27) &&
para->cs != HDMI_COLORSPACE_YUV420) {
if ((hdev->para->timing.vic == HDMI_96_3840x2160p50_16x9 ||
hdev->para->timing.vic == HDMI_97_3840x2160p60_16x9 ||
hdev->para->timing.vic == HDMI_106_3840x2160p50_64x27 ||
hdev->para->timing.vic == HDMI_107_3840x2160p60_64x27) &&
hdev->para->cs != HDMI_COLORSPACE_YUV420) {
hd21_write_reg(ANACTRL_HDMIPLL_CTRL3, 0x6a685c00);
hd21_write_reg(ANACTRL_HDMIPLL_CTRL4, 0x11551293);
} else {
@@ -57,13 +56,13 @@ static bool set_hpll_hclk_v1(u32 m, u32 frac_val)
hd21_write_reg(ANACTRL_HDMIPLL_CTRL4, 0x44331290);
}
} else {
if ((para->timing.vic == HDMI_96_3840x2160p50_16x9 ||
para->timing.vic == HDMI_97_3840x2160p60_16x9 ||
para->timing.vic == HDMI_106_3840x2160p50_64x27 ||
para->timing.vic == HDMI_107_3840x2160p60_64x27 ||
para->timing.vic == HDMI_101_4096x2160p50_256x135 ||
para->timing.vic == HDMI_102_4096x2160p60_256x135) &&
para->cs != HDMI_COLORSPACE_YUV420) {
if ((hdev->para->timing.vic == HDMI_96_3840x2160p50_16x9 ||
hdev->para->timing.vic == HDMI_97_3840x2160p60_16x9 ||
hdev->para->timing.vic == HDMI_106_3840x2160p50_64x27 ||
hdev->para->timing.vic == HDMI_107_3840x2160p60_64x27 ||
hdev->para->timing.vic == HDMI_101_4096x2160p50_256x135 ||
hdev->para->timing.vic == HDMI_102_4096x2160p60_256x135) &&
hdev->para->cs != HDMI_COLORSPACE_YUV420) {
hd21_write_reg(ANACTRL_HDMIPLL_CTRL3, 0x6a685c00);
hd21_write_reg(ANACTRL_HDMIPLL_CTRL4, 0x11551293);
} else {
@@ -11,6 +11,17 @@
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_common.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_edid.h>
/* HDMI VIC definitions */
/* HDMITX_VIC420_OFFSET and HDMITX_VIC_MASK are associated with
* VIC_MAX_VALID_MODE and VIC_MAX_NUM in hdmi_tx_module.h
*/
#define HDMITX_VIC420_OFFSET 0x100
#define HDMITX_VIC420_FAKE_OFFSET 0x200
#define HDMITX_VESA_OFFSET 0x300
#define HDMITX_VIC_MASK 0xff
enum hdmi_tf_type {
HDMI_NONE = 0,
/* HDMI_HDR_TYPE, HDMI_DV_TYPE, and HDMI_HDR10P_TYPE
@@ -28,121 +39,177 @@ enum hdmi_tf_type {
HDMI_HDR10P_DV_VSIF = HDMI_HDR10P_TYPE | 1,
};
/* Compliance with tx21 definitions */
#define HDMI_UNKNOWN HDMI_0_UNKNOWN
#define HDMI_640x480p60_4x3 HDMI_1_640x480p60_4x3
#define HDMI_720x480p60_4x3 HDMI_2_720x480p60_4x3
#define HDMI_720x480p60_16x9 HDMI_3_720x480p60_16x9
#define HDMI_1280x720p60_16x9 HDMI_4_1280x720p60_16x9
#define HDMI_1920x1080i60_16x9 HDMI_5_1920x1080i60_16x9
#define HDMI_720x480i60_4x3 HDMI_6_720x480i60_4x3
#define HDMI_720x480i60_16x9 HDMI_7_720x480i60_16x9
#define HDMI_720x240p60_4x3 HDMI_8_720x240p60_4x3
#define HDMI_720x240p60_16x9 HDMI_9_720x240p60_16x9
#define HDMI_2880x480i60_4x3 HDMI_10_2880x480i60_4x3
#define HDMI_2880x480i60_16x9 HDMI_11_2880x480i60_16x9
#define HDMI_2880x240p60_4x3 HDMI_12_2880x240p60_4x3
#define HDMI_2880x240p60_16x9 HDMI_13_2880x240p60_16x9
#define HDMI_1440x480p60_4x3 HDMI_14_1440x480p60_4x3
#define HDMI_1440x480p60_16x9 HDMI_15_1440x480p60_16x9
#define HDMI_1920x1080p60_16x9 HDMI_16_1920x1080p60_16x9
#define HDMI_720x576p50_4x3 HDMI_17_720x576p50_4x3
#define HDMI_720x576p50_16x9 HDMI_18_720x576p50_16x9
#define HDMI_1280x720p50_16x9 HDMI_19_1280x720p50_16x9
#define HDMI_1920x1080i50_16x9 HDMI_20_1920x1080i50_16x9
#define HDMI_720x576i50_4x3 HDMI_21_720x576i50_4x3
#define HDMI_720x576i50_16x9 HDMI_22_720x576i50_16x9
#define HDMI_720x288p_4x3 HDMI_23_720x288p_4x3
#define HDMI_720x288p_16x9 HDMI_24_720x288p_16x9
#define HDMI_2880x576i50_4x3 HDMI_25_2880x576i50_4x3
#define HDMI_2880x576i50_16x9 HDMI_26_2880x576i50_16x9
#define HDMI_2880x288p50_4x3 HDMI_27_2880x288p50_4x3
#define HDMI_2880x288p50_16x9 HDMI_28_2880x288p50_16x9
#define HDMI_1440x576p_4x3 HDMI_29_1440x576p_4x3
#define HDMI_1440x576p_16x9 HDMI_30_1440x576p_16x9
#define HDMI_1920x1080p50_16x9 HDMI_31_1920x1080p50_16x9
#define HDMI_1920x1080p24_16x9 HDMI_32_1920x1080p24_16x9
#define HDMI_1920x1080p25_16x9 HDMI_33_1920x1080p25_16x9
#define HDMI_1920x1080p30_16x9 HDMI_34_1920x1080p30_16x9
#define HDMI_2880x480p60_4x3 HDMI_35_2880x480p60_4x3
#define HDMI_2880x480p60_16x9 HDMI_36_2880x480p60_16x9
#define HDMI_2880x576p50_4x3 HDMI_37_2880x576p50_4x3
#define HDMI_2880x576p50_16x9 HDMI_38_2880x576p50_16x9
#define HDMI_1920x1080i_t1250_50_16x9 HDMI_39_1920x1080i_t1250_50_16x9
#define HDMI_1920x1080i100_16x9 HDMI_40_1920x1080i100_16x9
#define HDMI_1280x720p100_16x9 HDMI_41_1280x720p100_16x9
#define HDMI_720x576p100_4x3 HDMI_42_720x576p100_4x3
#define HDMI_720x576p100_16x9 HDMI_43_720x576p100_16x9
#define HDMI_720x576i100_4x3 HDMI_44_720x576i100_4x3
#define HDMI_720x576i100_16x9 HDMI_45_720x576i100_16x9
#define HDMI_1920x1080i120_16x9 HDMI_46_1920x1080i120_16x9
#define HDMI_1280x720p120_16x9 HDMI_47_1280x720p120_16x9
#define HDMI_720x480p120_4x3 HDMI_48_720x480p120_4x3
#define HDMI_720x480p120_16x9 HDMI_49_720x480p120_16x9
#define HDMI_720x480i120_4x3 HDMI_50_720x480i120_4x3
#define HDMI_720x480i120_16x9 HDMI_51_720x480i120_16x9
#define HDMI_720x576p200_4x3 HDMI_52_720x576p200_4x3
#define HDMI_720x576p200_16x9 HDMI_53_720x576p200_16x9
#define HDMI_720x576i200_4x3 HDMI_54_720x576i200_4x3
#define HDMI_720x576i200_16x9 HDMI_55_720x576i200_16x9
#define HDMI_720x480p240_4x3 HDMI_56_720x480p240_4x3
#define HDMI_720x480p240_16x9 HDMI_57_720x480p240_16x9
#define HDMI_720x480i240_4x3 HDMI_58_720x480i240_4x3
#define HDMI_720x480i240_16x9 HDMI_59_720x480i240_16x9
#define HDMI_1280x720p24_16x9 HDMI_60_1280x720p24_16x9
#define HDMI_1280x720p25_16x9 HDMI_61_1280x720p25_16x9
#define HDMI_1280x720p30_16x9 HDMI_62_1280x720p30_16x9
#define HDMI_1920x1080p120_16x9 HDMI_63_1920x1080p120_16x9
#define HDMI_1920x1080p100_16x9 HDMI_64_1920x1080p100_16x9
#define HDMI_1280x720p24_64x27 HDMI_65_1280x720p24_64x27
#define HDMI_1280x720p25_64x27 HDMI_66_1280x720p25_64x27
#define HDMI_1280x720p30_64x27 HDMI_67_1280x720p30_64x27
#define HDMI_1280x720p50_64x27 HDMI_68_1280x720p50_64x27
#define HDMI_1280x720p60_64x27 HDMI_69_1280x720p60_64x27
#define HDMI_1280x720p100_64x27 HDMI_70_1280x720p100_64x27
#define HDMI_1280x720p120_64x27 HDMI_71_1280x720p120_64x27
#define HDMI_1920x1080p24_64x27 HDMI_72_1920x1080p24_64x27
#define HDMI_1920x1080p25_64x27 HDMI_73_1920x1080p25_64x27
#define HDMI_1920x1080p30_64x27 HDMI_74_1920x1080p30_64x27
#define HDMI_1920x1080p50_64x27 HDMI_75_1920x1080p50_64x27
#define HDMI_1920x1080p60_64x27 HDMI_76_1920x1080p60_64x27
#define HDMI_1920x1080p100_64x27 HDMI_77_1920x1080p100_64x27
#define HDMI_1920x1080p120_64x27 HDMI_78_1920x1080p120_64x27
#define HDMI_1680x720p24_64x27 HDMI_79_1680x720p24_64x27
#define HDMI_1680x720p25_64x27 HDMI_80_1680x720p25_64x27
#define HDMI_1680x720p30_64x27 HDMI_81_1680x720p30_64x27
#define HDMI_1680x720p50_64x27 HDMI_82_1680x720p50_64x27
#define HDMI_1680x720p60_64x27 HDMI_83_1680x720p60_64x27
#define HDMI_1680x720p100_64x27 HDMI_84_1680x720p100_64x27
#define HDMI_1680x720p120_64x27 HDMI_85_1680x720p120_64x27
#define HDMI_2560x1080p24_64x27 HDMI_86_2560x1080p24_64x27
#define HDMI_2560x1080p25_64x27 HDMI_87_2560x1080p25_64x27
#define HDMI_2560x1080p30_64x27 HDMI_88_2560x1080p30_64x27
#define HDMI_2560x1080p50_64x27 HDMI_89_2560x1080p50_64x27
#define HDMI_2560x1080p60_64x27 HDMI_90_2560x1080p60_64x27
#define HDMI_2560x1080p100_64x27 HDMI_91_2560x1080p100_64x27
#define HDMI_2560x1080p120_64x27 HDMI_92_2560x1080p120_64x27
#define HDMI_3840x2160p24_16x9 HDMI_93_3840x2160p24_16x9
#define HDMI_3840x2160p25_16x9 HDMI_94_3840x2160p25_16x9
#define HDMI_3840x2160p30_16x9 HDMI_95_3840x2160p30_16x9
#define HDMI_3840x2160p50_16x9 HDMI_96_3840x2160p50_16x9
#define HDMI_3840x2160p60_16x9 HDMI_97_3840x2160p60_16x9
#define HDMI_4096x2160p24_256x135 HDMI_98_4096x2160p24_256x135
#define HDMI_4096x2160p25_256x135 HDMI_99_4096x2160p25_256x135
#define HDMI_4096x2160p30_256x135 HDMI_100_4096x2160p30_256x135
#define HDMI_4096x2160p50_256x135 HDMI_101_4096x2160p50_256x135
#define HDMI_4096x2160p60_256x135 HDMI_102_4096x2160p60_256x135
#define HDMI_3840x2160p24_64x27 HDMI_103_3840x2160p24_64x27
#define HDMI_3840x2160p25_64x27 HDMI_104_3840x2160p25_64x27
#define HDMI_3840x2160p30_64x27 HDMI_105_3840x2160p30_64x27
#define HDMI_3840x2160p50_64x27 HDMI_106_3840x2160p50_64x27
#define HDMI_3840x2160p60_64x27 HDMI_107_3840x2160p60_64x27
enum hdmi_vic {
/* Refer to CEA 861-D */
HDMI_UNKNOWN = 0,
HDMI_640x480p60_4x3 = 1,
HDMI_720x480p60_4x3 = 2,
HDMI_720x480p60_16x9 = 3,
HDMI_1280x720p60_16x9 = 4,
HDMI_1920x1080i60_16x9 = 5,
HDMI_720x480i60_4x3 = 6,
HDMI_720x480i60_16x9 = 7,
HDMI_720x240p60_4x3 = 8,
HDMI_720x240p60_16x9 = 9,
HDMI_2880x480i60_4x3 = 10,
HDMI_2880x480i60_16x9 = 11,
HDMI_2880x240p60_4x3 = 12,
HDMI_2880x240p60_16x9 = 13,
HDMI_1440x480p60_4x3 = 14,
HDMI_1440x480p60_16x9 = 15,
HDMI_1920x1080p60_16x9 = 16,
HDMI_720x576p50_4x3 = 17,
HDMI_720x576p50_16x9 = 18,
HDMI_1280x720p50_16x9 = 19,
HDMI_1920x1080i50_16x9 = 20,
HDMI_720x576i50_4x3 = 21,
HDMI_720x576i50_16x9 = 22,
HDMI_720x288p_4x3 = 23,
HDMI_720x288p_16x9 = 24,
HDMI_2880x576i50_4x3 = 25,
HDMI_2880x576i50_16x9 = 26,
HDMI_2880x288p50_4x3 = 27,
HDMI_2880x288p50_16x9 = 28,
HDMI_1440x576p_4x3 = 29,
HDMI_1440x576p_16x9 = 30,
HDMI_1920x1080p50_16x9 = 31,
HDMI_1920x1080p24_16x9 = 32,
HDMI_1920x1080p25_16x9 = 33,
HDMI_1920x1080p30_16x9 = 34,
HDMI_2880x480p60_4x3 = 35,
HDMI_2880x480p60_16x9 = 36,
HDMI_2880x576p50_4x3 = 37,
HDMI_2880x576p50_16x9 = 38,
HDMI_1920x1080i_t1250_50_16x9 = 39,
HDMI_1920x1080i100_16x9 = 40,
HDMI_1280x720p100_16x9 = 41,
HDMI_720x576p100_4x3 = 42,
HDMI_720x576p100_16x9 = 43,
HDMI_720x576i100_4x3 = 44,
HDMI_720x576i100_16x9 = 45,
HDMI_1920x1080i120_16x9 = 46,
HDMI_1280x720p120_16x9 = 47,
HDMI_720x480p120_4x3 = 48,
HDMI_720x480p120_16x9 = 49,
HDMI_720x480i120_4x3 = 50,
HDMI_720x480i120_16x9 = 51,
HDMI_720x576p200_4x3 = 52,
HDMI_720x576p200_16x9 = 53,
HDMI_720x576i200_4x3 = 54,
HDMI_720x576i200_16x9 = 55,
HDMI_720x480p240_4x3 = 56,
HDMI_720x480p240_16x9 = 57,
HDMI_720x480i240_4x3 = 58,
HDMI_720x480i240_16x9 = 59,
/* Refer to CEA 861-F */
HDMI_1280x720p24_16x9 = 60,
HDMI_1280x720p25_16x9 = 61,
HDMI_1280x720p30_16x9 = 62,
HDMI_1920x1080p120_16x9 = 63,
HDMI_1920x1080p100_16x9 = 64,
HDMI_1280x720p24_64x27 = 65,
HDMI_1280x720p25_64x27 = 66,
HDMI_1280x720p30_64x27 = 67,
HDMI_1280x720p50_64x27 = 68,
HDMI_1280x720p60_64x27 = 69,
HDMI_1280x720p100_64x27 = 70,
HDMI_1280x720p120_64x27 = 71,
HDMI_1920x1080p24_64x27 = 72,
HDMI_1920x1080p25_64x27 = 73,
HDMI_1920x1080p30_64x27 = 74,
HDMI_1920x1080p50_64x27 = 75,
HDMI_1920x1080p60_64x27 = 76,
HDMI_1920x1080p100_64x27 = 77,
HDMI_1920x1080p120_64x27 = 78,
HDMI_1680x720p24_64x27 = 79,
HDMI_1680x720p25_64x27 = 80,
HDMI_1680x720p30_64x27 = 81,
HDMI_1680x720p50_64x27 = 82,
HDMI_1680x720p60_64x27 = 83,
HDMI_1680x720p100_64x27 = 84,
HDMI_1680x720p120_64x27 = 85,
HDMI_2560x1080p24_64x27 = 86,
HDMI_2560x1080p25_64x27 = 87,
HDMI_2560x1080p30_64x27 = 88,
HDMI_2560x1080p50_64x27 = 89,
HDMI_2560x1080p60_64x27 = 90,
HDMI_2560x1080p100_64x27 = 91,
HDMI_2560x1080p120_64x27 = 92,
HDMI_3840x2160p24_16x9 = 93,
HDMI_3840x2160p25_16x9 = 94,
HDMI_3840x2160p30_16x9 = 95,
HDMI_3840x2160p50_16x9 = 96,
HDMI_3840x2160p60_16x9 = 97,
HDMI_4096x2160p24_256x135 = 98,
HDMI_4096x2160p25_256x135 = 99,
HDMI_4096x2160p30_256x135 = 100,
HDMI_4096x2160p50_256x135 = 101,
HDMI_4096x2160p60_256x135 = 102,
HDMI_3840x2160p24_64x27 = 103,
HDMI_3840x2160p25_64x27 = 104,
HDMI_3840x2160p30_64x27 = 105,
HDMI_3840x2160p50_64x27 = 106,
HDMI_3840x2160p60_64x27 = 107,
HDMI_RESERVED = 108,
HDMI_3840x1080p120hz = 109,
HDMI_3840x1080p100hz,
HDMI_3840x540p240hz,
HDMI_3840x540p200hz,
/*keep for hw verification*/
#define HDMI_3840x1080p120hz HDMI_109_1280x720p48_64x27
#define HDMI_3840x1080p100hz HDMI_110_1680x720p48_64x27
#define HDMI_3840x540p240hz HDMI_111_1920x1080p48_16x9
#define HDMI_3840x540p200hz HDMI_112_1920x1080p48_64x27
/*
* the following vic is for those y420 mode
* they are all beyond OFFSET_HDMITX_VIC420(0x1000)
* and they has same vic with normal vic in the lower bytes.
*/
HDMI_VIC_Y420 =
HDMITX_VIC420_OFFSET,
HDMI_3840x2160p50_16x9_Y420 =
HDMITX_VIC420_OFFSET + HDMI_3840x2160p50_16x9,
HDMI_3840x2160p60_16x9_Y420 =
HDMITX_VIC420_OFFSET + HDMI_3840x2160p60_16x9,
HDMI_4096x2160p50_256x135_Y420 =
HDMITX_VIC420_OFFSET + HDMI_4096x2160p50_256x135,
HDMI_4096x2160p60_256x135_Y420 =
HDMITX_VIC420_OFFSET + HDMI_4096x2160p60_256x135,
HDMI_3840x2160p50_64x27_Y420 =
HDMITX_VIC420_OFFSET + HDMI_3840x2160p50_64x27,
HDMI_3840x2160p60_64x27_Y420 =
HDMITX_VIC420_OFFSET + HDMI_3840x2160p60_64x27,
HDMI_VIC_Y420_MAX,
HDMI_VIC_FAKE = HDMITX_VIC420_FAKE_OFFSET,
HDMIV_640x480p60hz = HDMITX_VESA_OFFSET,
HDMIV_800x480p60hz,
HDMIV_800x600p60hz,
HDMIV_852x480p60hz,
HDMIV_854x480p60hz,
HDMIV_1024x600p60hz,
HDMIV_1024x768p60hz,
HDMIV_1152x864p75hz,
HDMIV_1280x600p60hz,
HDMIV_1280x768p60hz,
HDMIV_1280x800p60hz,
HDMIV_1280x960p60hz,
HDMIV_1280x1024p60hz,
HDMIV_1360x768p60hz,
HDMIV_1366x768p60hz,
HDMIV_1400x1050p60hz,
HDMIV_1440x900p60hz,
HDMIV_1440x2560p60hz,
HDMIV_1600x900p60hz,
HDMIV_1600x1200p60hz,
HDMIV_1680x1050p60hz,
HDMIV_1920x1200p60hz,
HDMIV_2048x1080p24hz,
HDMIV_2160x1200p90hz,
HDMIV_2560x1080p60hz,
HDMIV_2560x1440p60hz,
HDMIV_2560x1600p60hz,
HDMIV_3440x1440p60hz,
HDMIV_2400x1200p90hz,
HDMIV_3840x1080p60hz,
HDMI_VIC_END,
};
/* Compliance with old definitions */
#define HDMI_640x480p60 HDMI_640x480p60_4x3
@@ -154,6 +221,7 @@ enum hdmi_tf_type {
#define HDMI_480i60_16x9 HDMI_720x480i60_16x9
#define HDMI_480i60_16x9_rpt HDMI_2880x480i60_16x9
#define HDMI_1440x480p60 HDMI_1440x480p60_4x3
#define HDMI_1440x480p60_16x9 HDMI_1440x480p60_16x9
#define HDMI_1080p60 HDMI_1920x1080p60_16x9
#define HDMI_576p50 HDMI_720x576p50_4x3
#define HDMI_576p50_16x9 HDMI_720x576p50_16x9
@@ -197,7 +265,29 @@ enum hdmi_phy_para {
enum hdmi_audio_fs;
struct dtd;
#define hdmi_cea_timing hdmi_timing
/* CEA TIMING STRUCT DEFINITION */
struct hdmi_cea_timing {
unsigned int pixel_freq; /* Unit: 1000 */
unsigned int frac_freq; /* 1.001 shift */
unsigned int h_freq; /* Unit: Hz */
unsigned int v_freq; /* Unit: 0.001 Hz */
unsigned int vsync; /* Unit: Hz, rough data */
unsigned int vsync_polarity:1;
unsigned int hsync_polarity:1;
unsigned short h_active;
unsigned short h_total;
unsigned short h_blank;
unsigned short h_front;
unsigned short h_sync;
unsigned short h_back;
unsigned short v_active;
unsigned short v_total;
unsigned short v_blank;
unsigned short v_front;
unsigned short v_sync;
unsigned short v_back;
unsigned short v_sync_ln;
};
enum hdmi_hdr_status {
HDR10PLUS_VSIF = 0,
@@ -226,6 +316,23 @@ enum hdmi_3d_type {
/* t: struct hdmi_cea_timing * */
#define GET_TIMING(name) (t->(name))
struct hdmi_format_para {
enum hdmi_vic vic;
unsigned char *name;
unsigned char *sname;
char ext_name[32];
enum hdmi_color_depth cd; /* cd8, cd10 or cd12 */
enum hdmi_colorspace cs; /* rgb, y444, y422, y420 */
enum hdmi_quantization_range cr; /* limit, full */
unsigned int pixel_repetition_factor;
unsigned int progress_mode:1;
unsigned int scrambler_en:1;
unsigned int tmds_clk_div40:1;
unsigned int tmds_clk; /* Unit: 1000 */
struct hdmi_cea_timing timing;
struct vinfo_s hdmitx_vinfo;
};
/* HDMI Packet Type Definitions */
#define PT_NULL_PKT 0x00
#define PT_AUD_CLK_REGENERATION 0x01
@@ -281,7 +388,7 @@ enum hdmi_aspect_ratio {
struct vesa_standard_timing;
const struct hdmi_format_para *hdmi_get_fmt_paras(enum hdmi_vic vic);
struct hdmi_format_para *hdmi_get_fmt_paras(enum hdmi_vic vic);
struct hdmi_format_para *hdmi_match_dtd_paras(struct dtd *t);
void check_detail_fmt(void);
unsigned int hdmi_get_csc_coef(unsigned int input_format,
@@ -290,7 +397,7 @@ unsigned int hdmi_get_csc_coef(unsigned int input_format,
unsigned int color_format,
const unsigned char **coef_array,
unsigned int *coef_length);
const struct hdmi_format_para *hdmi_get_fmt_name(char const *name, char const *attr);
struct hdmi_format_para *hdmi_get_fmt_name(char const *name, char const *attr);
struct hdmi_format_para *hdmi_tst_fmt_name(char const *name, char const *attr);
struct vinfo_s *hdmi_get_valid_vinfo(char *mode);
const char *hdmi_get_str_cd(struct hdmi_format_para *para);
@@ -418,6 +525,21 @@ struct hdmi_audio_fs_ncts {
unsigned int def_n;
};
struct parse_cd {
enum hdmi_color_depth cd;
const char *name;
};
struct parse_cs {
enum hdmi_colorspace cs;
const char *name;
};
struct parse_cr {
enum hdmi_quantization_range cr;
const char *name;
};
struct vesa_standard_timing {
unsigned short hactive;
unsigned short vactive;
@@ -367,6 +367,7 @@ struct hdmitx_dev {
/* For some un-well-known TVs, no edid at all */
unsigned int tv_no_edid;
unsigned int hpd_lock;
struct hdmi_format_para *para;
/* 0: RGB444 1: Y444 2: Y422 3: Y420 */
/* 4: 24bit 5: 30bit 6: 36bit 7: 48bit */
/* if equals to 1, means current video & audio output are blank */
@@ -10,8 +10,15 @@
#include <linux/amlogic/media/vout/vinfo.h>
#include <linux/amlogic/media/vout/hdmi_tx_ext.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_common.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_edid.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_mode.h>
/* HDMI VIC definitions */
/* HDMITX_VIC_MASK are associated with
* VIC_MAX_VALID_MODE and VIC_MAX_NUM in hdmi_tx_module.h
*/
#define HDMITX_VESA_OFFSET 0x300
#define HDMITX_VIC_MASK 0xff
#define HDMI_PACKET_TYPE_GCP 0x3
@@ -25,11 +32,48 @@ enum hdmi_hdr_status {
SDR,
};
/* CEA TIMING STRUCT DEFINITION */
struct hdmi_timing {
unsigned int vic;
unsigned char *name;
unsigned char *sname;
unsigned short pi_mode; /* 1: progressive 0: interlaced */
unsigned int h_freq; /* in Hz */
unsigned int v_freq; /* in 0.001 Hz */
unsigned int pixel_freq; /* Unit: 1000 */
unsigned short h_total;
unsigned short h_blank;
unsigned short h_front;
unsigned short h_sync;
unsigned short h_back;
unsigned short h_active;
unsigned short v_total;
unsigned short v_blank;
unsigned short v_front;
unsigned short v_sync;
unsigned short v_back;
unsigned short v_active;
unsigned short v_sync_ln;
unsigned short h_pol;
unsigned short v_pol;
unsigned short h_pict;
unsigned short v_pict;
unsigned short h_pixel;
unsigned short v_pixel;
unsigned int pixel_repetition_factor;
};
u32 calc_frl_bandwidth(u32 pixel_freq, enum hdmi_colorspace cs,
enum hdmi_color_depth cd);
u32 calc_tmds_bandwidth(u32 pixel_freq, enum hdmi_colorspace cs,
enum hdmi_color_depth cd);
struct parse_cd {
enum hdmi_color_depth cd;
const char *name;
};
enum hdmi_tf_type {
HDMI_NONE = 0,
/* HDMI_HDR_TYPE, HDMI_DV_TYPE, and HDMI_HDR10P_TYPE
@@ -47,6 +91,213 @@ enum hdmi_tf_type {
HDMI_HDR10P_DV_VSIF = HDMI_HDR10P_TYPE | 1,
};
enum hdmi_vic {
/* Refer to CEA 861-D */
HDMI_0_UNKNOWN = 0,
HDMI_1_640x480p60_4x3 = 1,
HDMI_2_720x480p60_4x3 = 2,
HDMI_3_720x480p60_16x9 = 3,
HDMI_4_1280x720p60_16x9 = 4,
HDMI_5_1920x1080i60_16x9 = 5,
HDMI_6_720x480i60_4x3 = 6,
HDMI_7_720x480i60_16x9 = 7,
HDMI_8_720x240p60_4x3 = 8,
HDMI_9_720x240p60_16x9 = 9,
HDMI_10_2880x480i60_4x3 = 10,
HDMI_11_2880x480i60_16x9 = 11,
HDMI_12_2880x240p60_4x3 = 12,
HDMI_13_2880x240p60_16x9 = 13,
HDMI_14_1440x480p60_4x3 = 14,
HDMI_15_1440x480p60_16x9 = 15,
HDMI_16_1920x1080p60_16x9 = 16,
HDMI_17_720x576p50_4x3 = 17,
HDMI_18_720x576p50_16x9 = 18,
HDMI_19_1280x720p50_16x9 = 19,
HDMI_20_1920x1080i50_16x9 = 20,
HDMI_21_720x576i50_4x3 = 21,
HDMI_22_720x576i50_16x9 = 22,
HDMI_23_720x288p_4x3 = 23,
HDMI_24_720x288p_16x9 = 24,
HDMI_25_2880x576i50_4x3 = 25,
HDMI_26_2880x576i50_16x9 = 26,
HDMI_27_2880x288p50_4x3 = 27,
HDMI_28_2880x288p50_16x9 = 28,
HDMI_29_1440x576p_4x3 = 29,
HDMI_30_1440x576p_16x9 = 30,
HDMI_31_1920x1080p50_16x9 = 31,
HDMI_32_1920x1080p24_16x9 = 32,
HDMI_33_1920x1080p25_16x9 = 33,
HDMI_34_1920x1080p30_16x9 = 34,
HDMI_35_2880x480p60_4x3 = 35,
HDMI_36_2880x480p60_16x9 = 36,
HDMI_37_2880x576p50_4x3 = 37,
HDMI_38_2880x576p50_16x9 = 38,
HDMI_39_1920x1080i_t1250_50_16x9 = 39,
HDMI_40_1920x1080i100_16x9 = 40,
HDMI_41_1280x720p100_16x9 = 41,
HDMI_42_720x576p100_4x3 = 42,
HDMI_43_720x576p100_16x9 = 43,
HDMI_44_720x576i100_4x3 = 44,
HDMI_45_720x576i100_16x9 = 45,
HDMI_46_1920x1080i120_16x9 = 46,
HDMI_47_1280x720p120_16x9 = 47,
HDMI_48_720x480p120_4x3 = 48,
HDMI_49_720x480p120_16x9 = 49,
HDMI_50_720x480i120_4x3 = 50,
HDMI_51_720x480i120_16x9 = 51,
HDMI_52_720x576p200_4x3 = 52,
HDMI_53_720x576p200_16x9 = 53,
HDMI_54_720x576i200_4x3 = 54,
HDMI_55_720x576i200_16x9 = 55,
HDMI_56_720x480p240_4x3 = 56,
HDMI_57_720x480p240_16x9 = 57,
HDMI_58_720x480i240_4x3 = 58,
HDMI_59_720x480i240_16x9 = 59,
HDMI_60_1280x720p24_16x9 = 60,
HDMI_61_1280x720p25_16x9 = 61,
HDMI_62_1280x720p30_16x9 = 62,
HDMI_63_1920x1080p120_16x9 = 63,
HDMI_64_1920x1080p100_16x9 = 64,
HDMI_65_1280x720p24_64x27 = 65,
HDMI_66_1280x720p25_64x27 = 66,
HDMI_67_1280x720p30_64x27 = 67,
HDMI_68_1280x720p50_64x27 = 68,
HDMI_69_1280x720p60_64x27 = 69,
HDMI_70_1280x720p100_64x27 = 70,
HDMI_71_1280x720p120_64x27 = 71,
HDMI_72_1920x1080p24_64x27 = 72,
HDMI_73_1920x1080p25_64x27 = 73,
HDMI_74_1920x1080p30_64x27 = 74,
HDMI_75_1920x1080p50_64x27 = 75,
HDMI_76_1920x1080p60_64x27 = 76,
HDMI_77_1920x1080p100_64x27 = 77,
HDMI_78_1920x1080p120_64x27 = 78,
HDMI_79_1680x720p24_64x27 = 79,
HDMI_80_1680x720p25_64x27 = 80,
HDMI_81_1680x720p30_64x27 = 81,
HDMI_82_1680x720p50_64x27 = 82,
HDMI_83_1680x720p60_64x27 = 83,
HDMI_84_1680x720p100_64x27 = 84,
HDMI_85_1680x720p120_64x27 = 85,
HDMI_86_2560x1080p24_64x27 = 86,
HDMI_87_2560x1080p25_64x27 = 87,
HDMI_88_2560x1080p30_64x27 = 88,
HDMI_89_2560x1080p50_64x27 = 89,
HDMI_90_2560x1080p60_64x27 = 90,
HDMI_91_2560x1080p100_64x27 = 91,
HDMI_92_2560x1080p120_64x27 = 92,
HDMI_93_3840x2160p24_16x9 = 93,
HDMI_94_3840x2160p25_16x9 = 94,
HDMI_95_3840x2160p30_16x9 = 95,
HDMI_96_3840x2160p50_16x9 = 96,
HDMI_97_3840x2160p60_16x9 = 97,
HDMI_98_4096x2160p24_256x135 = 98,
HDMI_99_4096x2160p25_256x135 = 99,
HDMI_100_4096x2160p30_256x135 = 100,
HDMI_101_4096x2160p50_256x135 = 101,
HDMI_102_4096x2160p60_256x135 = 102,
HDMI_103_3840x2160p24_64x27 = 103,
HDMI_104_3840x2160p25_64x27 = 104,
HDMI_105_3840x2160p30_64x27 = 105,
HDMI_106_3840x2160p50_64x27 = 106,
HDMI_107_3840x2160p60_64x27 = 107,
HDMI_108_1280x720p48_16x9 = 108,
HDMI_109_1280x720p48_64x27 = 109,
HDMI_110_1680x720p48_64x27 = 110,
HDMI_111_1920x1080p48_16x9 = 111,
HDMI_112_1920x1080p48_64x27 = 112,
HDMI_113_2560x1080p48_64x27 = 113,
HDMI_114_3840x2160p48_16x9 = 114,
HDMI_115_4096x2160p48_256x135 = 115,
HDMI_116_3840x2160p48_64x27 = 116,
HDMI_117_3840x2160p100_16x9 = 117,
HDMI_118_3840x2160p120_16x9 = 118,
HDMI_119_3840x2160p100_64x27 = 119,
HDMI_120_3840x2160p120_64x27 = 120,
HDMI_121_5120x2160p24_64x27 = 121,
HDMI_122_5120x2160p25_64x27 = 122,
HDMI_123_5120x2160p30_64x27 = 123,
HDMI_124_5120x2160p48_64x27 = 124,
HDMI_125_5120x2160p50_64x27 = 125,
HDMI_126_5120x2160p60_64x27 = 126,
HDMI_127_5120x2160p100_64x27 = 127,
/* 127 ~ 192 reserved */
HDMI_193_5120x2160p120_64x27 = 193,
HDMI_194_7680x4320p24_16x9 = 194,
HDMI_195_7680x4320p25_16x9 = 195,
HDMI_196_7680x4320p30_16x9 = 196,
HDMI_197_7680x4320p48_16x9 = 197,
HDMI_198_7680x4320p50_16x9 = 198,
HDMI_199_7680x4320p60_16x9 = 199,
HDMI_200_7680x4320p100_16x9 = 200,
HDMI_201_7680x4320p120_16x9 = 201,
HDMI_202_7680x4320p24_64x27 = 202,
HDMI_203_7680x4320p25_64x27 = 203,
HDMI_204_7680x4320p30_64x27 = 204,
HDMI_205_7680x4320p48_64x27 = 205,
HDMI_206_7680x4320p50_64x27 = 206,
HDMI_207_7680x4320p60_64x27 = 207,
HDMI_208_7680x4320p100_64x27 = 208,
HDMI_209_7680x4320p120_64x27 = 209,
HDMI_210_10240x4320p24_64x27 = 210,
HDMI_211_10240x4320p25_64x27 = 211,
HDMI_212_10240x4320p30_64x27 = 212,
HDMI_213_10240x4320p48_64x27 = 213,
HDMI_214_10240x4320p50_64x27 = 214,
HDMI_215_10240x4320p60_64x27 = 215,
HDMI_216_10240x4320p100_64x27 = 216,
HDMI_217_10240x4320p120_64x27 = 217,
HDMI_218_4096x2160p100_256x135 = 218,
HDMI_219_4096x2160p120_256x135 = 219,
HDMIV_640x480p60hz = HDMITX_VESA_OFFSET,
HDMIV_800x480p60hz,
HDMIV_800x600p60hz,
HDMIV_852x480p60hz,
HDMIV_854x480p60hz,
HDMIV_1024x600p60hz,
HDMIV_1024x768p60hz,
HDMIV_1152x864p75hz,
HDMIV_1280x600p60hz,
HDMIV_1280x768p60hz,
HDMIV_1280x800p60hz,
HDMIV_1280x960p60hz,
HDMIV_1280x1024p60hz,
HDMIV_1360x768p60hz,
HDMIV_1366x768p60hz,
HDMIV_1400x1050p60hz,
HDMIV_1440x900p60hz,
HDMIV_1440x2560p60hz,
HDMIV_1600x900p60hz,
HDMIV_1600x1200p60hz,
HDMIV_1680x1050p60hz,
HDMIV_1920x1200p60hz,
HDMIV_2160x1200p90hz,
HDMIV_2560x1080p60hz,
HDMIV_2560x1440p60hz,
HDMIV_2560x1600p60hz,
HDMIV_3440x1440p60hz,
HDMIV_2400x1200p90hz,
HDMI_VIC_FAKE,
HDMI_VIC_END,
};
struct hdmi_format_para {
enum hdmi_vic vic;
unsigned char *name;
unsigned char *sname;
char ext_name[32];
enum hdmi_color_depth cd; /* cd8, cd10 or cd12 */
enum hdmi_colorspace cs; /* 0/1/2/3: rgb/422/444/420 */
enum hdmi_quantization_range cr; /* limit, full */
unsigned int pixel_repetition_factor;
unsigned int progress_mode:1;
u32 scrambler_en:1;
u32 tmds_clk_div40:1;
u32 tmds_clk; /* Unit: 1000 */
struct hdmi_timing timing;
struct vinfo_s hdmitx_vinfo;
};
enum hdmi_phy_para {
HDMI_PHYPARA_6G = 1, /* 2160p60hz 444 8bit */
HDMI_PHYPARA_4p5G, /* 2160p50hz 420 12bit */
@@ -111,7 +362,8 @@ struct hdmi_format_para *hdmitx21_tst_fmt_name(const char *name,
const char *attr);
const struct hdmi_timing *hdmitx21_gettiming_from_vic(enum hdmi_vic vic);
const struct hdmi_timing *hdmitx21_gettiming_from_name(const char *name);
int hdmitx21_get_fmtpara(const char *mode, const char *attr, struct hdmi_format_para *para);
struct hdmi_format_para *hdmitx21_get_fmtpara(const char *mode,
const char *attr);
u32 hdmi21_get_aud_n_paras(enum hdmi_audio_fs fs,
enum hdmi_color_depth cd,
u32 tmds_clk);
@@ -235,6 +487,16 @@ struct hdmi_audio_fs_ncts {
u32 def_n;
};
struct parse_cs {
enum hdmi_colorspace cs;
const char *name;
};
struct parse_cr {
enum hdmi_quantization_range cr;
const char *name;
};
struct vesa_standard_timing {
unsigned short hactive;
unsigned short vactive;
@@ -187,6 +187,7 @@ struct hdmitx_dev {
struct workqueue_struct *cedst_wq;
struct device *hdtx_dev;
struct device *pdev; /* for pinctrl*/
struct hdmi_format_para *para;
struct pinctrl_state *pinctrl_i2c;
struct pinctrl_state *pinctrl_default;
struct amhdmitx_data_s *data;
@@ -12,10 +12,27 @@
#include <drm/amlogic/meson_connector_dev.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_edid.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_types.h>
#define HDMI_INFOFRAME_TYPE_VENDOR2 (0x81 | 0x100)
enum hdmi_color_depth {
COLORDEPTH_24B = 4,
COLORDEPTH_30B = 5,
COLORDEPTH_36B = 6,
COLORDEPTH_48B = 7,
COLORDEPTH_RESERVED,
};
struct hdmi_format_para_new {
enum hdmi_color_depth cd; /* cd8, cd10 or cd12 */
enum hdmi_colorspace cs; /* 0/1/2/3: rgb/422/444/420 */
enum hdmi_quantization_range cr; /* limit, full */
u32 scrambler_en:1;
u32 tmds_clk_div40:1;
u32 tmds_clk; /* Unit: 1000 */
};
struct hdmitx_common {
/* When hdr_priority is 1, then dv_info will be all 0;
* when hdr_priority is 2, then dv_info/hdr_info will be all 0
@@ -34,9 +51,6 @@ struct hdmitx_common {
/*current mode vic.*/
u32 cur_VIC;
/*current format para.*/
struct hdmi_format_para fmt_para;
struct vinfo_s hdmitx_vinfo;
/* allm_mode: 1/on 0/off */
u32 allm_mode;
@@ -8,7 +8,6 @@
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_common.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_hw_common.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_mode.h>
/************************************************************************************
* hdmitx_dev_common only define api which will use hdmitx_common&hdmitx_hw_common.
@@ -7,13 +7,22 @@
#include <linux/types.h>
#include <linux/amlogic/media/vout/vinfo.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_mode.h>
#define EDID_MAX_BLOCK 8
#define VESA_MAX_TIMING 64
#define AUD_MAX_NUM 60
#define MAX_RAW_LEN 64
/* VIC_MAX_VALID_MODE and VIC_MAX_NUM are associated with
* HDMITX_VIC_MASK in hdmi_common.h
*/
#define VIC_MAX_VALID_MODE 256 /* consider 4k2k */
/* half for valid vic, half for vic with y420*/
#define VIC_MAX_NUM 512
#define VESA_MAX_TIMING 64
#define Y420_VIC_MAX_NUM 6 /* only 6 4k mode for y420 */
enum frl_rate_enum {
FRL_NONE = 0,
FRL_3G3L = 1,
@@ -7,7 +7,6 @@
#define __HDMITX_HW_COMMON_H
#include <linux/types.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_mode.h>
/*hw cntl cmd define, abstract from hdmi_tx_module.h*/
#define CMD_DDC_OFFSET (0x10 << 24)
@@ -71,6 +70,7 @@
#define STAT_AUDIO_CLK_STABLE (CMD_STAT_OFFSET + 0x12)
#define STAT_AUDIO_PACK (CMD_STAT_OFFSET + 0x13)
#define STAT_HDR_TYPE (CMD_STAT_OFFSET + 0x20)
#define STAT_TX_PHY (CMD_STAT_OFFSET + 0x30)
/***********************************************************************
@@ -1,342 +0,0 @@
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __HDMITX_MODE_H_
#define __HDMITX_MODE_H_
#include <linux/types.h>
#include <linux/hdmi.h>
/* half for valid vic, half for vic with y420*/
#define VIC_MAX_NUM 512
#define VESA_MAX_TIMING 64
#define Y420_VIC_MAX_NUM 6 /* only 6 4k mode for y420 */
/* HDMITX_VIC_MASK are associated with
* VIC_MAX_VALID_MODE and VIC_MAX_NUM in hdmi_tx_module.h
*/
#define HDMITX_VESA_OFFSET 0x300
/* HDMITX_VIC420_OFFSET and HDMITX_VIC_MASK are associated with
* VIC_MAX_VALID_MODE and VIC_MAX_NUM in hdmi_tx_module.h
*/
#define HDMITX_VIC_MASK 0xff
enum hdmi_vic {
/* Refer to CEA 861-D */
HDMI_0_UNKNOWN = 0,
HDMI_1_640x480p60_4x3 = 1,
HDMI_2_720x480p60_4x3 = 2,
HDMI_3_720x480p60_16x9 = 3,
HDMI_4_1280x720p60_16x9 = 4,
HDMI_5_1920x1080i60_16x9 = 5,
HDMI_6_720x480i60_4x3 = 6,
HDMI_7_720x480i60_16x9 = 7,
HDMI_8_720x240p60_4x3 = 8,
HDMI_9_720x240p60_16x9 = 9,
HDMI_10_2880x480i60_4x3 = 10,
HDMI_11_2880x480i60_16x9 = 11,
HDMI_12_2880x240p60_4x3 = 12,
HDMI_13_2880x240p60_16x9 = 13,
HDMI_14_1440x480p60_4x3 = 14,
HDMI_15_1440x480p60_16x9 = 15,
HDMI_16_1920x1080p60_16x9 = 16,
HDMI_17_720x576p50_4x3 = 17,
HDMI_18_720x576p50_16x9 = 18,
HDMI_19_1280x720p50_16x9 = 19,
HDMI_20_1920x1080i50_16x9 = 20,
HDMI_21_720x576i50_4x3 = 21,
HDMI_22_720x576i50_16x9 = 22,
HDMI_23_720x288p_4x3 = 23,
HDMI_24_720x288p_16x9 = 24,
HDMI_25_2880x576i50_4x3 = 25,
HDMI_26_2880x576i50_16x9 = 26,
HDMI_27_2880x288p50_4x3 = 27,
HDMI_28_2880x288p50_16x9 = 28,
HDMI_29_1440x576p_4x3 = 29,
HDMI_30_1440x576p_16x9 = 30,
HDMI_31_1920x1080p50_16x9 = 31,
HDMI_32_1920x1080p24_16x9 = 32,
HDMI_33_1920x1080p25_16x9 = 33,
HDMI_34_1920x1080p30_16x9 = 34,
HDMI_35_2880x480p60_4x3 = 35,
HDMI_36_2880x480p60_16x9 = 36,
HDMI_37_2880x576p50_4x3 = 37,
HDMI_38_2880x576p50_16x9 = 38,
HDMI_39_1920x1080i_t1250_50_16x9 = 39,
HDMI_40_1920x1080i100_16x9 = 40,
HDMI_41_1280x720p100_16x9 = 41,
HDMI_42_720x576p100_4x3 = 42,
HDMI_43_720x576p100_16x9 = 43,
HDMI_44_720x576i100_4x3 = 44,
HDMI_45_720x576i100_16x9 = 45,
HDMI_46_1920x1080i120_16x9 = 46,
HDMI_47_1280x720p120_16x9 = 47,
HDMI_48_720x480p120_4x3 = 48,
HDMI_49_720x480p120_16x9 = 49,
HDMI_50_720x480i120_4x3 = 50,
HDMI_51_720x480i120_16x9 = 51,
HDMI_52_720x576p200_4x3 = 52,
HDMI_53_720x576p200_16x9 = 53,
HDMI_54_720x576i200_4x3 = 54,
HDMI_55_720x576i200_16x9 = 55,
HDMI_56_720x480p240_4x3 = 56,
HDMI_57_720x480p240_16x9 = 57,
HDMI_58_720x480i240_4x3 = 58,
HDMI_59_720x480i240_16x9 = 59,
HDMI_60_1280x720p24_16x9 = 60,
HDMI_61_1280x720p25_16x9 = 61,
HDMI_62_1280x720p30_16x9 = 62,
HDMI_63_1920x1080p120_16x9 = 63,
HDMI_64_1920x1080p100_16x9 = 64,
HDMI_65_1280x720p24_64x27 = 65,
HDMI_66_1280x720p25_64x27 = 66,
HDMI_67_1280x720p30_64x27 = 67,
HDMI_68_1280x720p50_64x27 = 68,
HDMI_69_1280x720p60_64x27 = 69,
HDMI_70_1280x720p100_64x27 = 70,
HDMI_71_1280x720p120_64x27 = 71,
HDMI_72_1920x1080p24_64x27 = 72,
HDMI_73_1920x1080p25_64x27 = 73,
HDMI_74_1920x1080p30_64x27 = 74,
HDMI_75_1920x1080p50_64x27 = 75,
HDMI_76_1920x1080p60_64x27 = 76,
HDMI_77_1920x1080p100_64x27 = 77,
HDMI_78_1920x1080p120_64x27 = 78,
HDMI_79_1680x720p24_64x27 = 79,
HDMI_80_1680x720p25_64x27 = 80,
HDMI_81_1680x720p30_64x27 = 81,
HDMI_82_1680x720p50_64x27 = 82,
HDMI_83_1680x720p60_64x27 = 83,
HDMI_84_1680x720p100_64x27 = 84,
HDMI_85_1680x720p120_64x27 = 85,
HDMI_86_2560x1080p24_64x27 = 86,
HDMI_87_2560x1080p25_64x27 = 87,
HDMI_88_2560x1080p30_64x27 = 88,
HDMI_89_2560x1080p50_64x27 = 89,
HDMI_90_2560x1080p60_64x27 = 90,
HDMI_91_2560x1080p100_64x27 = 91,
HDMI_92_2560x1080p120_64x27 = 92,
HDMI_93_3840x2160p24_16x9 = 93,
HDMI_94_3840x2160p25_16x9 = 94,
HDMI_95_3840x2160p30_16x9 = 95,
HDMI_96_3840x2160p50_16x9 = 96,
HDMI_97_3840x2160p60_16x9 = 97,
HDMI_98_4096x2160p24_256x135 = 98,
HDMI_99_4096x2160p25_256x135 = 99,
HDMI_100_4096x2160p30_256x135 = 100,
HDMI_101_4096x2160p50_256x135 = 101,
HDMI_102_4096x2160p60_256x135 = 102,
HDMI_103_3840x2160p24_64x27 = 103,
HDMI_104_3840x2160p25_64x27 = 104,
HDMI_105_3840x2160p30_64x27 = 105,
HDMI_106_3840x2160p50_64x27 = 106,
HDMI_107_3840x2160p60_64x27 = 107,
HDMI_108_1280x720p48_16x9 = 108,
HDMI_109_1280x720p48_64x27 = 109,
HDMI_110_1680x720p48_64x27 = 110,
HDMI_111_1920x1080p48_16x9 = 111,
HDMI_112_1920x1080p48_64x27 = 112,
HDMI_113_2560x1080p48_64x27 = 113,
HDMI_114_3840x2160p48_16x9 = 114,
HDMI_115_4096x2160p48_256x135 = 115,
HDMI_116_3840x2160p48_64x27 = 116,
HDMI_117_3840x2160p100_16x9 = 117,
HDMI_118_3840x2160p120_16x9 = 118,
HDMI_119_3840x2160p100_64x27 = 119,
HDMI_120_3840x2160p120_64x27 = 120,
HDMI_121_5120x2160p24_64x27 = 121,
HDMI_122_5120x2160p25_64x27 = 122,
HDMI_123_5120x2160p30_64x27 = 123,
HDMI_124_5120x2160p48_64x27 = 124,
HDMI_125_5120x2160p50_64x27 = 125,
HDMI_126_5120x2160p60_64x27 = 126,
HDMI_127_5120x2160p100_64x27 = 127,
/* 128 ~ 192 reserved */
HDMI_193_5120x2160p120_64x27 = 193,
HDMI_194_7680x4320p24_16x9 = 194,
HDMI_195_7680x4320p25_16x9 = 195,
HDMI_196_7680x4320p30_16x9 = 196,
HDMI_197_7680x4320p48_16x9 = 197,
HDMI_198_7680x4320p50_16x9 = 198,
HDMI_199_7680x4320p60_16x9 = 199,
HDMI_200_7680x4320p100_16x9 = 200,
HDMI_201_7680x4320p120_16x9 = 201,
HDMI_202_7680x4320p24_64x27 = 202,
HDMI_203_7680x4320p25_64x27 = 203,
HDMI_204_7680x4320p30_64x27 = 204,
HDMI_205_7680x4320p48_64x27 = 205,
HDMI_206_7680x4320p50_64x27 = 206,
HDMI_207_7680x4320p60_64x27 = 207,
HDMI_208_7680x4320p100_64x27 = 208,
HDMI_209_7680x4320p120_64x27 = 209,
HDMI_210_10240x4320p24_64x27 = 210,
HDMI_211_10240x4320p25_64x27 = 211,
HDMI_212_10240x4320p30_64x27 = 212,
HDMI_213_10240x4320p48_64x27 = 213,
HDMI_214_10240x4320p50_64x27 = 214,
HDMI_215_10240x4320p60_64x27 = 215,
HDMI_216_10240x4320p100_64x27 = 216,
HDMI_217_10240x4320p120_64x27 = 217,
HDMI_218_4096x2160p100_256x135 = 218,
HDMI_219_4096x2160p120_256x135 = 219,
HDMI_CEA_VIC_END,
/* !!!DONT USE IT ANYMORE, WILL REMOVE LATER.
* start from 0x200, the following vic is for those y420 mode
* and they has same vic with normal vic in the lower bytes.
*/
HDMITX_VIC420_OFFSET = 0x100,
HDMI_3840x2160p50_16x9_Y420 =
HDMITX_VIC420_OFFSET + HDMI_96_3840x2160p50_16x9,
HDMI_3840x2160p60_16x9_Y420 =
HDMITX_VIC420_OFFSET + HDMI_97_3840x2160p60_16x9,
HDMI_4096x2160p50_256x135_Y420 =
HDMITX_VIC420_OFFSET + HDMI_101_4096x2160p50_256x135,
HDMI_4096x2160p60_256x135_Y420 =
HDMITX_VIC420_OFFSET + HDMI_102_4096x2160p60_256x135,
HDMI_3840x2160p50_64x27_Y420 =
HDMITX_VIC420_OFFSET + HDMI_106_3840x2160p50_64x27,
HDMI_3840x2160p60_64x27_Y420 =
HDMITX_VIC420_OFFSET + HDMI_107_3840x2160p60_64x27,
/*FAKE VIC*/
HDMI_VIC_FAKE = 0X200,
/*Vesa mode which dont have vic, we specify value for them also*/
HDMIV_0_640x480p60hz = HDMITX_VESA_OFFSET,
HDMIV_1_800x480p60hz,
HDMIV_2_800x600p60hz,
HDMIV_3_852x480p60hz,
HDMIV_4_854x480p60hz,
HDMIV_5_1024x600p60hz,
HDMIV_6_1024x768p60hz,
HDMIV_7_1152x864p75hz,
HDMIV_8_1280x768p60hz,
HDMIV_9_1280x800p60hz,
HDMIV_10_1280x960p60hz,
HDMIV_11_1280x1024p60hz,
HDMIV_12_1360x768p60hz,
HDMIV_13_1366x768p60hz,
HDMIV_14_1400x1050p60hz,
HDMIV_15_1440x900p60hz,
HDMIV_16_1440x2560p60hz,
HDMIV_17_1600x900p60hz,
HDMIV_18_1600x1200p60hz,
HDMIV_19_1680x1050p60hz,
HDMIV_20_1920x1200p60hz,
HDMIV_21_2048x1080p24hz,
HDMIV_22_2160x1200p90hz,
HDMIV_23_2560x1600p60hz,
HDMIV_24_3440x1440p60hz,
HDMIV_25_2400x1200p90hz,
HDMIV_26_3840x1080p60hz,
/*not supported in timing*/
HDMIV_2560x1080p60hz,
HDMIV_2560x1440p60hz,
HDMIV_1280x600p60hz,
HDMIV_2560x1600p60hz,
HDMIV_3440x1440p60hz,
HDMIV_2400x1200p90hz,
HDMI_VIC_END = 0xFFFF,
};
/* Compliance with old definitions */
#define HDMIV_640x480p60hz HDMIV_0_640x480p60hz
#define HDMIV_800x480p60hz HDMIV_1_800x480p60hz
#define HDMIV_800x600p60hz HDMIV_2_800x600p60hz
#define HDMIV_852x480p60hz HDMIV_3_852x480p60hz
#define HDMIV_854x480p60hz HDMIV_4_854x480p60hz
#define HDMIV_1024x600p60hz HDMIV_5_1024x600p60hz
#define HDMIV_1024x768p60hz HDMIV_6_1024x768p60hz
#define HDMIV_1152x864p75hz HDMIV_7_1152x864p75hz
#define HDMIV_1280x768p60hz HDMIV_8_1280x768p60hz
#define HDMIV_1280x800p60hz HDMIV_9_1280x800p60hz
#define HDMIV_1280x960p60hz HDMIV_10_1280x960p60hz
#define HDMIV_1280x1024p60hz HDMIV_11_1280x1024p60hz
#define HDMIV_1360x768p60hz HDMIV_12_1360x768p60hz
#define HDMIV_1366x768p60hz HDMIV_13_1366x768p60hz
#define HDMIV_1400x1050p60hz HDMIV_14_1400x1050p60hz
#define HDMIV_1440x900p60hz HDMIV_15_1440x900p60hz
#define HDMIV_1440x2560p60hz HDMIV_16_1440x2560p60hz
#define HDMIV_1600x900p60hz HDMIV_17_1600x900p60hz
#define HDMIV_1600x1200p60hz HDMIV_18_1600x1200p60hz
#define HDMIV_1680x1050p60hz HDMIV_19_1680x1050p60hz
#define HDMIV_1920x1200p60hz HDMIV_20_1920x1200p60hz
#define HDMIV_2048x1080p24hz HDMIV_21_2048x1080p24hz
#define HDMIV_2160x1200p90hz HDMIV_22_2160x1200p90hz
#define HDMIV_2560x1600p60hz HDMIV_23_2560x1600p60hz
#define HDMIV_3440x1440p60hz HDMIV_24_3440x1440p60hz
#define HDMIV_2400x1200p90hz HDMIV_25_2400x1200p90hz
#define HDMIV_3840x1080p60hz HDMIV_26_3840x1080p60hz
/* CEA TIMING STRUCT DEFINITION */
struct hdmi_timing {
unsigned int vic;
unsigned char *name;
unsigned char *sname;
unsigned short pi_mode; /* 1: progressive 0: interlaced */
unsigned int h_freq; /* in Hz */
unsigned int v_freq; /* in 0.001 Hz */
unsigned int pixel_freq; /* Unit: 1000 */
unsigned short h_total;
unsigned short h_blank;
unsigned short h_front;
unsigned short h_sync;
unsigned short h_back;
unsigned short h_active;
unsigned short v_total;
unsigned short v_blank;
unsigned short v_front;
unsigned short v_sync;
unsigned short v_back;
unsigned short v_active;
unsigned short v_sync_ln;
unsigned short h_pol; /*hsync_polarity*/
unsigned short v_pol; /*vsync_polarity*/
unsigned short h_pict;
unsigned short v_pict;
unsigned short h_pixel;
unsigned short v_pixel;
/*Same as DRM_MODE_FLAG_DBLCLK, now only for 480i&576i*/
u32 pixel_repetition_factor:1;
/*hdmi_cea_timing for hdmitx20*/
unsigned int frac_freq; /* 1.001 shift */
unsigned int vsync; /* Unit: Hz, rough data */
unsigned int vsync_polarity:1;
unsigned int hsync_polarity:1;
};
enum hdmi_color_depth {
COLORDEPTH_24B = 4,
COLORDEPTH_30B = 5,
COLORDEPTH_36B = 6,
COLORDEPTH_48B = 7,
COLORDEPTH_RESERVED,
};
struct parse_cd {
enum hdmi_color_depth cd;
const char *name;
};
struct parse_cs {
enum hdmi_colorspace cs;
const char *name;
};
struct parse_cr {
enum hdmi_quantization_range cr;
const char *name;
};
#endif
@@ -1,44 +0,0 @@
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __HDMITX_TYPES_H
#define __HDMITX_TYPES_H
#include <linux/types.h>
#include <linux/hdmi.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_mode.h>
#include <linux/amlogic/media/vout/vinfo.h>
struct hdmi_format_para {
enum hdmi_vic vic;
unsigned char *name;
unsigned char *sname;
char ext_name[32];
/*valid info*/
enum hdmi_color_depth cd; /* cd8, cd10 or cd12 */
enum hdmi_colorspace cs; /* 0/1/2/3: rgb/422/444/420 */
enum hdmi_quantization_range cr; /* limit, full */
/*valid info end*/
unsigned int pixel_repetition_factor;
unsigned int progress_mode:1;
/*valid info*/
u32 scrambler_en:1;
u32 tmds_clk_div40:1;
u32 tmds_clk; /* Unit: 1000 */
/*valid info end*/
struct hdmi_timing timing;
/*TODO:will removed later, dont use anymore.*/
struct vinfo_s deprecated_vinfo;
/*valid info*/
u32 frac_mode;
/*valid info end*/
};
#endif
-6
View File
@@ -6,8 +6,6 @@
#ifndef _VINFO_H_
#define _VINFO_H_
#include <linux/amlogic/media/video_common.h>
#include <linux/hdmi.h>
#include <linux/amlogic/media/vout/hdmitx_common/hdmitx_mode.h>
#include <linux/types.h>
/* the MSB is represent vmode set by vmode_init */
@@ -418,10 +416,6 @@ struct vinfo_s {
* the default value is 0 or 1.
*/
u8 cur_enc_ppc;
/*dv need get the cd/cd of hdmitx.*/
enum hdmi_color_depth cd;
enum hdmi_colorspace cs;
};
#ifdef CONFIG_AMLOGIC_MEDIA_FB