aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_panel.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-14 03:39:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-14 03:39:08 -0400
commit2d65a9f48fcdf7866aab6457bc707ca233e0c791 (patch)
treef93e5838d6ac2e59434367f4ff905f7d9c45fc2b /drivers/gpu/drm/i915/intel_panel.c
parentda92da3638a04894afdca8b99e973ddd20268471 (diff)
parentdfda0df3426483cf5fc7441f23f318edbabecb03 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "This is the main git pull for the drm, I pretty much froze major pulls at -rc5/6 time, and haven't had much fallout, so will probably continue doing that. Lots of changes all over, big internal header cleanup to make it clear drm features are legacy things and what are things that modern KMS drivers should be using. Also big move to use the new generic fences in all the TTM drivers. core: atomic prep work, vblank rework changes, allows immediate vblank disables major header reworking and cleanups to better delinate legacy interfaces from what KMS drivers should be using. cursor planes locking fixes ttm: move to generic fences (affects all TTM drivers) ppc64 caching fixes radeon: userptr support, uvd for old asics, reset rework for fence changes better buffer placement changes, dpm feature enablement hdmi audio support fixes intel: Cherryview work, 180 degree rotation, skylake prep work, execlist command submission full ppgtt prep work cursor improvements edid caching, vdd handling improvements nouveau: fence reworking kepler memory clock work gt21x clock work fan control improvements hdmi infoframe fixes DP audio ast: ppc64 fixes caching fix rcar: rcar-du DT support ipuv3: prep work for capture support msm: LVDS support for mdp4, new panel, gpu refactoring exynos: exynos3250 SoC support, drop bad mmap interface, mipi dsi changes, and component match support" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (640 commits) drm/mst: rework payload table allocation to conform better. drm/ast: Fix HW cursor image drm/radeon/kv: add uvd/vce info to dpm debugfs output drm/radeon/ci: add uvd/vce info to dpm debugfs output drm/radeon: export reservation_object from dmabuf to ttm drm/radeon: cope with foreign fences inside the reservation object drm/radeon: cope with foreign fences inside display drm/core: use helper to check driver features drm/radeon/cik: write gfx ucode version to ucode addr reg drm/radeon/si: print full CS when we hit a packet 0 drm/radeon: remove unecessary includes drm/radeon/combios: declare legacy_connector_convert as static drm/radeon/atombios: declare connector convert tables as static drm/radeon: drop btc_get_max_clock_from_voltage_dependency_table drm/radeon/dpm: drop clk/voltage dependency filters for BTC drm/radeon/dpm: drop clk/voltage dependency filters for CI drm/radeon/dpm: drop clk/voltage dependency filters for SI drm/radeon/dpm: drop clk/voltage dependency filters for NI drm/radeon: disable audio when we disable hdmi (v2) drm/radeon: split audio enable between eg and r600 (v2) ...
Diffstat (limited to 'drivers/gpu/drm/i915/intel_panel.c')
-rw-r--r--drivers/gpu/drm/i915/intel_panel.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 8e374449c6b5..18784470a760 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -751,6 +751,8 @@ void intel_panel_disable_backlight(struct intel_connector *connector)
751 751
752 spin_lock_irqsave(&dev_priv->backlight_lock, flags); 752 spin_lock_irqsave(&dev_priv->backlight_lock, flags);
753 753
754 if (panel->backlight.device)
755 panel->backlight.device->props.power = FB_BLANK_POWERDOWN;
754 panel->backlight.enabled = false; 756 panel->backlight.enabled = false;
755 dev_priv->display.disable_backlight(connector); 757 dev_priv->display.disable_backlight(connector);
756 758
@@ -957,6 +959,8 @@ void intel_panel_enable_backlight(struct intel_connector *connector)
957 959
958 dev_priv->display.enable_backlight(connector); 960 dev_priv->display.enable_backlight(connector);
959 panel->backlight.enabled = true; 961 panel->backlight.enabled = true;
962 if (panel->backlight.device)
963 panel->backlight.device->props.power = FB_BLANK_UNBLANK;
960 964
961 spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); 965 spin_unlock_irqrestore(&dev_priv->backlight_lock, flags);
962} 966}
@@ -965,6 +969,7 @@ void intel_panel_enable_backlight(struct intel_connector *connector)
965static int intel_backlight_device_update_status(struct backlight_device *bd) 969static int intel_backlight_device_update_status(struct backlight_device *bd)
966{ 970{
967 struct intel_connector *connector = bl_get_data(bd); 971 struct intel_connector *connector = bl_get_data(bd);
972 struct intel_panel *panel = &connector->panel;
968 struct drm_device *dev = connector->base.dev; 973 struct drm_device *dev = connector->base.dev;
969 974
970 drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); 975 drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
@@ -972,6 +977,23 @@ static int intel_backlight_device_update_status(struct backlight_device *bd)
972 bd->props.brightness, bd->props.max_brightness); 977 bd->props.brightness, bd->props.max_brightness);
973 intel_panel_set_backlight(connector, bd->props.brightness, 978 intel_panel_set_backlight(connector, bd->props.brightness,
974 bd->props.max_brightness); 979 bd->props.max_brightness);
980
981 /*
982 * Allow flipping bl_power as a sub-state of enabled. Sadly the
983 * backlight class device does not make it easy to to differentiate
984 * between callbacks for brightness and bl_power, so our backlight_power
985 * callback needs to take this into account.
986 */
987 if (panel->backlight.enabled) {
988 if (panel->backlight_power) {
989 bool enable = bd->props.power == FB_BLANK_UNBLANK &&
990 bd->props.brightness != 0;
991 panel->backlight_power(connector, enable);
992 }
993 } else {
994 bd->props.power = FB_BLANK_POWERDOWN;
995 }
996
975 drm_modeset_unlock(&dev->mode_config.connection_mutex); 997 drm_modeset_unlock(&dev->mode_config.connection_mutex);
976 return 0; 998 return 0;
977} 999}
@@ -1023,6 +1045,11 @@ static int intel_backlight_device_register(struct intel_connector *connector)
1023 panel->backlight.level, 1045 panel->backlight.level,
1024 props.max_brightness); 1046 props.max_brightness);
1025 1047
1048 if (panel->backlight.enabled)
1049 props.power = FB_BLANK_UNBLANK;
1050 else
1051 props.power = FB_BLANK_POWERDOWN;
1052
1026 /* 1053 /*
1027 * Note: using the same name independent of the connector prevents 1054 * Note: using the same name independent of the connector prevents
1028 * registration of multiple backlight devices in the driver. 1055 * registration of multiple backlight devices in the driver.
@@ -1203,7 +1230,7 @@ static int vlv_setup_backlight(struct intel_connector *connector)
1203 enum pipe pipe; 1230 enum pipe pipe;
1204 u32 ctl, ctl2, val; 1231 u32 ctl, ctl2, val;
1205 1232
1206 for_each_pipe(pipe) { 1233 for_each_pipe(dev_priv, pipe) {
1207 u32 cur_val = I915_READ(VLV_BLC_PWM_CTL(pipe)); 1234 u32 cur_val = I915_READ(VLV_BLC_PWM_CTL(pipe));
1208 1235
1209 /* Skip if the modulation freq is already set */ 1236 /* Skip if the modulation freq is already set */