Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 991a3999 authored by David Lechner's avatar David Lechner Committed by Daniel Vetter
Browse files

drm/fb-helper: pass physical dimensions to fbdev



The fbdev subsystem has a place for physical dimensions (width and height
in mm) that is readable by userspace. Since DRM also knows these
dimensions, pass this information to the fbdev device.

This has to be done in drm_setup_crtcs_fb() instead of drm_setup_crtcs()
because fb_helper->fbdev may be NULL in drm_setup_crtcs().

Signed-off-by: default avatarDavid Lechner <david@lechnology.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/1501863924-7154-1-git-send-email-david@lechnology.com
parent adb8a5a5
Loading
Loading
Loading
Loading
+15 −2
Original line number Original line Diff line number Diff line
@@ -1882,8 +1882,6 @@ void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helpe
	info->var.xoffset = 0;
	info->var.xoffset = 0;
	info->var.yoffset = 0;
	info->var.yoffset = 0;
	info->var.activate = FB_ACTIVATE_NOW;
	info->var.activate = FB_ACTIVATE_NOW;
	info->var.height = -1;
	info->var.width = -1;


	switch (fb->format->depth) {
	switch (fb->format->depth) {
	case 8:
	case 8:
@@ -2435,11 +2433,26 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper,
 */
 */
static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper)
static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper)
{
{
	struct fb_info *info = fb_helper->fbdev;
	int i;
	int i;


	for (i = 0; i < fb_helper->crtc_count; i++)
	for (i = 0; i < fb_helper->crtc_count; i++)
		if (fb_helper->crtc_info[i].mode_set.num_connectors)
		if (fb_helper->crtc_info[i].mode_set.num_connectors)
			fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb;
			fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb;

	mutex_lock(&fb_helper->dev->mode_config.mutex);
	drm_fb_helper_for_each_connector(fb_helper, i) {
		struct drm_connector *connector =
					fb_helper->connector_info[i]->connector;

		/* use first connected connector for the physical dimensions */
		if (connector->status == connector_status_connected) {
			info->var.width = connector->display_info.width_mm;
			info->var.height = connector->display_info.height_mm;
			break;
		}
	}
	mutex_unlock(&fb_helper->dev->mode_config.mutex);
}
}


/* Note: Drops fb_helper->lock before returning. */
/* Note: Drops fb_helper->lock before returning. */