summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Winkler <robert.winkler@boundarydevices.com>2013-07-23 15:07:56 -0700
committerStefano Babic <sbabic@denx.de>2013-07-27 10:52:42 +0200
commit10f779da54b8a8c85df6d58592c40836d8e7ed49 (patch)
tree41660d6fcf1fcd5736c266d48903b88d48ec8f40
parenta11f18737c996a737b85be46b2e8363b7fa2659c (diff)
downloadu-boot-imx-10f779da54b8a8c85df6d58592c40836d8e7ed49.zip
u-boot-imx-10f779da54b8a8c85df6d58592c40836d8e7ed49.tar.gz
u-boot-imx-10f779da54b8a8c85df6d58592c40836d8e7ed49.tar.bz2
imx: nitrogen6x: mx6qsabrelite: Add support for DVI monitors
A little background is probably appropriate for this patch. Since "the beginning" of usage of the SABRE Lite and Nitrogen6x boards, DVI detection has been somewhat broken. Some (most) DVI monitors don't produce the "HPD" bit in the PHY_STAT0 register, but do show proper toggling of the RX_SENSE0..3 bits. Creating a new the bit-mask to include all five bits and modifying the 'hdmidet' command and internal detection routines allows these monitors to function properly in U-Boot. A related patch to our kernels allows things to work under Linux: https://github.com/boundarydevices/linux-imx6/commit/7d8752905c118af9063738a533227de0b2f6ecd4 Signed-off-by: Robert Winkler <robert.winkler@boundarydevices.com> Acked-by: Stefano Babic <sbabic@denx.de>
-rw-r--r--arch/arm/imx-common/cmd_hdmidet.c3
-rw-r--r--arch/arm/include/asm/arch-mx6/mxc_hdmi.h3
-rw-r--r--board/boundary/nitrogen6x/nitrogen6x.c2
3 files changed, 5 insertions, 3 deletions
diff --git a/arch/arm/imx-common/cmd_hdmidet.c b/arch/arm/imx-common/cmd_hdmidet.c
index 794bf50..ce0b26e 100644
--- a/arch/arm/imx-common/cmd_hdmidet.c
+++ b/arch/arm/imx-common/cmd_hdmidet.c
@@ -27,8 +27,7 @@
static int do_hdmidet(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
struct hdmi_regs *hdmi = (struct hdmi_regs *)HDMI_ARB_BASE_ADDR;
- u8 reg = readb(&hdmi->phy_stat0) & HDMI_PHY_HPD;
- return (reg&HDMI_PHY_HPD) ? 0 : 1;
+ return (readb(&hdmi->phy_stat0) & HDMI_DVI_STAT) ? 0 : 1;
}
U_BOOT_CMD(hdmidet, 1, 1, do_hdmidet,
diff --git a/arch/arm/include/asm/arch-mx6/mxc_hdmi.h b/arch/arm/include/asm/arch-mx6/mxc_hdmi.h
index 5cd6aa6..2d93658 100644
--- a/arch/arm/include/asm/arch-mx6/mxc_hdmi.h
+++ b/arch/arm/include/asm/arch-mx6/mxc_hdmi.h
@@ -901,6 +901,9 @@ enum {
HDMI_PHY_HPD = 0x02,
HDMI_PHY_TX_PHY_LOCK = 0x01,
+/* Convenience macro RX_SENSE | HPD */
+ HDMI_DVI_STAT = 0xF2,
+
/* PHY_I2CM_SLAVE_ADDR field values */
HDMI_PHY_I2CM_SLAVE_ADDR_PHY_GEN2 = 0x69,
HDMI_PHY_I2CM_SLAVE_ADDR_HEAC_PHY = 0x49,
diff --git a/board/boundary/nitrogen6x/nitrogen6x.c b/board/boundary/nitrogen6x/nitrogen6x.c
index 1b82633..ff033da 100644
--- a/board/boundary/nitrogen6x/nitrogen6x.c
+++ b/board/boundary/nitrogen6x/nitrogen6x.c
@@ -477,7 +477,7 @@ struct display_info_t {
static int detect_hdmi(struct display_info_t const *dev)
{
struct hdmi_regs *hdmi = (struct hdmi_regs *)HDMI_ARB_BASE_ADDR;
- return readb(&hdmi->phy_stat0) & HDMI_PHY_HPD;
+ return readb(&hdmi->phy_stat0) & HDMI_DVI_STAT;
}
static void do_enable_hdmi(struct display_info_t const *dev)