static const char *OMAPLFBDSSUpdateModeToString(enum omap_dss_update_mode eMode) { if (!OMAPLFBValidateDSSUpdateMode(eMode)) { return "Unknown Update Mode"; } return OMAPLFBUpdateModeToString(OMAPLFBFromDSSUpdateMode(eMode)); }
/* * Get display update mode. * If the mode is AUTO, we can wait for VSync, if desired. */ OMAPLFB_UPDATE_MODE OMAPLFBGetUpdateMode(OMAPLFB_DEVINFO *psDevInfo) { #if defined(PVR_OMAPLFB_DRM_FB) struct drm_connector *psConnector; OMAPLFB_UPDATE_MODE eMode = OMAPLFB_UPDATE_MODE_UNDEFINED; /* * There may be multiple displays connected. If at least one * display is manual update mode, report all screens as being * in that mode. */ for (psConnector = NULL; (psConnector = omap_fbdev_get_next_connector(psDevInfo->psLINFBInfo, psConnector)) != NULL;) { switch(omap_connector_get_update_mode(psConnector)) { case OMAP_DSS_UPDATE_MANUAL: eMode = OMAPLFB_UPDATE_MODE_MANUAL; break; case OMAP_DSS_UPDATE_DISABLED: if (eMode == OMAPLFB_UPDATE_MODE_UNDEFINED) { eMode = OMAPLFB_UPDATE_MODE_DISABLED; } break; case OMAP_DSS_UPDATE_AUTO: /* Fall through to default case */ default: /* Asssume auto update is possible */ if (eMode != OMAPLFB_UPDATE_MODE_MANUAL) { eMode = OMAPLFB_UPDATE_MODE_AUTO; } break; } } return eMode; #else /* defined(PVR_OMAPLFB_DRM_FB) */ #if LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0) struct omap_dss_device *psDSSDev = fb2display(psDevInfo->psLINFBInfo); OMAP_DSS_DRIVER(psDSSDrv, psDSSDev); enum omap_dss_update_mode eMode; if (psDSSDrv == NULL) { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: No DSS device\n", __FUNCTION__, psDevInfo->uiFBDevID)); return OMAPLFB_UPDATE_MODE_UNDEFINED; } if (psDSSDrv->get_update_mode == NULL) { if (strcmp(psDSSDev->name, "hdmi") == 0) { return OMAPLFB_UPDATE_MODE_AUTO; } // DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: No get_update_mode function\n", __FUNCTION__, psDevInfo->uiFBDevID)); // return OMAPLFB_UPDATE_MODE_UNDEFINED; return OMAPLFB_UPDATE_MODE_AUTO; } eMode = psDSSDrv->get_update_mode(psDSSDev); if (!OMAPLFBValidateDSSUpdateMode(eMode)) { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: Unknown update mode (%d)\n", __FUNCTION__, psDevInfo->uiFBDevID, (int)eMode)); } return OMAPLFBFromDSSUpdateMode(eMode); #else return OMAPLFB_UPDATE_MODE_AUTO; #endif #endif /* defined(PVR_OMAPLFB_DRM_FB) */ }
OMAPLFB_UPDATE_MODE OMAPLFBGetUpdateMode(OMAPLFB_DEVINFO *psDevInfo) { #if 0 #if defined(PVR_OMAPLFB_DRM_FB) struct drm_connector *psConnector; OMAPLFB_UPDATE_MODE eMode = OMAPLFB_UPDATE_MODE_UNDEFINED; for (psConnector = NULL; (psConnector = omap_fbdev_get_next_connector(psDevInfo->psLINFBInfo, psConnector)) != NULL;) { switch(omap_connector_get_update_mode(psConnector)) { case OMAP_DSS_UPDATE_MANUAL: eMode = OMAPLFB_UPDATE_MODE_MANUAL; break; case OMAP_DSS_UPDATE_DISABLED: if (eMode == OMAPLFB_UPDATE_MODE_UNDEFINED) { eMode = OMAPLFB_UPDATE_MODE_DISABLED; } break; case OMAP_DSS_UPDATE_AUTO: default: if (eMode != OMAPLFB_UPDATE_MODE_MANUAL) { eMode = OMAPLFB_UPDATE_MODE_AUTO; } break; } } return eMode; #else struct omap_dss_device *psDSSDev = fb2display(psDevInfo->psLINFBInfo); OMAP_DSS_DRIVER(psDSSDrv, psDSSDev); enum omap_dss_update_mode eMode; if (psDSSDrv == NULL) { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: No DSS device\n", __FUNCTION__, psDevInfo->uiFBDevID)); return OMAPLFB_UPDATE_MODE_UNDEFINED; } if (psDSSDrv->get_update_mode == NULL) { if (strcmp(psDSSDev->name, "hdmi") == 0) { return OMAPLFB_UPDATE_MODE_AUTO; } DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: No get_update_mode function\n", __FUNCTION__, psDevInfo->uiFBDevID)); return OMAPLFB_UPDATE_MODE_UNDEFINED; } eMode = psDSSDrv->get_update_mode(psDSSDev); if (!OMAPLFBValidateDSSUpdateMode(eMode)) { DEBUG_PRINTK((KERN_WARNING DRIVER_PREFIX ": %s: Device %u: Unknown update mode (%d)\n", __FUNCTION__, psDevInfo->uiFBDevID, (int)eMode)); } return OMAPLFBFromDSSUpdateMode(eMode); #endif #endif return OMAPLFB_UPDATE_MODE_AUTO; }