ODROID: media: hdmi: add switching vout mode logic (dvi/hdmi)

ex)
setenv bootargs ${bootargs} voutmode=hdmi
setenv bootargs ${bootargs} voutmode=dvi

Change-Id: I2fd6cdafa6ae7dff7a7297982add66b038f3ae40
This commit is contained in:
Joy Cho
2018-10-16 16:18:54 +09:00
committed by Chris KIM
parent d4efd8c098
commit 8d4ac81601
4 changed files with 83 additions and 9 deletions

View File

@@ -551,7 +551,19 @@ static int set_disp_mode_auto(void)
if ((vic_ready != HDMI_Unknown) && (vic_ready == vic)) {
pr_info(SYS "[%s] ALREADY init VIC = %d\n",
__func__, vic);
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
if (odroid_voutmode() == VOUTMODE_HDMI) {
hdev->HWOp.CntlConfig(hdev, CONF_HDMI_DVI_MODE,
HDMI_MODE);
pr_info(SYS "change to HDMI mode\n");
} else if (odroid_voutmode() == VOUTMODE_DVI) {
hdev->HWOp.CntlConfig(hdev, CONF_HDMI_DVI_MODE,
DVI_MODE);
pr_info(SYS "change to DVI mode\n");
} else if (hdev->RXCap.ieeeoui == 0) {
#else
if (hdev->RXCap.ieeeoui == 0) {
#endif
/* DVI case judgement. In uboot, directly output HDMI
* mode
*/
@@ -4047,12 +4059,27 @@ static void hdmitx_hpd_plugin_handler(struct work_struct *work)
hdmitx_get_edid(hdev);
hdev->cedst_policy = hdev->cedst_en & hdev->RXCap.scdc_present;
hdmi_physcial_size_update(hdev);
if (hdev->RXCap.ieeeoui != HDMI_IEEEOUI)
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
else
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
if (odroid_voutmode() == VOUTMODE_HDMI) {
pr_info(VID "Sink is HDMI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, HDMI_MODE);
} else if (odroid_voutmode() == VOUTMODE_DVI) {
pr_info(VID "Sink is DVI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
} else
#endif
{
if (hdev->RXCap.ieeeoui != HDMI_IEEEOUI)
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
else
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, HDMI_MODE);
}
mutex_lock(&getedid_mutex);
if (hdev->chip_type < MESON_CPU_ID_G12A)
hdev->HWOp.CntlMisc(hdev, MISC_I2C_REACTIVE, 0);

View File

@@ -982,14 +982,27 @@ int hdmitx_set_display(struct hdmitx_dev *hdev, enum hdmi_vic VideoCode)
* TMDS_MODE[hdmi_config]
* 0: DVI Mode 1: HDMI Mode
*/
if (is_dvi_device(&hdev->RXCap)) {
pr_info(VID "Sink is DVI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
} else {
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
if (odroid_voutmode() == VOUTMODE_HDMI) {
pr_info(VID "Sink is HDMI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, HDMI_MODE);
} else if (odroid_voutmode() == VOUTMODE_DVI) {
pr_info(VID "Sink is DVI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
} else
#endif
{
if (is_dvi_device(&hdev->RXCap)) {
pr_info(VID "Sink is DVI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, DVI_MODE);
} else {
pr_info(VID "Sink is HDMI device\n");
hdev->HWOp.CntlConfig(hdev,
CONF_HDMI_DVI_MODE, HDMI_MODE);
}
}
hdmi_tx_construct_avi_packet(param, (char *)AVI_DB);

View File

@@ -101,6 +101,32 @@ static int hdmitx_cntl_misc(struct hdmitx_dev *hdev, unsigned int cmd,
#define TX_INPUT_COLOR_RANGE 0
/* Pixel bit width: 4=24-bit; 5=30-bit; 6=36-bit; 7=48-bit. */
#define TX_COLOR_DEPTH COLORDEPTH_24B
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
static int dvi_mode = VOUTMODE_NOINIT;
int odroid_voutmode(void)
{
return dvi_mode;
}
EXPORT_SYMBOL(odroid_voutmode);
static int __init vout_setup(char *s)
{
if (!strcmp(s, "hdmi"))
dvi_mode = VOUTMODE_HDMI;
else if (!strcmp(s, "dvi"))
dvi_mode = VOUTMODE_DVI;
else
dvi_mode = VOUTMODE_NOINIT;
pr_info("voutmode : %d\n", dvi_mode);
return 0;
}
__setup("voutmode=", vout_setup);
#endif
int hdmitx_hpd_hw_op(enum hpd_op cmd)
{
struct hdmitx_dev *hdev = get_hdmitx_device();

View File

@@ -324,4 +324,12 @@ struct hdmitx_info {
/* ------------------------------------------------------- */
};
#if defined(CONFIG_ARCH_MESON64_ODROID_COMMON)
#define VOUTMODE_NOINIT 0x00
#define VOUTMODE_HDMI 0x01
#define VOUTMODE_DVI 0x02
int odroid_voutmode(void);
#endif
#endif /* _HDMI_RX_GLOBAL_H */