diff options
author | Deepak M <m.deepak@intel.com> | 2016-04-26 16:14:26 +0300 |
---|---|---|
committer | Jani Nikula <jani.nikula@intel.com> | 2016-05-17 16:12:39 +0300 |
commit | 1ecc1c6cb7d3549d8854b0d6ac5a86a622ca6fa3 (patch) | |
tree | 929fe0744596f8bf26f1a8b237507234b8942dfa /drivers/gpu/drm/i915/intel_dsi.c | |
parent | 90198355b83c79e2158ec591085858b191f08502 (diff) | |
download | op-kernel-dev-1ecc1c6cb7d3549d8854b0d6ac5a86a622ca6fa3.zip op-kernel-dev-1ecc1c6cb7d3549d8854b0d6ac5a86a622ca6fa3.tar.gz |
drm/i915/dsi: CABC support for Panel PWM backlight control
In CABC (Content Adaptive Brightness Control) content grey level
scale can be increased while simultaneously decreasing
brightness of the backlight to achieve same perceived brightness.
The CABC is not standardized and panel vendors are free to follow
their implementation. The CABC implementaion here assumes that the
panels use standard SW register for control.
CABC is supported only when the PWM source for backlight is
from the panel.
v2 by Jani: rebase, renames, check cabc support earlier, etc.
Signed-off-by: Deepak M <m.deepak@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/883faade74d2e598b143221ccc7df6daf4393a13.1461676337.git.jani.nikula@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dsi.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dsi.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index edb6bea..4009618 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c @@ -1489,11 +1489,28 @@ void intel_dsi_init(struct drm_device *dev) intel_dsi->dcs_backlight_ports = BIT(PORT_A) | BIT(PORT_C); break; } + + switch (dev_priv->vbt.dsi.config->dl_dcs_cabc_ports) { + case DL_DCS_PORT_A: + intel_dsi->dcs_cabc_ports = BIT(PORT_A); + break; + case DL_DCS_PORT_C: + intel_dsi->dcs_cabc_ports = BIT(PORT_C); + break; + default: + case DL_DCS_PORT_A_AND_C: + intel_dsi->dcs_cabc_ports = BIT(PORT_A) | BIT(PORT_C); + break; + } } else { intel_dsi->ports = BIT(port); intel_dsi->dcs_backlight_ports = BIT(port); + intel_dsi->dcs_cabc_ports = BIT(port); } + if (!dev_priv->vbt.dsi.config->cabc_supported) + intel_dsi->dcs_cabc_ports = 0; + /* Create a DSI host (and a device) for each port. */ for_each_dsi_port(port, intel_dsi->ports) { struct intel_dsi_host *host; |