if (!fb_helper_connector)
                return -ENOMEM;
 
+       drm_connector_reference(connector);
        fb_helper_connector->connector = connector;
        fb_helper->connector_info[fb_helper->connector_count++] = fb_helper_connector;
        return 0;
 }
 EXPORT_SYMBOL(drm_fb_helper_add_one_connector);
 
-static void remove_from_modeset(struct drm_mode_set *set,
-               struct drm_connector *connector)
-{
-       int i, j;
-
-       for (i = 0; i < set->num_connectors; i++) {
-               if (set->connectors[i] == connector)
-                       break;
-       }
-
-       if (i == set->num_connectors)
-               return;
-
-       for (j = i + 1; j < set->num_connectors; j++) {
-               set->connectors[j - 1] = set->connectors[j];
-       }
-       set->num_connectors--;
-
-       /*
-        * TODO maybe need to makes sure we set it back to !=NULL somewhere?
-        */
-       if (set->num_connectors == 0) {
-               set->fb = NULL;
-               drm_mode_destroy(connector->dev, set->mode);
-               set->mode = NULL;
-       }
-}
-
 int drm_fb_helper_remove_one_connector(struct drm_fb_helper *fb_helper,
                                       struct drm_connector *connector)
 {
        if (i == fb_helper->connector_count)
                return -EINVAL;
        fb_helper_connector = fb_helper->connector_info[i];
+       drm_connector_unreference(fb_helper_connector->connector);
 
        for (j = i + 1; j < fb_helper->connector_count; j++) {
                fb_helper->connector_info[j - 1] = fb_helper->connector_info[j];
        fb_helper->connector_count--;
        kfree(fb_helper_connector);
 
-       /* also cleanup dangling references to the connector: */
-       for (i = 0; i < fb_helper->crtc_count; i++)
-               remove_from_modeset(&fb_helper->crtc_info[i].mode_set, connector);
-
        return 0;
 }
 EXPORT_SYMBOL(drm_fb_helper_remove_one_connector);
 {
        int i;
 
-       for (i = 0; i < helper->connector_count; i++)
+       for (i = 0; i < helper->connector_count; i++) {
+               drm_connector_unreference(helper->connector_info[i]->connector);
                kfree(helper->connector_info[i]);
+       }
        kfree(helper->connector_info);
        for (i = 0; i < helper->crtc_count; i++) {
                kfree(helper->crtc_info[i].mode_set.connectors);