dst->dss = dss;
 
-       ret = dst->ops->connect(src, dst);
-       if (ret < 0) {
-               dst->dss = NULL;
-               return ret;
+       if (dst->ops && dst->ops->connect) {
+               ret = dst->ops->connect(src, dst);
+               if (ret < 0) {
+                       dst->dss = NULL;
+                       return ret;
+               }
        }
 
        return 0;
 
        WARN_ON(dst->state != OMAP_DSS_DISPLAY_DISABLED);
 
-       dst->ops->disconnect(src, dst);
+       if (dst->ops && dst->ops->disconnect)
+               dst->ops->disconnect(src, dst);
        dst->dss = NULL;
 }
 EXPORT_SYMBOL_GPL(omapdss_device_disconnect);
 
        omapdss_device_pre_enable(dssdev->next);
 
-       if (dssdev->ops->pre_enable)
+       if (dssdev->ops && dssdev->ops->pre_enable)
                dssdev->ops->pre_enable(dssdev);
 }
 EXPORT_SYMBOL_GPL(omapdss_device_pre_enable);
        if (!dssdev)
                return;
 
-       if (dssdev->ops->enable)
+       if (dssdev->ops && dssdev->ops->enable)
                dssdev->ops->enable(dssdev);
 
        omapdss_device_enable(dssdev->next);
 
        omapdss_device_disable(dssdev->next);
 
-       if (dssdev->ops->disable)
+       if (dssdev->ops && dssdev->ops->disable)
                dssdev->ops->disable(dssdev);
 }
 EXPORT_SYMBOL_GPL(omapdss_device_disable);
        if (!dssdev)
                return;
 
-       if (dssdev->ops->post_disable)
+       if (dssdev->ops && dssdev->ops->post_disable)
                dssdev->ops->post_disable(dssdev);
 
        omapdss_device_post_disable(dssdev->next);
 
        DSSDBG("shutdown\n");
 
        for_each_dss_output(dssdev) {
-               if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
+               if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE &&
+                   dssdev->ops && dssdev->ops->disable)
                        dssdev->ops->disable(dssdev);
        }
 }
 
        drm_mode_copy(adjusted_mode, mode);
 
        for (; dssdev; dssdev = dssdev->next) {
-               if (!dssdev->ops->check_timings)
+               if (!dssdev->ops || !dssdev->ops->check_timings)
                        continue;
 
                ret = dssdev->ops->check_timings(dssdev, adjusted_mode);
 
        struct omap_dss_device *dssdev = omap_encoder->output;
        bool hdmi_mode = connector->display_info.is_hdmi;
 
-       if (dssdev->ops->hdmi.set_hdmi_mode)
+       if (dssdev->ops && dssdev->ops->hdmi.set_hdmi_mode)
                dssdev->ops->hdmi.set_hdmi_mode(dssdev, hdmi_mode);
 
-       if (hdmi_mode && dssdev->ops->hdmi.set_infoframe) {
+       if (hdmi_mode && dssdev->ops && dssdev->ops->hdmi.set_infoframe) {
                struct hdmi_avi_infoframe avi;
                int r;
 
        dss_mgr_set_timings(output, &vm);
 
        for (dssdev = output; dssdev; dssdev = dssdev->next) {
-               if (dssdev->ops->set_timings)
+               if (dssdev->ops && dssdev->ops->set_timings)
                        dssdev->ops->set_timings(dssdev, adjusted_mode);
        }
 
         * flow where the pipeline output controls the encoder.
         */
        if (dssdev->type != OMAP_DISPLAY_TYPE_DSI) {
-               dssdev->ops->disable(dssdev);
+               if (dssdev->ops && dssdev->ops->disable)
+                       dssdev->ops->disable(dssdev);
                dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
        }
 
         * flow where the pipeline output controls the encoder.
         */
        if (dssdev->type != OMAP_DISPLAY_TYPE_DSI) {
-               dssdev->ops->enable(dssdev);
+               if (dssdev->ops && dssdev->ops->enable)
+                       dssdev->ops->enable(dssdev);
                dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
        }