summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShixiang 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
commit7e72214d51563aaf54c857ac0468b522e0002c9f (patch)
tree689498f6e190d5857a59f606c6b335c0a2269870
parent9a272a6177cb77726dc5677adbc49395cbb08b6e (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.c10
-rw-r--r--drivers/video/drm/rockchip_display.h2
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;
};