Exemplo n.º 1
0
/**
 * sti_hqvdp_disable
 * @hqvdp: hqvdp pointer
 *
 * Disables the HQVDP plane
 */
static void sti_hqvdp_disable(struct sti_hqvdp *hqvdp)
{
	int i;

	DRM_DEBUG_DRIVER("%s\n", sti_plane_to_str(&hqvdp->plane));

	/* Unregister VTG Vsync callback */
	if (sti_vtg_unregister_client(hqvdp->vtg, &hqvdp->vtg_nb))
		DRM_DEBUG_DRIVER("Warning: cannot unregister VTG notifier\n");

	/* Set next cmd to NULL */
	writel(0, hqvdp->regs + HQVDP_MBX_NEXT_CMD);

	for (i = 0; i < POLL_MAX_ATTEMPT; i++) {
		if (readl(hqvdp->regs + HQVDP_MBX_INFO_XP70)
				& INFO_XP70_FW_READY)
			break;
		msleep(POLL_DELAY_MS);
	}

	/* VTG can stop now */
	clk_disable_unprepare(hqvdp->clk_pix_main);

	if (i == POLL_MAX_ATTEMPT)
		DRM_ERROR("XP70 could not revert to idle\n");

	hqvdp->plane.status = STI_PLANE_DISABLED;
}
Exemplo n.º 2
0
/**
 * sti_gdp_disable_layer
 * @lay: gdp layer
 *
 * Disable a GDP.
 *
 * RETURNS:
 * 0 on success.
 */
static int sti_gdp_disable_layer(struct sti_layer *layer)
{
    unsigned int i;
    struct sti_gdp *gdp = to_sti_gdp(layer);
    struct sti_compositor *compo = dev_get_drvdata(layer->dev);

    DRM_DEBUG_DRIVER("%s\n", sti_layer_to_str(layer));

    /* Set the nodes as 'to be ignored on mixer' */
    for (i = 0; i < GDP_NODE_NB_BANK; i++) {
        gdp->node_list[i].top_field->gam_gdp_ppt |= GAM_GDP_PPT_IGNORE;
        gdp->node_list[i].btm_field->gam_gdp_ppt |= GAM_GDP_PPT_IGNORE;
    }

    if (sti_vtg_unregister_client(layer->mixer_id == STI_MIXER_MAIN ?
                                  compo->vtg_main : compo->vtg_aux, &gdp->vtg_field_nb))
        DRM_DEBUG_DRIVER("Warning: cannot unregister VTG notifier\n");

    if (gdp->clk_pix)
        clk_disable_unprepare(gdp->clk_pix);

    return 0;
}