int mcde_splash_txt(void)
{
    int err = 0;
    struct mcde_rectangle rect;
    static struct mcde_ovly_state *ovly = NULL;
    u32 width;
    u32 height;
    u32 lcd_bpp;
    u8 *paddr;
    u32 stride;
    u32 xpos = 0;
    u32 ypos = 0;

    paddr = (u8 *) CONFIG_SYS_VIDEO_FB_ADRS;
    width = CONFIG_SYS_DISPLAY_NATIVE_X_RES;
    height = CONFIG_SYS_DISPLAY_NATIVE_Y_RES;

    lcd_bpp = 16;
    stride = width * lcd_bpp / 8;
    stride = (stride + 7) & 0xFFFFFFF8; /* pad to 64-bit boundary */

    if(ovly == NULL) {
        /* dss_enable_overlay */
        ovly = mcde_ovly_get(chnl);
        if (IS_ERR(ovly)) {
            err = PTR_ERR(ovly);
            printf("%s: Failed to get channel\n", __func__);
            return -err;
        }
    }

    mcde_ovly_set_source_buf(ovly, (u32) paddr);
    mcde_ovly_set_source_info(ovly, stride,main_display.default_pixel_format);
    mcde_ovly_set_source_area(ovly, 0, 0, width, height);

    if (width == main_display.native_x_res)
        xpos = 0;
    else
        xpos = (main_display.native_x_res - width) / 2;

    if (height == main_display.native_y_res)
        ypos = 0;
    else
        ypos = (main_display.native_y_res - height) / 2;
    mcde_ovly_set_dest_pos(ovly, xpos, ypos, 0);
    mcde_ovly_apply(ovly);

    rect.x = 0;
    rect.y = 0;
    rect.w = main_display.native_x_res;
    rect.h = main_display.native_y_res;

    mcde_chnl_update(chnl,&rect);

    return 0;
}
Пример #2
0
static int apply_overlay(struct mcde_overlay *ovly,
				struct mcde_overlay_info *info, bool force)
{
	int ret = 0;
	if (ovly->ddev->invalidate_area) {
		/* TODO: transform ovly coord to screen coords (vmode):
		 * add offset
		 */
		struct mcde_rectangle dirty = info->dirty;
		mutex_lock(&ovly->ddev->display_lock);
		ret = ovly->ddev->invalidate_area(ovly->ddev, &dirty);
		mutex_unlock(&ovly->ddev->display_lock);
	}

	if (ovly->info.paddr != info->paddr || force)
		mcde_ovly_set_source_buf(ovly->state, info->paddr);

	if (ovly->info.stride != info->stride || ovly->info.fmt != info->fmt ||
									force)
		mcde_ovly_set_source_info(ovly->state, info->stride, info->fmt);
	if (ovly->info.src_x != info->src_x ||
					ovly->info.src_y != info->src_y ||
					ovly->info.w != info->w ||
					ovly->info.h != info->h || force)
		mcde_ovly_set_source_area(ovly->state,
				info->src_x, info->src_y, info->w, info->h);
	if (ovly->info.dst_x != info->dst_x || ovly->info.dst_y != info->dst_y
					|| ovly->info.dst_z != info->dst_z ||
					force)
		mcde_ovly_set_dest_pos(ovly->state,
					info->dst_x, info->dst_y, info->dst_z);

	mcde_ovly_apply(ovly->state);
	ovly->info = *info;

	return ret;
}