+ ret = cdn_dp_dpcd_read(dp, 0x0030, guid, 8);
+ if (ret == 0 && guid[0] == 'n' && guid[1] == 'a' &&
+ guid[2] == 'n' && guid[3] == 'o' && guid[4] == 'c') {
+ int try_times = 0;
+
+ cdn_dp_dpcd_write(dp, 0x0038, 0x55);
+ while (left_size > 0) {
+ u32 length = (left_size > 8) ? 8 : left_size;
+
+ ret = cdn_dp_dpcd_read(dp, 0x0038, &start_read_edid, 1);
+ if (ret != 0) {
+ dev_err(dp_dev->dev, "read edid sync number error!\n");
+ break;
+ } else if (start_read_edid == 0xaa) {
+ try_times = 0;
+ ret = cdn_dp_dpcd_read(dp, 0x0030,
+ buf + readed_size,
+ length);
+ if (ret != 0) {
+ dev_err(dp_dev->dev,
+ "read edid bytes [%d~%d] error!\n",
+ readed_size,
+ readed_size + length);
+ break;
+ }
+
+ readed_size += length;
+ left_size -= length;
+ cdn_dp_dpcd_write(dp, 0x0038, 0x55);
+ } else {
+ if (try_times++ >= 100) {
+ dev_err(dp_dev->dev, "read edid from NanoC failed!\n");
+ break;
+ }
+ continue;
+ }
+ }
+ } else {
+ ret = cdn_dp_get_edid_block(dp_dev, buf,
+ block, EDID_BLOCK_SIZE);
+ }