video/rk_eink: fix screen display stripes after WF_TYPE_RESET update.
Signed-off-by: Wenping Zhang <wenping.zhang@rock-chips.com> Change-Id: Id406c1103a0deea3e3ab9abcb8664e1ccc098520
This commit is contained in:
parent
c3a1ac4926
commit
e79e208579
|
|
@ -174,6 +174,7 @@ static u32 aligned_image_size_4k(struct udevice *dev)
|
||||||
* Every image logo size must be aligned in 4K, make sure
|
* Every image logo size must be aligned in 4K, make sure
|
||||||
* kernel can use it rightly, the buffer of LOGO image is
|
* kernel can use it rightly, the buffer of LOGO image is
|
||||||
* put in order of below map:
|
* put in order of below map:
|
||||||
|
* |---reset logo ---|
|
||||||
* |---uboot logo ---|
|
* |---uboot logo ---|
|
||||||
* |---kernel logo ---|
|
* |---kernel logo ---|
|
||||||
* |---charge_0 logo ---|
|
* |---charge_0 logo ---|
|
||||||
|
|
@ -193,7 +194,7 @@ static int get_addr_by_type(struct udevice *dev, u32 logo_type)
|
||||||
printf("invalid display buffer, please check dts\n");
|
printf("invalid display buffer, please check dts\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
indx = ffs(logo_type) - 1;
|
indx = ffs(logo_type);
|
||||||
img_size = aligned_image_size_4k(dev);
|
img_size = aligned_image_size_4k(dev);
|
||||||
offset = img_size * indx;
|
offset = img_size * indx;
|
||||||
if (offset + img_size > plat->disp_pbuf_size) {
|
if (offset + img_size > plat->disp_pbuf_size) {
|
||||||
|
|
@ -202,6 +203,7 @@ static int get_addr_by_type(struct udevice *dev, u32 logo_type)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (logo_type) {
|
switch (logo_type) {
|
||||||
|
case EINK_LOGO_RESET:
|
||||||
case EINK_LOGO_UBOOT:
|
case EINK_LOGO_UBOOT:
|
||||||
case EINK_LOGO_KERNEL:
|
case EINK_LOGO_KERNEL:
|
||||||
case EINK_LOGO_CHARGING_0:
|
case EINK_LOGO_CHARGING_0:
|
||||||
|
|
@ -467,7 +469,6 @@ static int rockchip_eink_show_logo(int cur_logo_type, int update_mode)
|
||||||
u32 logo_addr;
|
u32 logo_addr;
|
||||||
u32 last_logo_addr;
|
u32 last_logo_addr;
|
||||||
struct ebc_panel *plat;
|
struct ebc_panel *plat;
|
||||||
void *reset_disp_addr = NULL;
|
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
|
|
||||||
if (!eink_dev) {
|
if (!eink_dev) {
|
||||||
|
|
@ -493,17 +494,17 @@ static int rockchip_eink_show_logo(int cur_logo_type, int update_mode)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* The last_logo_type is 0 means it's first displaying
|
* The last_logo_type is -1 means it's first displaying
|
||||||
*/
|
*/
|
||||||
if (last_logo_type == -1) {
|
if (last_logo_type == -1) {
|
||||||
int size = (plat->width * plat->height) >> 1;
|
int size = (plat->width * plat->height) >> 1;
|
||||||
|
|
||||||
reset_disp_addr = memalign(ARCH_DMA_MINALIGN, size);
|
logo_addr = get_addr_by_type(dev, EINK_LOGO_RESET);
|
||||||
memset(reset_disp_addr, 0xff, size);
|
memset((u32 *)(u64)logo_addr, 0xff, size);
|
||||||
last_logo_addr = (u32)(u64)reset_disp_addr;
|
eink_display(dev, logo_addr, logo_addr,
|
||||||
eink_display(dev, last_logo_addr, last_logo_addr,
|
|
||||||
WF_TYPE_RESET, 0);
|
WF_TYPE_RESET, 0);
|
||||||
last_logo_type = 0;
|
last_logo_type = 0;
|
||||||
|
last_logo_addr = logo_addr;
|
||||||
} else {
|
} else {
|
||||||
last_logo_addr = get_addr_by_type(dev, last_logo_type);
|
last_logo_addr = get_addr_by_type(dev, last_logo_type);
|
||||||
if (last_logo_addr < 0) {
|
if (last_logo_addr < 0) {
|
||||||
|
|
@ -511,12 +512,9 @@ static int rockchip_eink_show_logo(int cur_logo_type, int update_mode)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (cur_logo_type == EINK_LOGO_RESET) {
|
if (cur_logo_type == EINK_LOGO_RESET) {
|
||||||
int size = (plat->width * plat->height) >> 1;
|
logo_addr = get_addr_by_type(dev, EINK_LOGO_RESET);
|
||||||
|
|
||||||
reset_disp_addr = memalign(ARCH_DMA_MINALIGN, size);
|
|
||||||
memset(reset_disp_addr, 0xff, size);
|
|
||||||
eink_display(dev, last_logo_addr,
|
eink_display(dev, last_logo_addr,
|
||||||
(u32)(u64)reset_disp_addr,
|
logo_addr,
|
||||||
WF_TYPE_GC16, update_mode);
|
WF_TYPE_GC16, update_mode);
|
||||||
last_logo_type = -1;
|
last_logo_type = -1;
|
||||||
goto out;
|
goto out;
|
||||||
|
|
@ -570,8 +568,6 @@ static int rockchip_eink_show_logo(int cur_logo_type, int update_mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (reset_disp_addr)
|
|
||||||
free(reset_disp_addr);
|
|
||||||
ret = ebc_power_set(dev, EBC_PWR_DOWN);
|
ret = ebc_power_set(dev, EBC_PWR_DOWN);
|
||||||
if (ret)
|
if (ret)
|
||||||
printf("Eink power down failed\n");
|
printf("Eink power down failed\n");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue