> static int exynos_drm_create_enc_conn(struct drm_device *dev, > - struct exynos_drm_subdrv *subdrv) > + struct exynos_drm_display *display) > { > struct drm_encoder *encoder; > struct drm_connector *connector; > + struct exynos_drm_manager *manager; > int ret; > + unsigned long possible_crtcs = 0; > > - subdrv->manager->dev = subdrv->dev; > + /* Find possible crtcs for this display */ > + list_for_each_entry(manager, &exynos_drm_manager_list, list) > + if (manager->type == display->type) > + possible_crtcs |= 1 << manager->pipe; > > /* create and initialize a encoder for this sub driver. */ > - encoder = exynos_drm_encoder_create(dev, subdrv->manager, > - (1 << MAX_CRTC) - 1); > + encoder = exynos_drm_encoder_create(dev, display, possible_crtcs); > if (!encoder) { > DRM_ERROR("failed to create encoder\n"); > return -EFAULT; > } > - subdrv->encoder = encoder; > + display->encoder = encoder; > > - if (subdrv->manager->display_ops->type == EXYNOS_DISPLAY_TYPE_LCD) { > + if (display->type == EXYNOS_DISPLAY_TYPE_LCD) { > ret = exynos_drm_attach_lcd_bridge(dev, encoder) Plz, _do_not_base_ on top of your lvds bridge patch set. As I mentioned before, the tricky codes are not good. For this, let's find a better way after your refactoring patch set are reviewed enough, and if merged. > if (ret) > return 0; > @@ -91,7 +98,7 @@ static int exynos_drm_create_enc_conn(struct drm_device *dev, > goto err_destroy_encoder; > } > > - subdrv->connector = connector; > + display->connector = connector; > > return 0; > > @@ -100,21 +107,6 @@ err_destroy_encoder: > return ret; > } > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel