summaryrefslogtreecommitdiff
path: root/drivers/video/mcde/mcde_fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/mcde/mcde_fb.c')
-rw-r--r--drivers/video/mcde/mcde_fb.c45
1 files changed, 29 insertions, 16 deletions
diff --git a/drivers/video/mcde/mcde_fb.c b/drivers/video/mcde/mcde_fb.c
index cd7dd70101d..3b464cd8024 100644
--- a/drivers/video/mcde/mcde_fb.c
+++ b/drivers/video/mcde/mcde_fb.c
@@ -490,6 +490,9 @@ static int apply_var(struct fb_info *fbi, struct mcde_display_device *ddev)
}
fbi->fix.line_length = line_len;
+ if (ddev->fictive)
+ goto apply_var_end;
+
if (ddev) {
/* Apply pixel format */
fmt = var_to_pix_fmt_info(var);
@@ -520,6 +523,7 @@ static int apply_var(struct fb_info *fbi, struct mcde_display_device *ddev)
mcde_dss_update_overlay(ovly, num_buffers == 3);
}
+apply_var_end:
return 0;
}
@@ -638,13 +642,15 @@ struct fb_info *mcde_fb_create(struct mcde_display_device *ddev,
init_fb(fbi);
mfb = to_mcde_fb(fbi);
- ret = mcde_dss_open_channel(ddev);
- if (ret)
- goto channel_open_failed;
+ if (ddev->fictive == false) {
+ ret = mcde_dss_open_channel(ddev);
+ if (ret)
+ goto channel_open_failed;
- ret = mcde_dss_enable_display(ddev);
- if (ret)
- goto display_enable_failed;
+ ret = mcde_dss_enable_display(ddev);
+ if (ret)
+ goto display_enable_failed;
+ }
/* Prepare var and allocate frame buffer memory */
init_var_fmt(&fbi->var, w, h, vw, vh, pix_fmt, rotate);
@@ -653,7 +659,8 @@ struct fb_info *mcde_fb_create(struct mcde_display_device *ddev,
if (ret)
goto apply_var_failed;
- mcde_dss_set_pixel_format(ddev, ddev->port->pixel_format);
+ if (ddev->fictive == false)
+ mcde_dss_set_pixel_format(ddev, ddev->port->pixel_format);
/* Setup overlay */
get_ovly_info(fbi, NULL, &ovly_info);
@@ -665,9 +672,11 @@ struct fb_info *mcde_fb_create(struct mcde_display_device *ddev,
mfb->ovlys[0] = ovly;
mfb->num_ovlys = 1;
- ret = mcde_dss_enable_overlay(ovly);
- if (ret)
- goto ovly_enable_failed;
+ if (ddev->fictive == false) {
+ ret = mcde_dss_enable_overlay(ovly);
+ if (ret)
+ goto ovly_enable_failed;
+ }
mfb->id = ddev->id;
@@ -679,11 +688,13 @@ struct fb_info *mcde_fb_create(struct mcde_display_device *ddev,
ddev->fbi = fbi;
#ifdef CONFIG_HAS_EARLYSUSPEND
- mfb->early_suspend.level =
+ if (ddev->fictive == false) {
+ mfb->early_suspend.level =
EARLY_SUSPEND_LEVEL_DISABLE_FB;
- mfb->early_suspend.suspend = early_suspend;
- mfb->early_suspend.resume = late_resume;
- register_early_suspend(&mfb->early_suspend);
+ mfb->early_suspend.suspend = early_suspend;
+ mfb->early_suspend.resume = late_resume;
+ register_early_suspend(&mfb->early_suspend);
+ }
#endif
goto out;
@@ -719,8 +730,10 @@ void mcde_fb_destroy(struct mcde_display_device *dev)
dev_vdbg(&dev->dev, "%s\n", __func__);
- mcde_dss_disable_display(dev);
- mcde_dss_close_channel(dev);
+ if (dev->fictive == false) {
+ mcde_dss_disable_display(dev);
+ mcde_dss_close_channel(dev);
+ }
mfb = to_mcde_fb(dev->fbi);
for (i = 0; i < mfb->num_ovlys; i++) {