504,7 → 504,75 |
} |
EXPORT_SYMBOL(drm_gtf_mode); |
|
#if IS_ENABLED(CONFIG_VIDEOMODE) |
int drm_display_mode_from_videomode(const struct videomode *vm, |
struct drm_display_mode *dmode) |
{ |
dmode->hdisplay = vm->hactive; |
dmode->hsync_start = dmode->hdisplay + vm->hfront_porch; |
dmode->hsync_end = dmode->hsync_start + vm->hsync_len; |
dmode->htotal = dmode->hsync_end + vm->hback_porch; |
|
dmode->vdisplay = vm->vactive; |
dmode->vsync_start = dmode->vdisplay + vm->vfront_porch; |
dmode->vsync_end = dmode->vsync_start + vm->vsync_len; |
dmode->vtotal = dmode->vsync_end + vm->vback_porch; |
|
dmode->clock = vm->pixelclock / 1000; |
|
dmode->flags = 0; |
if (vm->dmt_flags & VESA_DMT_HSYNC_HIGH) |
dmode->flags |= DRM_MODE_FLAG_PHSYNC; |
else if (vm->dmt_flags & VESA_DMT_HSYNC_LOW) |
dmode->flags |= DRM_MODE_FLAG_NHSYNC; |
if (vm->dmt_flags & VESA_DMT_VSYNC_HIGH) |
dmode->flags |= DRM_MODE_FLAG_PVSYNC; |
else if (vm->dmt_flags & VESA_DMT_VSYNC_LOW) |
dmode->flags |= DRM_MODE_FLAG_NVSYNC; |
if (vm->data_flags & DISPLAY_FLAGS_INTERLACED) |
dmode->flags |= DRM_MODE_FLAG_INTERLACE; |
if (vm->data_flags & DISPLAY_FLAGS_DOUBLESCAN) |
dmode->flags |= DRM_MODE_FLAG_DBLSCAN; |
drm_mode_set_name(dmode); |
|
return 0; |
} |
EXPORT_SYMBOL_GPL(drm_display_mode_from_videomode); |
#endif |
|
#if IS_ENABLED(CONFIG_OF_VIDEOMODE) |
/** |
* of_get_drm_display_mode - get a drm_display_mode from devicetree |
* @np: device_node with the timing specification |
* @dmode: will be set to the return value |
* @index: index into the list of display timings in devicetree |
* |
* This function is expensive and should only be used, if only one mode is to be |
* read from DT. To get multiple modes start with of_get_display_timings and |
* work with that instead. |
*/ |
int of_get_drm_display_mode(struct device_node *np, |
struct drm_display_mode *dmode, int index) |
{ |
struct videomode vm; |
int ret; |
|
ret = of_get_videomode(np, &vm, index); |
if (ret) |
return ret; |
|
drm_display_mode_from_videomode(&vm, dmode); |
|
pr_debug("%s: got %dx%d display mode from %s\n", |
of_node_full_name(np), vm.hactive, vm.vactive, np->name); |
drm_mode_debug_printmodeline(dmode); |
|
return 0; |
} |
EXPORT_SYMBOL_GPL(of_get_drm_display_mode); |
#endif |
|
/** |
* drm_mode_set_name - set the name on a mode |
* @mode: name will be set in this mode |
* |