|
@@ -2193,6 +2193,61 @@ static int omapfb_parse_def_modes(struct omapfb2_device *fbdev)
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
+static int omapfb_init_display(struct omapfb2_device *fbdev,
|
|
|
+ struct omap_dss_device *dssdev)
|
|
|
+{
|
|
|
+ struct omap_dss_driver *dssdrv = dssdev->driver;
|
|
|
+ int r;
|
|
|
+
|
|
|
+ r = dssdrv->enable(dssdev);
|
|
|
+ if (r) {
|
|
|
+ dev_warn(fbdev->dev, "Failed to enable display '%s'\n",
|
|
|
+ dssdev->name);
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dssdev->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) {
|
|
|
+ u16 w, h;
|
|
|
+ if (dssdrv->enable_te) {
|
|
|
+ r = dssdrv->enable_te(dssdev, 1);
|
|
|
+ if (r) {
|
|
|
+ dev_err(fbdev->dev, "Failed to set TE\n");
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dssdrv->set_update_mode) {
|
|
|
+ r = dssdrv->set_update_mode(dssdev,
|
|
|
+ OMAP_DSS_UPDATE_MANUAL);
|
|
|
+ if (r) {
|
|
|
+ dev_err(fbdev->dev,
|
|
|
+ "Failed to set update mode\n");
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dssdrv->get_resolution(dssdev, &w, &h);
|
|
|
+ r = dssdrv->update(dssdev, 0, 0, w, h);
|
|
|
+ if (r) {
|
|
|
+ dev_err(fbdev->dev,
|
|
|
+ "Failed to update display\n");
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (dssdrv->set_update_mode) {
|
|
|
+ r = dssdrv->set_update_mode(dssdev,
|
|
|
+ OMAP_DSS_UPDATE_AUTO);
|
|
|
+ if (r) {
|
|
|
+ dev_err(fbdev->dev,
|
|
|
+ "Failed to set update mode\n");
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int omapfb_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
struct omapfb2_device *fbdev = NULL;
|
|
@@ -2292,30 +2347,13 @@ static int omapfb_probe(struct platform_device *pdev)
|
|
|
}
|
|
|
|
|
|
if (def_display) {
|
|
|
- struct omap_dss_driver *dssdrv = def_display->driver;
|
|
|
-
|
|
|
- r = def_display->driver->enable(def_display);
|
|
|
+ r = omapfb_init_display(fbdev, def_display);
|
|
|
if (r) {
|
|
|
- dev_warn(fbdev->dev, "Failed to enable display '%s'\n",
|
|
|
- def_display->name);
|
|
|
+ dev_err(fbdev->dev,
|
|
|
+ "failed to initialize default "
|
|
|
+ "display\n");
|
|
|
goto cleanup;
|
|
|
}
|
|
|
-
|
|
|
- if (def_display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE) {
|
|
|
- u16 w, h;
|
|
|
- if (dssdrv->enable_te)
|
|
|
- dssdrv->enable_te(def_display, 1);
|
|
|
- if (dssdrv->set_update_mode)
|
|
|
- dssdrv->set_update_mode(def_display,
|
|
|
- OMAP_DSS_UPDATE_MANUAL);
|
|
|
-
|
|
|
- dssdrv->get_resolution(def_display, &w, &h);
|
|
|
- def_display->driver->update(def_display, 0, 0, w, h);
|
|
|
- } else {
|
|
|
- if (dssdrv->set_update_mode)
|
|
|
- dssdrv->set_update_mode(def_display,
|
|
|
- OMAP_DSS_UPDATE_AUTO);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
DBG("create sysfs for fbs\n");
|