I see 5 unsuccessful tries of reading the EDID via I2C.
So I removed
TEGRA_GPIO(V, 4) /* 5 Apalis GPIO3 */
TEGRA_GPIO(V, 5) /* 7 Apalis GPIO4 */
and added
TEGRA_GPIO(T, 5)
TEGRA_GPIO(T, 6)
and set the hdmi_ddc to i2c@7000c700.
I compiled the dtsi files to get tegra124-apalis-eval.dtb
I installed the dtb with run setup_ftb and then boot.
On the oscilloscope it looks like there are other signals on the bus. There are 3 or more levels instead of 2. There is something wrong. But I don´t know what.
Could you give me a working tegra124-apalis-eval.dtb?
That’s the correct waveform, mid-level signal you see is an artefact of the hdmi level shifter used on ixora.
TK1 is still not able to read EDID?
I measure on PIN 15/16 of X27 (GPIO 3/4). In my understanding this should be I2C traffic before the level shifter with exact 2 levels and not 4.
Without my device tree changes I do not see this electrical behaviour.
And no, TK1 is still not able to read EDID, but a lot of error messages in logs - resulting from I2C problems, I assume?
I2C SDA line is bidirectional and SoC pin is open drain. Level shifter is not really before. you have 4 levels
- display → TK1 logical 1,
- display → TK1 logical 0,
- display ← TK1 logical 1,
- display ← TK1 logical 0,
Here’s the datasheet, you can verify if the voltage levels you’re seeing within operating ranges:
OK, but nevertheless something is wrong.
How about a working tegra124-apalis-eval.dtb?
Can you share dmesg output with your modified dtb?
The dmesg output is attached. dmesg.log
I inspected the I2C content with an oscilloscope that can dissolve I2C messages. On the 5V side at HDMI everything seems to be fine, including the ACK from display. But on the 3,3V side the ACK is not recognized. It seems that someone else is pushing the signal high at the time when ACK is expected. The other parts of the I2C message look fine.
The files I changed:
tegra124-apalis-gpio.dtsi
tegra124-apalis-displays.dtsi
My workflow is:
export ARCH=arm
export PATH=~/gcc-linaro/bin/:$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
make apalis-tk1_defconfig
make tegra124-apalis-eval.dtb
cp ~/linux-toradex/arch/arm/boot/dts/tegra124-apalis-eval.dtb /media/<path-to-partition-1>/<board>/
and then on target:
run setupdate
run update_fdt
Since I am using image 2.8b2 there are no kernel changes necessary, I read in former postings. How to check and modify the i2c 1/3 option?
What do you mean with “correctly deployed”?
That’s not the right copy command. You can attach tk1 emmc over usb and copy the devicetree directly. Connect tk1 to your pc over USB, boot to u-boot and issue ums 0 mmc 0
command.
I2C selection is in tegra124-apalis-displays.dtsi.
By “correctly deployed” I meant that it’s correctly copied and u-boot is loading the file you’re expecting.
I corrected the copy command. I copied it from your HowTo, but always used the right command.
Did you checked my linked files? Anything wrong here? Where exactly in tegra124-apalis-display.dtsi can I select the I2C?
This hdmi_ddc: i2c@7000c700
specifies i2c used for ddc,
7000c400 points to i2c1 7000c700 points to i2c3.
I´m sure to use the right i2c (7000c700) because I can see different behaviour. So workflow works as well.
But I am not quite sure with the GPIO file. Can you check that please? Thanks.
In seems that starting with 2.8 build another change is required for the workaround to work
here’s the full patch:
diff --git a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi
index cc48334cdc68..3e59f057a0f2 100644
--- a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi
+++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi
@@ -205,7 +205,7 @@
};
};
- hdmi_ddc: i2c@7000c400 {
+ hdmi_ddc: i2c@7000c700 {
clock-frequency = <10000>;
};
};
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 df4ed7b8bd59..05fedbb19e5f 100644
--- a/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-gpio.dtsi
+++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-gpio.dtsi
@@ -17,8 +17,8 @@
TEGRA_GPIO(K, 7) /* 122 UART1_RI */
TEGRA_GPIO(N, 7) /* 232 HDMI1_HPD */
TEGRA_GPIO(V, 3) /* 164 MMC1_CD# */
- TEGRA_GPIO(V, 4) /* 5 Apalis GPIO3 */
- TEGRA_GPIO(V, 5) /* 7 Apalis GPIO4 */
+ TEGRA_GPIO(T, 5) /* 5 Apalis GPIO3 */
+ TEGRA_GPIO(T, 6) /* 7 Apalis GPIO4 */
TEGRA_GPIO(W, 3) /* TOUCH_INT */
TEGRA_GPIO(W, 5) /* 152 MMC1_D5 */
TEGRA_GPIO(BB, 0) /* 96 USBH_OC# */
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 52e35caa2745..8cf7cdc7a314 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";
YES, that´s it!
All is working fine including switching monitor off and on.
Thank you.
We found out what the issue with doing it that way was. It has to do with them former DDC/EDID pins being used as USB power enables on the V1.2A hardware which conflicts with the errata patch. Sorry about that.
What’s the content of arch/arm/boot/dts/tegra124-platforms/tegra124-apalis-displays.dtsi ?
kernel is still using i2c 1 instead od 3? make sure that device-tree compiled without errors and you’ve deployed it correctly.