diff --git a/u-boot/common/android_bootloader.c b/u-boot/common/android_bootloader.c index c6a2bdb9a28..9ae7435c359 100644 --- a/u-boot/common/android_bootloader.c +++ b/u-boot/common/android_bootloader.c @@ -836,12 +836,15 @@ int android_fdt_overlay_apply(void *fdt_addr) if ((hdr->header_version == 0) || (hdr->header_version >= 3 && !strcmp(part_boot, PART_RECOVERY))) goto out; + } - } else { - if (part_get_info_by_name(dev_desc, PART_DTBO, &part_info) < 0) - return -EINVAL; +#ifdef CONFIG_VENDOR_FRIENDLYELEC + if (part_get_info_by_name(dev_desc, PART_DTBO, &part_info) > 0) { part_dtbo = PART_DTBO; + } else { + printf("No %s partition\n", PART_DTBO); } +#endif ret = android_get_dtbo(&fdt_dtbo, (void *)hdr, &index, part_dtbo); if (!ret) { @@ -882,7 +885,8 @@ int android_fdt_overlay_apply(void *fdt_addr) } out: - free(hdr); + if (hdr) + free(hdr); return 0; } diff --git a/u-boot/common/edid.c b/u-boot/common/edid.c index 3328555ffa7..a8f29827e2a 100644 --- a/u-boot/common/edid.c +++ b/u-boot/common/edid.c @@ -70,8 +70,8 @@ #define EDID_QUIRK_FORCE_6BPC BIT(10) /* Force 10bpc */ #define EDID_QUIRK_FORCE_10BPC BIT(11) -/* Prefer the native CEA mode */ -#define EDID_QUIRK_NATIVE_CEA_PREFERRED BIT(12) +/* Prefer hight clock mode */ +#define EDID_QUIRK_PREFER_HIGH_CLOCK BIT(12) struct detailed_mode_closure { struct edid *edid; @@ -134,7 +134,7 @@ static struct edid_quirk { { "SAM", 638, EDID_QUIRK_PREFER_LARGE_60 }, /* Skyworth */ - { "SKW", 1, (EDID_QUIRK_NATIVE_CEA_PREFERRED | EDID_QUIRK_PREFER_LARGE_60) }, + { "SKW", 1, (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_HIGH_CLOCK) }, /* Sony PVM-2541A does up to 12 bpc, but only reports max 8 bpc */ { "SNY", 0x2541, EDID_QUIRK_FORCE_12BPC }, @@ -2690,9 +2690,6 @@ drm_display_mode_from_vic_index(const u8 *video_db, u8 video_len, *newmode = *cea_mode_for_vic(vic); newmode->vrefresh = 0; - if (video_db[video_index] & 0x80) - newmode->type |= DRM_MODE_TYPE_NATIVE; - return newmode; } @@ -5314,28 +5311,30 @@ static void edid_fixup_preferred(struct hdmi_edid_data *data, if (cur_mode == preferred_mode) continue; - if ((quirks & EDID_QUIRK_NATIVE_CEA_PREFERRED) && - (cur_mode->type & DRM_MODE_TYPE_NATIVE)) { - preferred_mode = cur_mode; - break; - } - /* Largest mode is preferred */ if (MODE_SIZE(cur_mode) > MODE_SIZE(preferred_mode)) preferred_mode = cur_mode; cur_vrefresh = cur_mode->vrefresh ? - cur_mode->vrefresh : drm_get_vrefresh(cur_mode); + cur_mode->vrefresh : drm_get_vrefresh(cur_mode); preferred_vrefresh = preferred_mode->vrefresh ? - preferred_mode->vrefresh : drm_get_vrefresh(preferred_mode); + preferred_mode->vrefresh : drm_get_vrefresh(preferred_mode); + /* At a given size, try to get closest to target refresh */ if ((MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) && MODE_REFRESH_DIFF(cur_vrefresh, target_refresh) < MODE_REFRESH_DIFF(preferred_vrefresh, target_refresh)) { preferred_mode = cur_mode; } - } + /* Consider the clock like drm_mode_compare() */ + if ((quirks & EDID_QUIRK_PREFER_HIGH_CLOCK) && + (MODE_SIZE(cur_mode) == MODE_SIZE(preferred_mode)) && + (cur_vrefresh == preferred_vrefresh) && + (cur_mode->clock > preferred_mode->clock)) { + preferred_mode = cur_mode; + } + } preferred_mode->type |= DRM_MODE_TYPE_PREFERRED; data->preferred_mode = preferred_mode; } diff --git a/u-boot/include/drm_modes.h b/u-boot/include/drm_modes.h index 0ee5d675cdc..eda5c94c8d5 100644 --- a/u-boot/include/drm_modes.h +++ b/u-boot/include/drm_modes.h @@ -21,7 +21,6 @@ #define DRM_MODE_TYPE_DEFAULT (1<<4) #define DRM_MODE_TYPE_USERDEF (1<<5) #define DRM_MODE_TYPE_DRIVER (1<<6) -#define DRM_MODE_TYPE_NATIVE (1<<7) /* Video mode flags */ /* bit compatible with the xorg definitions. */