diff options
author | Jani Nikula <jani.nikula@intel.com> | 2013-11-08 09:49:00 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-11-13 05:19:44 -0500 |
commit | f91c15e0808e612abacdb0fbca557b23fe2aa4d1 (patch) | |
tree | 4a0a62b9529289c984f74a63084ca7d12b822326 /drivers/gpu/drm/i915/intel_panel.c | |
parent | 3bd712e545996658f4bc6c61ff99d7bae2a8cfcf (diff) |
drm/i915: use the initialized backlight max value instead of reading it
We now have the max backlight value cached. Use it.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Imre Deak <imre.deak@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 | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index ed6b1eccb7dd..9a55b36370b3 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c | |||
@@ -436,9 +436,6 @@ static u32 vlv_get_max_backlight(struct intel_connector *connector) | |||
436 | return _vlv_get_max_backlight(dev, pipe); | 436 | return _vlv_get_max_backlight(dev, pipe); |
437 | } | 437 | } |
438 | 438 | ||
439 | /* XXX: query mode clock or hardware clock and program max PWM appropriately | ||
440 | * when it's 0. | ||
441 | */ | ||
442 | static u32 intel_panel_get_max_backlight(struct intel_connector *connector) | 439 | static u32 intel_panel_get_max_backlight(struct intel_connector *connector) |
443 | { | 440 | { |
444 | struct drm_device *dev = connector->base.dev; | 441 | struct drm_device *dev = connector->base.dev; |
@@ -466,15 +463,16 @@ static u32 intel_panel_compute_brightness(struct intel_connector *connector, | |||
466 | { | 463 | { |
467 | struct drm_device *dev = connector->base.dev; | 464 | struct drm_device *dev = connector->base.dev; |
468 | struct drm_i915_private *dev_priv = dev->dev_private; | 465 | struct drm_i915_private *dev_priv = dev->dev_private; |
466 | struct intel_panel *panel = &connector->panel; | ||
467 | |||
468 | WARN_ON(panel->backlight.max == 0); | ||
469 | 469 | ||
470 | if (i915_panel_invert_brightness < 0) | 470 | if (i915_panel_invert_brightness < 0) |
471 | return val; | 471 | return val; |
472 | 472 | ||
473 | if (i915_panel_invert_brightness > 0 || | 473 | if (i915_panel_invert_brightness > 0 || |
474 | dev_priv->quirks & QUIRK_INVERT_BRIGHTNESS) { | 474 | dev_priv->quirks & QUIRK_INVERT_BRIGHTNESS) { |
475 | u32 max = intel_panel_get_max_backlight(connector); | 475 | return panel->backlight.max - val; |
476 | if (max) | ||
477 | return max - val; | ||
478 | } | 476 | } |
479 | 477 | ||
480 | return val; | 478 | return val; |
@@ -555,17 +553,15 @@ static void i9xx_set_backlight(struct intel_connector *connector, u32 level) | |||
555 | { | 553 | { |
556 | struct drm_device *dev = connector->base.dev; | 554 | struct drm_device *dev = connector->base.dev; |
557 | struct drm_i915_private *dev_priv = dev->dev_private; | 555 | struct drm_i915_private *dev_priv = dev->dev_private; |
556 | struct intel_panel *panel = &connector->panel; | ||
558 | u32 tmp, mask; | 557 | u32 tmp, mask; |
559 | 558 | ||
559 | WARN_ON(panel->backlight.max == 0); | ||
560 | |||
560 | if (is_backlight_combination_mode(dev)) { | 561 | if (is_backlight_combination_mode(dev)) { |
561 | u32 max = intel_panel_get_max_backlight(connector); | ||
562 | u8 lbpc; | 562 | u8 lbpc; |
563 | 563 | ||
564 | /* we're screwed, but keep behaviour backwards compatible */ | 564 | lbpc = level * 0xfe / panel->backlight.max + 1; |
565 | if (!max) | ||
566 | max = 1; | ||
567 | |||
568 | lbpc = level * 0xfe / max + 1; | ||
569 | level /= lbpc; | 565 | level /= lbpc; |
570 | pci_write_config_byte(dev->pdev, PCI_LBPC, lbpc); | 566 | pci_write_config_byte(dev->pdev, PCI_LBPC, lbpc); |
571 | } | 567 | } |
@@ -620,13 +616,10 @@ void intel_panel_set_backlight(struct intel_connector *connector, u32 level, | |||
620 | 616 | ||
621 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 617 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); |
622 | 618 | ||
623 | freq = intel_panel_get_max_backlight(connector); | 619 | WARN_ON(panel->backlight.max == 0); |
624 | if (!freq) { | ||
625 | /* we are screwed, bail out */ | ||
626 | goto out; | ||
627 | } | ||
628 | 620 | ||
629 | /* scale to hardware, but be careful to not overflow */ | 621 | /* scale to hardware max, but be careful to not overflow */ |
622 | freq = panel->backlight.max; | ||
630 | if (freq < max) | 623 | if (freq < max) |
631 | level = level * freq / max; | 624 | level = level * freq / max; |
632 | else | 625 | else |
@@ -638,7 +631,7 @@ void intel_panel_set_backlight(struct intel_connector *connector, u32 level, | |||
638 | 631 | ||
639 | if (panel->backlight.enabled) | 632 | if (panel->backlight.enabled) |
640 | intel_panel_actually_set_backlight(connector, level); | 633 | intel_panel_actually_set_backlight(connector, level); |
641 | out: | 634 | |
642 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); | 635 | spin_unlock_irqrestore(&dev_priv->backlight_lock, flags); |
643 | } | 636 | } |
644 | 637 | ||
@@ -839,8 +832,13 @@ void intel_panel_enable_backlight(struct intel_connector *connector) | |||
839 | 832 | ||
840 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); | 833 | spin_lock_irqsave(&dev_priv->backlight_lock, flags); |
841 | 834 | ||
835 | /* XXX: transitional, call to make sure freq is set */ | ||
836 | intel_panel_get_max_backlight(connector); | ||
837 | |||
838 | WARN_ON(panel->backlight.max == 0); | ||
839 | |||
842 | if (panel->backlight.level == 0) { | 840 | if (panel->backlight.level == 0) { |
843 | panel->backlight.level = intel_panel_get_max_backlight(connector); | 841 | panel->backlight.level = panel->backlight.max; |
844 | if (panel->backlight.device) | 842 | if (panel->backlight.device) |
845 | panel->backlight.device->props.brightness = | 843 | panel->backlight.device->props.brightness = |
846 | panel->backlight.level; | 844 | panel->backlight.level; |
@@ -960,7 +958,12 @@ static void intel_backlight_device_unregister(struct intel_connector *connector) | |||
960 | } | 958 | } |
961 | #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */ | 959 | #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */ |
962 | 960 | ||
963 | /* Note: The setup hooks can't assume pipe is set! */ | 961 | /* |
962 | * Note: The setup hooks can't assume pipe is set! | ||
963 | * | ||
964 | * XXX: Query mode clock or hardware clock and program PWM modulation frequency | ||
965 | * appropriately when it's 0. Use VBT and/or sane defaults. | ||
966 | */ | ||
964 | static int pch_setup_backlight(struct intel_connector *connector) | 967 | static int pch_setup_backlight(struct intel_connector *connector) |
965 | { | 968 | { |
966 | struct intel_panel *panel = &connector->panel; | 969 | struct intel_panel *panel = &connector->panel; |