ret = drm_framebuffer_init(dev, &dfb->fb, &armada_fb_funcs); if (ret) {
kfree(dfb); return ERR_PTR(ret);
}
/* * Take a reference on our object as we're successful - the * caller already holds a reference, which keeps us safe for * the above call, but the caller will drop their reference * to it. Hence we need to take our own reference.
*/
drm_gem_object_get(&obj->obj);
/* We can only handle a single plane at the moment */ if (info->num_planes > 1 &&
(mode->handles[0] != mode->handles[1] ||
mode->handles[0] != mode->handles[2])) {
ret = -EINVAL; goto err;
}
obj = armada_gem_object_lookup(dfile, mode->handles[0]); if (!obj) {
ret = -ENOENT; goto err;
}
if (obj->obj.import_attach && !obj->sgt) {
ret = armada_gem_map_import(obj); if (ret) goto err_unref;
}
/* Framebuffer objects must have a valid device address for scanout */ if (!obj->mapped) {
ret = -EINVAL; goto err_unref;
}
dfb = armada_framebuffer_create(dev, info, mode, obj); if (IS_ERR(dfb)) {
ret = PTR_ERR(dfb); goto err;
}
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.