diff options
author | Shixiang Zheng <shixiang.zheng@rock-chips.com> | 2019-03-28 15:26:28 +0800 |
---|---|---|
committer | ้ไป็ธ <shixiang.zheng@rock-chips.com> | 2019-04-09 14:44:20 +0800 |
commit | 7e72214d51563aaf54c857ac0468b522e0002c9f (patch) | |
tree | 689498f6e190d5857a59f606c6b335c0a2269870 | |
parent | 9a272a6177cb77726dc5677adbc49395cbb08b6e (diff) |
video/drm: logo: the negative height will cause vop register err
the bmp file has been processed when reserved equals BMP_PROCESSED_FLAG
Change-Id: I793582cdd4ee5ee2a774c7a0dee8d36c81ed4f4c
Signed-off-by: Shixiang Zheng <shixiang.zheng@rock-chips.com>
-rw-r--r-- | drivers/video/drm/rockchip_display.c | 10 | ||||
-rw-r--r-- | drivers/video/drm/rockchip_display.h | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/video/drm/rockchip_display.c b/drivers/video/drm/rockchip_display.c index 9f8be7d2ba..65378c6db4 100644 --- a/drivers/video/drm/rockchip_display.c +++ b/drivers/video/drm/rockchip_display.c @@ -45,6 +45,7 @@ **********************************************************************/ #define RK_BLK_SIZE 512 +#define BMP_PROCESSED_FLAG 8399 DECLARE_GLOBAL_DATA_PTR; static LIST_HEAD(rockchip_display_list); @@ -923,6 +924,7 @@ static int load_bmp_logo(struct logo_info *logo, const char *bmp_name) void *dst = NULL, *pdst; int size, len; int ret = 0; + int reserved = 0; if (!logo || !bmp_name) return -EINVAL; @@ -948,6 +950,9 @@ static int load_bmp_logo(struct logo_info *logo, const char *bmp_name) logo->bpp = get_unaligned_le16(&header->bit_count); logo->width = get_unaligned_le32(&header->width); logo->height = get_unaligned_le32(&header->height); + reserved = get_unaligned_le32(&header->reserved); + if (logo->height < 0) + logo->height = -logo->height; size = get_unaligned_le32(&header->file_size); if (!can_direct_logo(logo->bpp)) { if (size > MEMORY_POOL_SIZE) { @@ -995,7 +1000,10 @@ static int load_bmp_logo(struct logo_info *logo, const char *bmp_name) logo->ymirror = 0; } else { logo->offset = get_unaligned_le32(&header->data_offset); - logo->ymirror = 1; + if (reserved == BMP_PROCESSED_FLAG) + logo->ymirror = 0; + else + logo->ymirror = 1; } logo->mem = dst; diff --git a/drivers/video/drm/rockchip_display.h b/drivers/video/drm/rockchip_display.h index 1c72aa966f..cc719b8aac 100644 --- a/drivers/video/drm/rockchip_display.h +++ b/drivers/video/drm/rockchip_display.h @@ -129,7 +129,7 @@ struct logo_info { bool ymirror; u32 offset; u32 width; - u32 height; + int height; u32 bpp; }; |