#include <drm/drm_fb_helper.h>
  #include <drm/drm_of.h>
  
- #include "sun4i_crtc.h"
  #include "sun4i_drv.h"
  #include "sun4i_framebuffer.h"
- #include "sun4i_layer.h"
+ #include "sun4i_tcon.h"
  
 -static const struct file_operations sun4i_drv_fops = {
 -      .owner          = THIS_MODULE,
 -      .open           = drm_open,
 -      .release        = drm_release,
 -      .unlocked_ioctl = drm_ioctl,
 -      .compat_ioctl   = drm_compat_ioctl,
 -      .poll           = drm_poll,
 -      .read           = drm_read,
 -      .llseek         = no_llseek,
 -      .mmap           = drm_gem_cma_mmap,
 -};
 +DEFINE_DRM_GEM_CMA_FOPS(sun4i_drv_fops);
  
  static struct drm_driver sun4i_drv_driver = {
        .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
 
  #include <drm/drmP.h>
  #include <drm/drm_atomic_helper.h>
  #include <drm/drm_crtc_helper.h>
 +#include <drm/drm_of.h>
  #include <drm/drm_panel.h>
  
- #include "sun4i_drv.h"
+ #include "sun4i_crtc.h"
  #include "sun4i_tcon.h"
  #include "sun4i_rgb.h"
  
        rgb = devm_kzalloc(drm->dev, sizeof(*rgb), GFP_KERNEL);
        if (!rgb)
                return -ENOMEM;
-       rgb->drv = drv;
+       rgb->tcon = tcon;
        encoder = &rgb->encoder;
  
 -      tcon->panel = sun4i_tcon_find_panel(tcon->dev->of_node);
 -      bridge = sun4i_tcon_find_bridge(tcon->dev->of_node);
 -      if (IS_ERR(tcon->panel) && IS_ERR(bridge)) {
 +      ret = drm_of_find_panel_or_bridge(tcon->dev->of_node, 1, 0,
 +                                        &tcon->panel, &bridge);
 +      if (ret) {
                dev_info(drm->dev, "No panel or bridge found... RGB output disabled\n");
                return 0;
        }
        }
  
        /* The RGB encoder can only work with the TCON channel 0 */
-       rgb->encoder.possible_crtcs = BIT(0);
+       rgb->encoder.possible_crtcs = BIT(drm_crtc_index(&tcon->crtc->crtc));
  
 -      if (!IS_ERR(tcon->panel)) {
 +      if (tcon->panel) {
                drm_connector_helper_add(&rgb->connector,
                                         &sun4i_rgb_con_helper_funcs);
                ret = drm_connector_init(drm, &rgb->connector,