Search by Tags

Ixora V1.0A and V1.1A HDMI DDC issues with Apalis TK1 V1.0A/B and V1.1A Workaround Patches

 
Article updated at 01 May 2018

This article describes in greater details the patches required to work around the Ixora V1.0A and V1.1A HDMI DDC issues with Apalis TK1 V1.0A/B and V1.1A hardware revisions.

The HDMI DDC/EDID aka SCL/SDA pins need to be connected to the proper TK1 SoC DDC/EDID I2C bus.

As follows a summary of the HDMI DDC/EDID signal side:

Nexperia IP4791CZ12 Pin Nexperia IP4791CZ12 Function Ixora Resistor Array Ixora V1.1A X19 Pin Ixora V1.1A X19 Function
2 SCL_IN RA11A 36 LVDS SDA
3 SDA_IN RA11B 38 LVDS SCL

As follows a summary of the TK1 SoC DDC/EDID side:

Apalis X1 Pin Apalis Function TK1 SoC Ball Apalis V1.0/V1.1 Ixora Resistor Array Ixora V1.0/V1.1
5 GPIO3 DDC_SCL RA1B X27-15
7 GPIO4 DDC_SDA RA1A X27-16

For reference the TK1 SoC ball to GPIO name as well as number assignment of above-mentioned pins:

TK1 SoC Ball TK1 SoC GPIO GPIO Number
DDC_SCL GPIO3_PV.04 172
DDC_SDA GPIO3_PV.05 173

Patches for Apalis TK1 V1.0A, V1.0B and V1.1A Modules

Make sure DDC/EDID pin muxing is proper (default since BSP 2.8b2):

http://git.toradex.com/cgit/linux-toradex.git/diff/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi?h=toradex_tk1_l4t_r21.6&id=722035cfcd7e238000eafa5803e26072433371c8
diff --git a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi index 8d4ff4e..5c9ba71 100644 --- a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi +++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi @@ -119,14 +119,14 @@ /* Apalis GPIO */ ddc_scl_pv4 { nvidia,pins = "ddc_scl_pv4"; - nvidia,function = "rsvd2"; + nvidia,function = "i2c4"; nvidia,pull = <TEGRA_PIN_PULL_NONE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; nvidia,enable-input = <TEGRA_PIN_ENABLE>; }; ddc_sda_pv5 { nvidia,pins = "ddc_sda_pv5"; - nvidia,function = "rsvd2"; + nvidia,function = "i2c4"; nvidia,pull = <TEGRA_PIN_PULL_NONE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; nvidia,enable-input = <TEGRA_PIN_ENABLE>;

Make sure GPIOs are not conflicting:

diff --git a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-gpio.dtsi b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-gpio.dtsi index 100e344..f0882c5 100644 --- a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-gpio.dtsi +++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-gpio.dtsi @@ -17,9 +17,11 @@ TEGRA_GPIO(K, 7) TEGRA_GPIO(N, 7) TEGRA_GPIO(O, 5) + TEGRA_GPIO(T, 5) + TEGRA_GPIO(T, 6) TEGRA_GPIO(V, 3) - TEGRA_GPIO(V, 4) - TEGRA_GPIO(V, 5) + /* TEGRA_GPIO(V, 4) */ + /* TEGRA_GPIO(V, 5) */ TEGRA_GPIO(W, 3) TEGRA_GPIO(W, 5) TEGRA_GPIO(BB, 0)

Make sure DDC/EDID aka I2C3 enables rcv-sel (default in upcoming BSP 2.8b3):

http://git.toradex.com/cgit/linux-toradex.git/commit/?h=toradex_tk1_l4t_r21.6-next&id=4193bdbf4e88ef304304a011271bdd14b45dea35
diff --git a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi index 52e35ca..8cf7cdc 100644 --- a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi +++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-pinmux.dtsi @@ -123,6 +123,7 @@ nvidia,pull = <TEGRA_PIN_PULL_NONE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; nvidia,enable-input = <TEGRA_PIN_ENABLE>; + nvidia,rcv-sel = <TEGRA_PIN_ENABLE>; }; ddc_sda_pv5 { nvidia,pins = "ddc_sda_pv5"; @@ -130,6 +131,7 @@ nvidia,pull = <TEGRA_PIN_PULL_NONE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; nvidia,enable-input = <TEGRA_PIN_ENABLE>; + nvidia,rcv-sel = <TEGRA_PIN_ENABLE>; }; pex_l0_rst_n_pdd1 { nvidia,pins = "pex_l0_rst_n_pdd1";

Make sure proper I2C bus is used for DDC/EDID

Before 2.8b1:

diff --git a/arch/arm/mach-tegra/board-apalis-tk1-panel.c b/arch/arm/mach-tegra/board-apalis-tk1- panel.c index 9ee23e7..fda57d1 100644 --- a/arch/arm/mach-tegra/board-apalis-tk1-panel.c +++ b/arch/arm/mach-tegra/board-apalis-tk1-panel.c @@ -378,7 +378,7 @@ static struct tegra_dc_out apalis_tk1_disp2_out = { .parent_clk = "pll_d", #endif /* CONFIG_TEGRA_HDMI_PRIMARY */ - .ddc_bus = 1, + .ddc_bus = 3, .hotplug_gpio = apalis_tk1_hdmi_hpd, .hdmi_out = &apalis_tk1_hdmi_out,

starting with 2.8b1:

--- a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi +++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi @@ -209,7 +209,7 @@ }; }; - hdmi_ddc: i2c@7000c400 { + hdmi_ddc: i2c@7000c700 { clock-frequency = <10000>; };