/* Prepare and enable the compo IP clock */ if (clk_prepare_enable(compo_clk)) {
DRM_INFO("Failed to prepare/enable compositor clk\n"); goto compo_error;
}
/* Set rate and prepare/enable pixel clock */ if (clk_set_rate(pix_clk, rate) < 0) {
DRM_ERROR("Cannot set rate (%dHz) for pix clk\n", rate); goto pix_error;
} if (clk_prepare_enable(pix_clk)) {
DRM_ERROR("Failed to prepare/enable pix clk\n"); goto pix_error;
}
switch (plane->status) { case STI_PLANE_UPDATED: /* ignore update for other CRTC */ if (p->state->crtc != crtc) continue;
/* update planes tag as updated */
DRM_DEBUG_DRIVER("update plane %s\n",
sti_plane_to_str(plane));
if (sti_mixer_set_plane_depth(mixer, plane)) {
DRM_ERROR("Cannot set plane %s depth\n",
sti_plane_to_str(plane)); break;
}
if (sti_mixer_set_plane_status(mixer, plane, true)) {
DRM_ERROR("Cannot enable plane %s at mixer\n",
sti_plane_to_str(plane)); break;
}
/* if plane is HQVDP_0 then commit the vid[0] */ if (plane->desc == STI_HQVDP_0)
sti_vid_commit(compo->vid[0], p->state);
plane->status = STI_PLANE_READY;
break; case STI_PLANE_DISABLING: /* disabling sequence for planes tag as disabling */
DRM_DEBUG_DRIVER("disable plane %s from mixer\n",
sti_plane_to_str(plane));
if (sti_mixer_set_plane_status(mixer, plane, false)) {
DRM_ERROR("Cannot disable plane %s at mixer\n",
sti_plane_to_str(plane)); continue;
}
if (plane->desc == STI_CURSOR) /* tag plane status for disabled */
plane->status = STI_PLANE_DISABLED; else /* tag plane status for flushing */
plane->status = STI_PLANE_FLUSHING;
/* if plane is HQVDP_0 then disable the vid[0] */ if (plane->desc == STI_HQVDP_0)
sti_vid_disable(compo->vid[0]);
break; default: /* Other status case are not handled */ break;
}
}
event = crtc->state->event; if (event) {
crtc->state->event = NULL;
if (mixer->status == STI_MIXER_DISABLING) { struct drm_plane *p;
/* Disable mixer only if all overlay planes (GDP and VDP)
* are disabled */
list_for_each_entry(p, &crtc->dev->mode_config.plane_list,
head) { struct sti_plane *plane = to_sti_plane(p);
if ((plane->desc & STI_PLANE_TYPE_MASK) <= STI_VDP) if (plane->status != STI_PLANE_DISABLED) return 0;
}
sti_crtc_disable(crtc);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.