mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user