[U-Boot] [PATCH] imx: nitrogen6x: mx6qsabrelite: Add support for DVI monitors

Eric Nelson eric.nelson at boundarydevices.com
Tue Jul 23 23:43:06 CEST 2013


Hi all,

On 07/22/2013 01:33 PM, Robert Winkler wrote:
 >
> DVI monitors show up as the RX_SENSE bits in the
> HDMI_PHY_STAT0 register, ie F0 so we really want to check
> against F2 to support both HDMI and DVI.
>

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 at boundarydevices.com>
> ---
>   arch/arm/imx-common/cmd_hdmidet.c             | 3 +--
>   arch/arm/include/asm/arch-mx6/mxc_hdmi.h      | 3 +++
>   board/boundary/nitrogen6x/nitrogen6x.c        | 2 +-
>   board/freescale/mx6qsabrelite/mx6qsabrelite.c | 2 +-
>   4 files changed, 6 insertions(+), 4 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 9dccb3f..1b55b05 100644
> --- a/arch/arm/include/asm/arch-mx6/mxc_hdmi.h
> +++ b/arch/arm/include/asm/arch-mx6/mxc_hdmi.h
> @@ -896,6 +896,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,

FWIW, we've figured out that the root cause of this is
current-limiting by DVI monitors interacts with a
resistor (R251) that acts as a voltage divider on
the HPD signal on our boards.

We've tested this patch against SABRE SDB boards as
well as SABRE Lite and Nitrogen6X.

Regards,


Eric


More information about the U-Boot mailing list