Beispiel #1
0
/* connect overlays to the new device, if not already connected. if force
 * selected, connect always. */
void dss_recheck_connections(struct omap_dss_device *dssdev, bool force)
{
	int i;
	struct omap_overlay_manager *lcd_mgr;
	struct omap_overlay_manager *tv_mgr;
	struct omap_overlay_manager *lcd2_mgr = NULL;
	struct omap_overlay_manager *mgr = NULL;

	lcd_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_LCD);
	tv_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_TV);
	if (cpu_is_omap44xx())
		lcd2_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_LCD2);

	if (dssdev->channel == OMAP_DSS_CHANNEL_LCD2) {
		if(lcd2_mgr == NULL) return; //LGE_CHANGE [[email protected]] 2011-03-02, P920 : For WBT
		if (!lcd2_mgr->device || force) {
			if (lcd2_mgr->device)
				lcd2_mgr->unset_device(lcd2_mgr);
			lcd2_mgr->set_device(lcd2_mgr, dssdev);
			mgr = lcd2_mgr;
		}
	} else if (dssdev->type != OMAP_DISPLAY_TYPE_VENC
		&& dssdev->type != OMAP_DISPLAY_TYPE_HDMI) {
		if (!lcd_mgr->device || force) {
			if (lcd_mgr->device)
				lcd_mgr->unset_device(lcd_mgr);
			lcd_mgr->set_device(lcd_mgr, dssdev);
			mgr = lcd_mgr;
		}
	}

	if (dssdev->type == OMAP_DISPLAY_TYPE_VENC
		|| dssdev->type == OMAP_DISPLAY_TYPE_HDMI) {
		if (!tv_mgr->device || force) {
			if (tv_mgr->device)
				tv_mgr->unset_device(tv_mgr);
			tv_mgr->set_device(tv_mgr, dssdev);
			mgr = tv_mgr;
		}
	}

//LGE_CHANGE_S [[email protected]] 2010-1-03, P920 : prevent to blink .
	if(dssdev->type != OMAP_DISPLAY_TYPE_HDMI) {
//LGE_CHANGE_E [[email protected]] 2011-01-03
		if (mgr) {
			for (i = 0; i < MAX_DSS_OVERLAYS; i++) {
				struct omap_overlay *ovl;
				ovl = omap_dss_get_overlay(i);
				if (!ovl->manager || force) {
					if (ovl->manager)
						omap_dss_unset_manager(ovl);
					omap_dss_set_manager(ovl, mgr);
				}
			}
		}
//LGE_CHANGE_S [[email protected]] 2010-1-03, P920 : prevent to blink .
	}
//LGE_CHANGE_E [[email protected]] 2011-01-03
}
Beispiel #2
0
/* connect overlays to the new device, if not already connected. if force
 * selected, connect always. */
void dss_recheck_connections(struct omap_dss_device *dssdev, bool force)
{
	int i;
	struct omap_overlay_manager *lcd_mgr;
	struct omap_overlay_manager *tv_mgr;
	struct omap_overlay_manager *lcd2_mgr = NULL;
	struct omap_overlay_manager *mgr = NULL;

	lcd_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_LCD);
	tv_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_TV);
	if (cpu_is_omap44xx())
		lcd2_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_LCD2);

	if (dssdev->channel == OMAP_DSS_CHANNEL_LCD2) {
		if (!lcd2_mgr->device || force) {
			if (lcd2_mgr->device)
				lcd2_mgr->unset_device(lcd2_mgr);
			lcd2_mgr->set_device(lcd2_mgr, dssdev);
			mgr = lcd2_mgr;
		}
	} else if (dssdev->type != OMAP_DISPLAY_TYPE_VENC
		&& dssdev->type != OMAP_DISPLAY_TYPE_HDMI) {
		if (!lcd_mgr->device || force) {
			if (lcd_mgr->device)
				lcd_mgr->unset_device(lcd_mgr);
			lcd_mgr->set_device(lcd_mgr, dssdev);
			mgr = lcd_mgr;
		}
	}

	if (dssdev->type == OMAP_DISPLAY_TYPE_VENC
		|| dssdev->type == OMAP_DISPLAY_TYPE_HDMI) {
		if (!tv_mgr->device || force) {
			if (tv_mgr->device)
				tv_mgr->unset_device(tv_mgr);
			tv_mgr->set_device(tv_mgr, dssdev);
			mgr = tv_mgr;
		}
	}

	if (mgr) {
		for (i = 0; i < MAX_DSS_OVERLAYS; i++) {
			struct omap_overlay *ovl;
			ovl = omap_dss_get_overlay(i);
			if (!ovl->manager || force) {
				if (ovl->manager)
					omap_dss_unset_manager(ovl);
				omap_dss_set_manager(ovl, mgr);
			}
		}
	}
}
void dss_read_ovl2mgr_platform_cfg(struct omap_dss_device *dssdev,
			struct omap_ovl2mgr_mapping *overlay_mappings,
							int cnt)
{
	struct omap_overlay_manager *lcd_mgr;
	struct omap_overlay_manager *tv_mgr;
	struct omap_overlay_manager *lcd2_mgr = NULL;
	struct omap_overlay_manager *mgr = NULL;
	int i = 0;

	lcd_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_LCD);
	tv_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_TV);
	if (cpu_is_omap44xx())
		lcd2_mgr = omap_dss_get_overlay_manager(OMAP_DSS_OVL_MGR_LCD2);

	for (i = 0; i < cnt; i++) {

		struct omap_overlay *ovl;
		ovl = omap_dss_get_overlay(overlay_mappings[i].overlay_idx);

		switch (overlay_mappings[i].overlay_mgr) {
		case OMAP_DSS_OVL_MGR_LCD:
			mgr = lcd_mgr;
			break;
		case OMAP_DSS_OVL_MGR_TV:
			mgr = tv_mgr;
			break;
		case OMAP_DSS_OVL_MGR_LCD2:
			mgr = lcd2_mgr;
			break;
		default:
			continue;
		}

		if (mgr) {
			if (ovl->manager)
				omap_dss_unset_manager(ovl);
			omap_dss_set_manager(ovl, mgr);
		}
	}
}