Jetson Nano DP problem: Can't get edid from i2c

Hello, I have a problem, DP cannot get EDID through I2C

$ sudo get-edid
This is read-edid version 3.0.2. Prepare for some fun.
Attempting to use i2c interface
No EDID on bus 0
No EDID on bus 1
No EDID on bus 3
No EDID on bus 4
No EDID on bus 5
No EDID on bus 6
1 potential busses found: 2
Bus 2 doesn’t really have an EDID…
Couldn’t find an accessible EDID on this computer.
I’m sorry nothing was successful. Maybe try some other arguments
if you played with them, or send an email to Matthew Kern pyrophobicman@gmail.com.

L4T release:
" head -n 1 /etc/nv_tegra_release "

R32 (release), REVISION: 3.1, GCID: 18186506, BOARD: t210ref, EABI: aarch64, DATE: Tue Dec 10 06:58:34 UTC 2019

@WayneWWW
Do you know why DP can’t get EDID through I2C

int open_i2c_dev(int i2cbus) {
int i2cfile;
char filename[128];
unsigned long funcs;

sprintf(filename, “/dev/i2c-%d”, i2cbus);
i2cfile = open(filename, O_RDWR);

printf(“i2cfile %d\r\n”,i2cfile);
if (i2cfile < 0 && errno == ENOENT) {
filename[8] = ‘/’;
i2cfile = open(filename, O_RDWR);
}

if (errno == EACCES) {
printf(“Permission denied opening i2c. Run as root!\n”);
i2cfile = -2;
}

if (i2cfile >=0) {

  if (ioctl(i2cfile, I2C_FUNCS, &funcs) < 0) {
  	perror("ioctl I2C_FUNCS"); 
  	i2cfile=-3;
  }


  if (!(funcs & (I2C_FUNC_SMBUS_READ_BYTE_DATA))) {
  	printf("No byte reading on this bus...\n");
  	i2cfile=-4;
  }


  if (ioctl(i2cfile, I2C_SLAVE, 0X50) < 0) {
  	perror("Problem requesting slave address");
  	i2cfile=-5;
  }

}

return i2cfile;
}

int main()
{
int i2cfile,i2cbus=0;
unsigned char block[256];
int j,ret;

for (i2cfile = open_i2c_dev(i2cbus);i2cfile >= 0 || i2cfile < -3;i2cbus++,i2cfile = open_i2c_dev(i2cbus))
{
if (i2cbus > 8)
return 0;

  if (i2cfile < -3)
  	return -1;

  ret = i2c_smbus_read_byte_data(i2cfile, 0);
  if (ret < 0) {
  	printf("No EDID on bus %i\n", i2cbus);
  	goto closeFile;
  }
  else {
  	printf("ok %i\n", i2cbus);
  }
  		
  if (i2cfile >=0) {//no matter how many times, >=0 still looks really angry.
  	for (j=0;j<128;j++)
  	{
  		block[j] = i2c_smbus_read_byte_data(i2cfile, j);
  		printf("%x ",block[j]);
  	}
  }

closeFile:
close(i2cfile);
}
return 0;
}

Result:

i2cfile 3
No EDID on bus 0
i2cfile 3
No EDID on bus 1
i2cfile 3
ok 2
1 0 fc 0 78 d 0 0 4 46 0 0 0 0 0 0 0 0 0 0 36 39 39 2d 31 33 34 34 38 2d 30 30 30 30 2d 34 30 30 20 46 2e 30 0 0 0 0 0 0 0 0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ab 30 ec 4b 4 0 31 34 32 33 32 31 39 31 30 38 30 30 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i2cfile 3
No EDID on bus 3
i2cfile 3
No EDID on bus 4
i2cfile 3
No EDID on bus 5
i2cfile 3
No EDID on bus 6
i2cfile 3
No EDID on bus 7
i2cfile 3
No EDID on bus 8
i2cfile -1

It seems that I2C-2 can get some data, but this data is not the EDID I need.

Hi,

Is it ok for you to directly read edid from debug node?

sudo -s
cat /sys/kernel/debug/tegradc.X/edid

The driver disabled the ddc channel after display is working. Thus, i2c cannot see the existence of edid.

hello,I can get the EDID by /sys/kernel/debug/tegradc.1/edid.But I want to be able to access I2C or some other way to get the EDID. Because I not only need to get EIID, but also need to modify EDID.

sudo -s
grep -i -H ‘.*’ find /sys -name 'edid'

/sys/kernel/debug/tegradc.1/edid: 00 ff ff ff ff ff ff 00 05 e3 01 24 ed 08 00 00
/sys/kernel/debug/tegradc.1/edid: 0a 1e 01 04 a5 35 1e 78 3b be 95 ae 50 45 a7 26
/sys/kernel/debug/tegradc.1/edid: 0f 50 54 bf ef 00 d1 c0 b3 00 95 00 81 80 81 40
/sys/kernel/debug/tegradc.1/edid: 81 c0 01 01 01 01 02 3a 80 18 71 38 2d 40 58 2c
/sys/kernel/debug/tegradc.1/edid: 45 00 0f 28 21 00 00 1e 2a 44 80 a0 70 38 27 40
/sys/kernel/debug/tegradc.1/edid: 30 20 35 00 0f 28 21 00 00 1a 00 00 00 fc 00 32
/sys/kernel/debug/tegradc.1/edid: 34 54 31 57 31 47 35 0a 20 20 20 20 00 00 00 fd
/sys/kernel/debug/tegradc.1/edid: 00 30 4b 55 55 12 01 0a 20 20 20 20 20 20 01 56
/sys/kernel/debug/tegradc.1/edid: 02 03 1e f1 4b 90 1f 05 14 04 13 03 12 02 11 01
/sys/kernel/debug/tegradc.1/edid: 23 09 07 07 83 01 00 00 65 03 0c 00 10 00 02 3a
/sys/kernel/debug/tegradc.1/edid: 80 18 71 38 2d 40 58 2c 45 00 0f 28 21 00 00 1e
/sys/kernel/debug/tegradc.1/edid: 01 1d 00 72 51 d0 1e 20 6e 28 55 00 0f 28 21 00
/sys/kernel/debug/tegradc.1/edid: 00 1e 8c 0a d0 8a 20 e0 2d 10 10 3e 96 00 0f 28
/sys/kernel/debug/tegradc.1/edid: 21 00 00 18 8c 0a d0 90 20 40 31 20 0c 40 55 00
/sys/kernel/debug/tegradc.1/edid: 0f 28 21 00 00 18 00 00 00 00 00 00 00 00 00 00
/sys/kernel/debug/tegradc.1/edid: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a5
/sys/kernel/debug/tegradc.0/edid:No EDID

Hi,

We don’t suggest to do that on tegra. Please find other tool to do so.
What is the purpose of modifying EDID on a monitor?

Because the EDID may be wrong when the product is just produced, it must be modified.
Is there a way to read and modify it?

Hi,

If edid is wrong, then please contact the TV/Monitor/panel vendor… we are not making product with monitor EDID.
Or you can connect this DP to x86 host and see if it can modify your edid.

Can I open DDC, please?

Could you describe what is your usecase please?

Is this issue really related to tegra? Will tegra use the edid from that monitor? Or you just want to use tegra to modify EDID and that monitor is not in use on tegra anymore.

yes,We want to modify or read the EDID through Jetson. We can obtain the EDID by using the program which we cannot find at present

Is this must go through DP? Or HDMI is fine?

We need to be through DP

Could you tell me how to open DDC?

Hello,

We are checking this with driver team. Will update to you later.

OK, I’m looking forward to it. thank you

Hello,

It is not possible to use DP and i2c to modify the the EDID on monitor. DP is even not using ddc but AUX.

There is not way to do that. And our engineer team has no idea why you want to use jetson to modify monitor EDID.

Hello, Since our customer is producing screens, we hope to modify the EDID of the screen through Jetson.
I didn’t find any AUX device files in Jetson