[Intel-gfx] Request for feedback : New Panel-fitter property for connectors
Goel, Akash
akash.goel at intel.com
Wed Feb 19 07:13:53 CET 2014
Hello,
We are planning to expose a new panel fitter property for the connectors.
We have some use cases like a full screen video playback, where we can flip the frame buffer of any size irrespective of the pipe timings and enable the panel fitter to do scaling instead of using the GPU.
Other use case is the Clone mode, where we can use the composed output of the LFP on the external display, with panel fitter enabled, to avoid GPU composition.
Please provide inputs/comments on the same.
Best regards
Akash
-----Original Message-----
From: Goel, Akash
Sent: Tuesday, February 18, 2014 4:12 PM
To: intel-gfx at lists.freedesktop.org
Cc: Goel, Akash; G, Pallavi
Subject: [PATCH] drm/i915: Added a new Panel-fitter property for connectors
From: Akash Goel <akash.goel at intel.com>
Added a Panel-fitter enable/disable property support for the connectors.
NOTE: By default, the value for the property will be disabled.
Signed-off-by: G Pallavi <pallavi.g at intel.com>
Signed-off-by: Akash Goel <akash.goel at intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 8 ++++++++
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/i915/intel_modes.c | 31 +++++++++++++++++++++++++++++++
3 files changed, 40 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 8c64831..a07f6cd 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1560,6 +1560,7 @@ typedef struct drm_i915_private {
struct drm_property *broadcast_rgb_property;
struct drm_property *force_audio_property;
+ struct drm_property *force_pfit_property;
uint32_t hw_context_size;
struct list_head context_list;
@@ -1613,6 +1614,13 @@ enum hdmi_force_audio {
HDMI_AUDIO_ON, /* force turn on HDMI audio */
};
+enum panel_fitter {
+ PFIT_OFF,
+ AUTOSCALE,
+ PILLARBOX,
+ LETTERBOX,
+};
+
#define I915_GTT_OFFSET_NONE ((u32)-1)
struct drm_i915_gem_object_ops {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a4ffc02..db6ea3e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -819,6 +819,7 @@ int intel_connector_update_modes(struct drm_connector *connector, int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter); void intel_attach_force_audio_property(struct drm_connector *connector); void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
+void intel_attach_force_pfit_property(struct drm_connector *connector);
/* intel_overlay.c */
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index 0e860f3..967e080 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
+++ b/drivers/gpu/drm/i915/intel_modes.c
@@ -28,6 +28,7 @@
#include <linux/fb.h>
#include <drm/drm_edid.h>
#include <drm/drmP.h>
+#include <drm/drm_crtc.h>
#include "intel_drv.h"
#include "i915_drv.h"
@@ -126,3 +127,33 @@ intel_attach_broadcast_rgb_property(struct drm_connector *connector)
drm_object_attach_property(&connector->base, prop, 0); }
+
+static const struct drm_prop_enum_list pfit_names[] = {
+ { PFIT_OFF, "pfit off" },
+ { AUTO_SCALE, "Auto scale" },
+ { PILLAR_BOX, "PillarBox" },
+ { LETTER_BOX, "LetterBox" },
+};
+
+void
+intel_attach_force_pfit_property(struct drm_connector *connector) {
+ struct drm_device *dev = connector->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_property *prop;
+ struct drm_mode_object *obj = &connector->base;
+
+ prop = dev_priv->force_pfit_property;
+ if (prop == NULL) {
+ prop = drm_property_create_enum(dev, 0,
+ "pfit",
+ pfit_names,
+ ARRAY_SIZE(pfit_names));
+ if (prop == NULL)
+ return;
+
+ dev_priv->force_pfit_property = prop;
+ }
+
+ drm_object_attach_property(obj, prop, 0); }
--
1.8.5.2
More information about the Intel-gfx
mailing list