From c63f7725be47e7d5c3642b79455f20ccc760be6f Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 23 Sep 2016 21:40:29 +0200 Subject: [PATCH] intel_fb: support forced virtual framebuffer size --- .../src/drivers/framebuffer/intel/include/component.h | 10 ++++++++++ .../dde_linux/src/drivers/framebuffer/intel/lx_emul.cc | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h b/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h index 302a591c98..1b221d5fed 100644 --- a/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h +++ b/repos/dde_linux/src/drivers/framebuffer/intel/include/component.h @@ -120,6 +120,16 @@ class Framebuffer::Session_component : public Genode::Rpc_object Genode::Xml_node config() { return _config.xml(); } + int force_width_from_config() + { + return _config.xml().attribute_value("force_width", 0); + } + + int force_height_from_config() + { + return _config.xml().attribute_value("force_height", 0); + } + /*********************************** ** Framebuffer session interface ** diff --git a/repos/dde_linux/src/drivers/framebuffer/intel/lx_emul.cc b/repos/dde_linux/src/drivers/framebuffer/intel/lx_emul.cc index 4886cc809c..c3e546f1b4 100644 --- a/repos/dde_linux/src/drivers/framebuffer/intel/lx_emul.cc +++ b/repos/dde_linux/src/drivers/framebuffer/intel/lx_emul.cc @@ -187,6 +187,12 @@ void Framebuffer::Driver::update_mode() _preferred_mode(c)); }); } + /* force virtual framebuffer size if requested */ + if (int w = _session.force_width_from_config()) + _config._lx.width = min(_config._lx.width, w); + if (int h = _session.force_height_from_config()) + _config._lx.height = min(_config._lx.height, h); + if (old._lx.addr) Lx::iounmap(old._lx.addr); /* drm_crtc.h in drm_framebuffer_funcs definition: use drm_fb_remove */ if (old._lx.lx_fb) drm_framebuffer_remove(old._lx.lx_fb);