diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-09-15 08:35:09 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-09-19 08:43:15 -0400 |
commit | 07f11d49f120dfffb5b8603dd3863e903d50c456 (patch) | |
tree | a75e9a11a18c8dc9ea028f4cfad53d6de523ccdf /drivers/gpu/drm/i915/intel_panel.c | |
parent | 4dc49272bdfc11cdefb41175771ee811e363dfc7 (diff) |
drm/i915: Convert backlight_lock to a mutex
Originally the irq safe spinlock was required because of asle
interrupts. But since
commit 91a60f20712179e56b7a6c3d332a5f6f9a54aa11
Author: Jani Nikula <jani.nikula@intel.com>
Date: Thu Oct 31 18:55:48 2013 +0200
drm/i915: move opregion asle request handling to a work queue
there's no need for this any more. So switch to the simpler mutex.
v2: Cite the right commit, spotted by Jani.
Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_panel.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_panel.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index 18784470a760..f17ada3742de 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c | |||
@@ -538,14 +538,13 @@ static u32 intel_panel_get_backlight(struct intel_connector *connector) | |||
538 | struct drm_device *dev = connector->base.dev; | 538 | struct drm_device *dev = connector->base.dev; |
539 | struct drm_i915_private *dev_priv = dev->dev_private; | 539 | struct drm_i915_private *dev_priv = dev->dev_private; |
540 | u32 val; | 540 | u32 val; |
541 | unsigned long flags; | ||
542 | 541 | ||
543 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 542 | mutex_lock(&dev_priv->backlight_lock); |
544 | 543 | ||
545 | val = dev_priv->display.get_backlight(connector); | 544 | val = dev_priv->display.get_backlight(connector); |
546 | val = intel_panel_compute_brightness(connector, val); | 545 | val = intel_panel_compute_brightness(connector, val); |
547 | 546 | ||
548 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 547 | mutex_unlock(&dev_priv->backlight_lock); |
549 | 548 | ||
550 | DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val); | 549 | DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val); |
551 | return val; | 550 | return val; |
@@ -629,12 +628,11 @@ static void intel_panel_set_backlight(struct intel_connector *connector, | |||
629 | struct intel_panel *panel = &connector->panel; | 628 | struct intel_panel *panel = &connector->panel; |
630 | enum pipe pipe = intel_get_pipe_from_connector(connector); | 629 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
631 | u32 hw_level; | 630 | u32 hw_level; |
632 | unsigned long flags; | ||
633 | 631 | ||
634 | if (!panel->backlight.present || pipe == INVALID_PIPE) | 632 | if (!panel->backlight.present || pipe == INVALID_PIPE) |
635 | return; | 633 | return; |
636 | 634 | ||
637 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 635 | mutex_lock(&dev_priv->backlight_lock); |
638 | 636 | ||
639 | WARN_ON(panel->backlight.max == 0); | 637 | WARN_ON(panel->backlight.max == 0); |
640 | 638 | ||
@@ -644,7 +642,7 @@ static void intel_panel_set_backlight(struct intel_connector *connector, | |||
644 | if (panel->backlight.enabled) | 642 | if (panel->backlight.enabled) |
645 | intel_panel_actually_set_backlight(connector, hw_level); | 643 | intel_panel_actually_set_backlight(connector, hw_level); |
646 | 644 | ||
647 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 645 | mutex_unlock(&dev_priv->backlight_lock); |
648 | } | 646 | } |
649 | 647 | ||
650 | /* set backlight brightness to level in range [0..max], assuming hw min is | 648 | /* set backlight brightness to level in range [0..max], assuming hw min is |
@@ -658,12 +656,11 @@ void intel_panel_set_backlight_acpi(struct intel_connector *connector, | |||
658 | struct intel_panel *panel = &connector->panel; | 656 | struct intel_panel *panel = &connector->panel; |
659 | enum pipe pipe = intel_get_pipe_from_connector(connector); | 657 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
660 | u32 hw_level; | 658 | u32 hw_level; |
661 | unsigned long flags; | ||
662 | 659 | ||
663 | if (!panel->backlight.present || pipe == INVALID_PIPE) | 660 | if (!panel->backlight.present || pipe == INVALID_PIPE) |
664 | return; | 661 | return; |
665 | 662 | ||
666 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 663 | mutex_lock(&dev_priv->backlight_lock); |
667 | 664 | ||
668 | WARN_ON(panel->backlight.max == 0); | 665 | WARN_ON(panel->backlight.max == 0); |
669 | 666 | ||
@@ -679,7 +676,7 @@ void intel_panel_set_backlight_acpi(struct intel_connector *connector, | |||
679 | if (panel->backlight.enabled) | 676 | if (panel->backlight.enabled) |
680 | intel_panel_actually_set_backlight(connector, hw_level); | 677 | intel_panel_actually_set_backlight(connector, hw_level); |
681 | 678 | ||
682 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 679 | mutex_unlock(&dev_priv->backlight_lock); |
683 | } | 680 | } |
684 | 681 | ||
685 | static void pch_disable_backlight(struct intel_connector *connector) | 682 | static void pch_disable_backlight(struct intel_connector *connector) |
@@ -733,7 +730,6 @@ void intel_panel_disable_backlight(struct intel_connector *connector) | |||
733 | struct drm_i915_private *dev_priv = dev->dev_private; | 730 | struct drm_i915_private *dev_priv = dev->dev_private; |
734 | struct intel_panel *panel = &connector->panel; | 731 | struct intel_panel *panel = &connector->panel; |
735 | enum pipe pipe = intel_get_pipe_from_connector(connector); | 732 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
736 | unsigned long flags; | ||
737 | 733 | ||
738 | if (!panel->backlight.present || pipe == INVALID_PIPE) | 734 | if (!panel->backlight.present || pipe == INVALID_PIPE) |
739 | return; | 735 | return; |
@@ -749,14 +745,14 @@ void intel_panel_disable_backlight(struct intel_connector *connector) | |||
749 | return; | 745 | return; |
750 | } | 746 | } |
751 | 747 | ||
752 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 748 | mutex_lock(&dev_priv->backlight_lock); |
753 | 749 | ||
754 | if (panel->backlight.device) | 750 | if (panel->backlight.device) |
755 | panel->backlight.device->props.power = FB_BLANK_POWERDOWN; | 751 | panel->backlight.device->props.power = FB_BLANK_POWERDOWN; |
756 | panel->backlight.enabled = false; | 752 | panel->backlight.enabled = false; |
757 | dev_priv->display.disable_backlight(connector); | 753 | dev_priv->display.disable_backlight(connector); |
758 | 754 | ||
759 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 755 | mutex_unlock(&dev_priv->backlight_lock); |
760 | } | 756 | } |
761 | 757 | ||
762 | static void bdw_enable_backlight(struct intel_connector *connector) | 758 | static void bdw_enable_backlight(struct intel_connector *connector) |
@@ -937,14 +933,13 @@ void intel_panel_enable_backlight(struct intel_connector *connector) | |||
937 | struct drm_i915_private *dev_priv = dev->dev_private; | 933 | struct drm_i915_private *dev_priv = dev->dev_private; |
938 | struct intel_panel *panel = &connector->panel; | 934 | struct intel_panel *panel = &connector->panel; |
939 | enum pipe pipe = intel_get_pipe_from_connector(connector); | 935 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
940 | unsigned long flags; | ||
941 | 936 | ||
942 | if (!panel->backlight.present || pipe == INVALID_PIPE) | 937 | if (!panel->backlight.present || pipe == INVALID_PIPE) |
943 | return; | 938 | return; |
944 | 939 | ||
945 | DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe)); | 940 | DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe)); |
946 | 941 | ||
947 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 942 | mutex_lock(&dev_priv->backlight_lock); |
948 | 943 | ||
949 | WARN_ON(panel->backlight.max == 0); | 944 | WARN_ON(panel->backlight.max == 0); |
950 | 945 | ||
@@ -962,7 +957,7 @@ void intel_panel_enable_backlight(struct intel_connector *connector) | |||
962 | if (panel->backlight.device) | 957 | if (panel->backlight.device) |
963 | panel->backlight.device->props.power = FB_BLANK_UNBLANK; | 958 | panel->backlight.device->props.power = FB_BLANK_UNBLANK; |
964 | 959 | ||
965 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 960 | mutex_unlock(&dev_priv->backlight_lock); |
966 | } | 961 | } |
967 | 962 | ||
968 | #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) | 963 | #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) |
@@ -1267,7 +1262,6 @@ int intel_panel_setup_backlight(struct drm_connector *connector) | |||
1267 | struct drm_i915_private *dev_priv = dev->dev_private; | 1262 | struct drm_i915_private *dev_priv = dev->dev_private; |
1268 | struct intel_connector *intel_connector = to_intel_connector(connector); | 1263 | struct intel_connector *intel_connector = to_intel_connector(connector); |
1269 | struct intel_panel *panel = &intel_connector->panel; | 1264 | struct intel_panel *panel = &intel_connector->panel; |
1270 | unsigned long flags; | ||
1271 | int ret; | 1265 | int ret; |
1272 | 1266 | ||
1273 | if (!dev_priv->vbt.backlight.present) { | 1267 | if (!dev_priv->vbt.backlight.present) { |
@@ -1280,9 +1274,9 @@ int intel_panel_setup_backlight(struct drm_connector *connector) | |||
1280 | } | 1274 | } |
1281 | 1275 | ||
1282 | /* set level and max in panel struct */ | 1276 | /* set level and max in panel struct */ |
1283 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 1277 | mutex_lock(&dev_priv->backlight_lock); |
1284 | ret = dev_priv->display.setup_backlight(intel_connector); | 1278 | ret = dev_priv->display.setup_backlight(intel_connector); |
1285 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 1279 | mutex_unlock(&dev_priv->backlight_lock); |
1286 | 1280 | ||
1287 | if (ret) { | 1281 | if (ret) { |
1288 | DRM_DEBUG_KMS("failed to setup backlight for connector %s\n", | 1282 | DRM_DEBUG_KMS("failed to setup backlight for connector %s\n", |