Lines Matching refs:crtc

89 	struct drm_crtc *crtc;
91 drm_for_each_crtc(crtc, dev)
92 if (idx == crtc->index)
93 return crtc;
99 int drm_crtc_force_disable(struct drm_crtc *crtc)
102 .crtc = crtc,
105 WARN_ON(drm_drv_uses_atomic_modeset(crtc->dev));
112 struct drm_crtc *crtc;
115 drm_for_each_crtc(crtc, dev) {
116 drm_debugfs_crtc_add(crtc);
118 if (crtc->funcs->late_register)
119 ret = crtc->funcs->late_register(crtc);
129 struct drm_crtc *crtc;
131 drm_for_each_crtc(crtc, dev) {
132 if (crtc->funcs->early_unregister)
133 crtc->funcs->early_unregister(crtc);
134 drm_debugfs_crtc_remove(crtc);
138 static int drm_crtc_crc_init(struct drm_crtc *crtc)
141 spin_lock_init(&crtc->crc.lock);
142 init_waitqueue_head(&crtc->crc.wq);
143 crtc->crc.source = kstrdup("auto", GFP_KERNEL);
144 if (!crtc->crc.source)
150 static void drm_crtc_crc_fini(struct drm_crtc *crtc)
153 kfree(crtc->crc.source);
167 struct drm_crtc *crtc = fence_to_crtc(fence);
169 return crtc->dev->driver->name;
174 struct drm_crtc *crtc = fence_to_crtc(fence);
176 return crtc->timeline_name;
184 struct dma_fence *drm_crtc_create_fence(struct drm_crtc *crtc)
192 dma_fence_init(fence, &drm_crtc_fence_ops, &crtc->fence_lock,
193 crtc->fence_context, ++crtc->fence_seqno);
235 static int __drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
247 /* crtc index is used with 32bit bitmasks */
255 crtc->dev = dev;
256 crtc->funcs = funcs;
258 INIT_LIST_HEAD(&crtc->commit_list);
259 spin_lock_init(&crtc->commit_lock);
261 drm_modeset_lock_init(&crtc->mutex);
262 ret = drm_mode_object_add(dev, &crtc->base, DRM_MODE_OBJECT_CRTC);
267 crtc->name = kvasprintf(GFP_KERNEL, name, ap);
269 crtc->name = kasprintf(GFP_KERNEL, "crtc-%d", config->num_crtc);
271 if (!crtc->name) {
272 drm_mode_object_unregister(dev, &crtc->base);
276 crtc->fence_context = dma_fence_context_alloc(1);
277 spin_lock_init(&crtc->fence_lock);
278 snprintf(crtc->timeline_name, sizeof(crtc->timeline_name),
279 "CRTC:%d-%s", crtc->base.id, crtc->name);
281 crtc->base.properties = &crtc->properties;
283 list_add_tail(&crtc->head, &config->crtc_list);
284 crtc->index = config->num_crtc++;
286 crtc->primary = primary;
287 crtc->cursor = cursor;
289 primary->possible_crtcs = drm_crtc_mask(crtc);
291 cursor->possible_crtcs = drm_crtc_mask(crtc);
293 ret = drm_crtc_crc_init(crtc);
295 drm_mode_object_unregister(dev, &crtc->base);
300 drm_object_attach_property(&crtc->base, config->prop_active, 0);
301 drm_object_attach_property(&crtc->base, config->prop_mode_id, 0);
302 drm_object_attach_property(&crtc->base,
304 drm_object_attach_property(&crtc->base,
315 * @crtc: CRTC object to init
321 * Inits a new object created as base part of a driver crtc object. Drivers
327 * the crtc structure. The crtc structure should not be allocated with
341 int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
353 ret = __drm_crtc_init_with_planes(dev, crtc, primary, cursor, funcs,
364 struct drm_crtc *crtc = ptr;
366 drm_crtc_cleanup(crtc);
371 struct drm_crtc *crtc,
382 ret = __drm_crtc_init_with_planes(dev, crtc, primary, cursor, funcs,
388 crtc);
399 * @crtc: CRTC object to init
405 * Inits a new object created as base part of a driver crtc object. Drivers
412 * drmm_crtc_cleanup() with drmm_add_action(). The crtc structure should
423 int drmm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
433 ret = __drmm_crtc_init_with_planes(dev, crtc, primary, cursor, funcs,
451 struct drm_crtc *crtc;
462 crtc = container + offset;
465 ret = __drmm_crtc_init_with_planes(dev, crtc, primary, cursor, funcs,
476 * drm_crtc_cleanup - Clean up the core crtc usage
477 * @crtc: CRTC to cleanup
479 * This function cleans up @crtc and removes it from the DRM mode setting
480 * core. Note that the function does *not* free the crtc structure itself,
483 void drm_crtc_cleanup(struct drm_crtc *crtc)
485 struct drm_device *dev = crtc->dev;
492 drm_crtc_crc_fini(crtc);
494 kfree(crtc->gamma_store);
495 crtc->gamma_store = NULL;
497 drm_modeset_lock_fini(&crtc->mutex);
499 drm_mode_object_unregister(dev, &crtc->base);
500 list_del(&crtc->head);
503 WARN_ON(crtc->state && !crtc->funcs->atomic_destroy_state);
504 if (crtc->state && crtc->funcs->atomic_destroy_state)
505 crtc->funcs->atomic_destroy_state(crtc, crtc->state);
507 kfree(crtc->name);
509 memset(crtc, 0, sizeof(*crtc));
530 struct drm_crtc *crtc;
536 crtc = drm_crtc_find(dev, file_priv, crtc_resp->crtc_id);
537 if (!crtc)
540 plane = crtc->primary;
542 crtc_resp->gamma_size = crtc->gamma_size;
558 drm_modeset_lock(&crtc->mutex, NULL);
559 if (crtc->state) {
560 if (crtc->state->enable) {
561 drm_mode_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
567 crtc_resp->x = crtc->x;
568 crtc_resp->y = crtc->y;
570 if (crtc->enabled) {
571 drm_mode_convert_to_umode(&crtc_resp->mode, &crtc->mode);
580 drm_modeset_unlock(&crtc->mutex);
588 struct drm_crtc *crtc = set->crtc;
593 WARN_ON(drm_drv_uses_atomic_modeset(crtc->dev));
600 drm_for_each_crtc(tmp, crtc->dev) {
608 ret = crtc->funcs->set_config(set, ctx);
610 struct drm_plane *plane = crtc->primary;
612 plane->crtc = fb ? crtc : NULL;
616 drm_for_each_crtc(tmp, crtc->dev) {
644 WARN_ON(drm_drv_uses_atomic_modeset(set->crtc->dev));
653 * @crtc: CRTC that framebuffer will be displayed on
659 int drm_crtc_check_viewport(const struct drm_crtc *crtc,
669 if (crtc->state &&
670 drm_rotation_90_or_270(crtc->primary->state->rotation))
697 struct drm_crtc *crtc;
717 crtc = drm_crtc_find(dev, file_priv, crtc_req->crtc_id);
718 if (!crtc) {
722 DRM_DEBUG_KMS("[CRTC:%d:%s]\n", crtc->base.id, crtc->name);
724 plane = crtc->primary;
803 ret = drm_crtc_check_viewport(crtc, crtc_req->x, crtc_req->y,
864 set.crtc = crtc;
873 ret = crtc->funcs->set_config(&set, &ctx);
906 struct drm_crtc *crtc = obj_to_crtc(obj);
908 if (crtc->funcs->set_property)
909 ret = crtc->funcs->set_property(crtc, property, value);
920 * @crtc: drm CRTC
930 int drm_crtc_create_scaling_filter_property(struct drm_crtc *crtc,
934 drm_create_scaling_filter_prop(crtc->dev, supported_filters);
939 drm_object_attach_property(&crtc->base, prop,
941 crtc->scaling_filter_property = prop;