Rev 6283 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6283 | Rev 6937 | ||
---|---|---|---|
Line 459... | Line 459... | ||
459 | } |
459 | } |
Line 460... | Line 460... | ||
460 | 460 | ||
461 | static u32 intel_panel_compute_brightness(struct intel_connector *connector, |
461 | static u32 intel_panel_compute_brightness(struct intel_connector *connector, |
462 | u32 val) |
462 | u32 val) |
463 | { |
- | |
464 | struct drm_device *dev = connector->base.dev; |
463 | { |
465 | struct drm_i915_private *dev_priv = dev->dev_private; |
464 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 466... | Line 465... | ||
466 | struct intel_panel *panel = &connector->panel; |
465 | struct intel_panel *panel = &connector->panel; |
Line 467... | Line 466... | ||
467 | 466 | ||
Line 478... | Line 477... | ||
478 | return val; |
477 | return val; |
479 | } |
478 | } |
Line 480... | Line 479... | ||
480 | 479 | ||
481 | static u32 lpt_get_backlight(struct intel_connector *connector) |
480 | static u32 lpt_get_backlight(struct intel_connector *connector) |
482 | { |
- | |
483 | struct drm_device *dev = connector->base.dev; |
481 | { |
Line 484... | Line 482... | ||
484 | struct drm_i915_private *dev_priv = dev->dev_private; |
482 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
485 | 483 | ||
Line 486... | Line 484... | ||
486 | return I915_READ(BLC_PWM_PCH_CTL2) & BACKLIGHT_DUTY_CYCLE_MASK; |
484 | return I915_READ(BLC_PWM_PCH_CTL2) & BACKLIGHT_DUTY_CYCLE_MASK; |
487 | } |
485 | } |
488 | - | ||
489 | static u32 pch_get_backlight(struct intel_connector *connector) |
486 | |
Line 490... | Line 487... | ||
490 | { |
487 | static u32 pch_get_backlight(struct intel_connector *connector) |
491 | struct drm_device *dev = connector->base.dev; |
488 | { |
Line 492... | Line 489... | ||
492 | struct drm_i915_private *dev_priv = dev->dev_private; |
489 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
493 | 490 | ||
494 | return I915_READ(BLC_PWM_CPU_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; |
- | |
495 | } |
491 | return I915_READ(BLC_PWM_CPU_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; |
496 | 492 | } |
|
497 | static u32 i9xx_get_backlight(struct intel_connector *connector) |
493 | |
Line 498... | Line 494... | ||
498 | { |
494 | static u32 i9xx_get_backlight(struct intel_connector *connector) |
499 | struct drm_device *dev = connector->base.dev; |
495 | { |
500 | struct drm_i915_private *dev_priv = dev->dev_private; |
496 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 501... | Line 497... | ||
501 | struct intel_panel *panel = &connector->panel; |
497 | struct intel_panel *panel = &connector->panel; |
502 | u32 val; |
498 | u32 val; |
Line 503... | Line 499... | ||
503 | 499 | ||
504 | val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; |
500 | val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK; |
505 | if (INTEL_INFO(dev)->gen < 4) |
501 | if (INTEL_INFO(dev_priv)->gen < 4) |
Line 506... | Line 502... | ||
506 | val >>= 1; |
502 | val >>= 1; |
507 | 503 | ||
Line 508... | Line 504... | ||
508 | if (panel->backlight.combination_mode) { |
504 | if (panel->backlight.combination_mode) { |
509 | u8 lbpc; |
505 | u8 lbpc; |
510 | - | ||
511 | pci_read_config_byte(dev->pdev, PCI_LBPC, &lbpc); |
- | |
512 | val *= lbpc; |
506 | |
513 | } |
507 | pci_read_config_byte(dev_priv->dev->pdev, PCI_LBPC, &lbpc); |
Line 514... | Line 508... | ||
514 | 508 | val *= lbpc; |
|
515 | return val; |
509 | } |
Line 516... | Line 510... | ||
516 | } |
510 | |
517 | 511 | return val; |
|
518 | static u32 _vlv_get_backlight(struct drm_device *dev, enum pipe pipe) |
512 | } |
519 | { |
513 | |
Line 520... | Line 514... | ||
520 | struct drm_i915_private *dev_priv = dev->dev_private; |
514 | static u32 _vlv_get_backlight(struct drm_i915_private *dev_priv, enum pipe pipe) |
521 | 515 | { |
|
Line 522... | Line 516... | ||
522 | if (WARN_ON(pipe != PIPE_A && pipe != PIPE_B)) |
516 | if (WARN_ON(pipe != PIPE_A && pipe != PIPE_B)) |
523 | return 0; |
517 | return 0; |
524 | 518 | ||
525 | return I915_READ(VLV_BLC_PWM_CTL(pipe)) & BACKLIGHT_DUTY_CYCLE_MASK; |
519 | return I915_READ(VLV_BLC_PWM_CTL(pipe)) & BACKLIGHT_DUTY_CYCLE_MASK; |
526 | } |
- | |
Line 527... | Line 520... | ||
527 | 520 | } |
|
528 | static u32 vlv_get_backlight(struct intel_connector *connector) |
521 | |
Line 529... | Line 522... | ||
529 | { |
522 | static u32 vlv_get_backlight(struct intel_connector *connector) |
Line 551... | Line 544... | ||
551 | return DIV_ROUND_UP(duty_ns * 100, CRC_PMIC_PWM_PERIOD_NS); |
544 | return DIV_ROUND_UP(duty_ns * 100, CRC_PMIC_PWM_PERIOD_NS); |
552 | } |
545 | } |
Line 553... | Line 546... | ||
553 | 546 | ||
554 | static u32 intel_panel_get_backlight(struct intel_connector *connector) |
547 | static u32 intel_panel_get_backlight(struct intel_connector *connector) |
555 | { |
- | |
556 | struct drm_device *dev = connector->base.dev; |
548 | { |
557 | struct drm_i915_private *dev_priv = dev->dev_private; |
549 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
558 | struct intel_panel *panel = &connector->panel; |
550 | struct intel_panel *panel = &connector->panel; |
Line 559... | Line 551... | ||
559 | u32 val = 0; |
551 | u32 val = 0; |
Line 571... | Line 563... | ||
571 | return val; |
563 | return val; |
572 | } |
564 | } |
Line 573... | Line 565... | ||
573 | 565 | ||
574 | static void lpt_set_backlight(struct intel_connector *connector, u32 level) |
566 | static void lpt_set_backlight(struct intel_connector *connector, u32 level) |
575 | { |
- | |
576 | struct drm_device *dev = connector->base.dev; |
567 | { |
577 | struct drm_i915_private *dev_priv = dev->dev_private; |
568 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
578 | u32 val = I915_READ(BLC_PWM_PCH_CTL2) & ~BACKLIGHT_DUTY_CYCLE_MASK; |
569 | u32 val = I915_READ(BLC_PWM_PCH_CTL2) & ~BACKLIGHT_DUTY_CYCLE_MASK; |
579 | I915_WRITE(BLC_PWM_PCH_CTL2, val | level); |
570 | I915_WRITE(BLC_PWM_PCH_CTL2, val | level); |
Line 580... | Line 571... | ||
580 | } |
571 | } |
581 | 572 | ||
582 | static void pch_set_backlight(struct intel_connector *connector, u32 level) |
- | |
583 | { |
573 | static void pch_set_backlight(struct intel_connector *connector, u32 level) |
584 | struct drm_device *dev = connector->base.dev; |
574 | { |
Line 585... | Line 575... | ||
585 | struct drm_i915_private *dev_priv = dev->dev_private; |
575 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
586 | u32 tmp; |
576 | u32 tmp; |
587 | 577 | ||
Line 588... | Line 578... | ||
588 | tmp = I915_READ(BLC_PWM_CPU_CTL) & ~BACKLIGHT_DUTY_CYCLE_MASK; |
578 | tmp = I915_READ(BLC_PWM_CPU_CTL) & ~BACKLIGHT_DUTY_CYCLE_MASK; |
589 | I915_WRITE(BLC_PWM_CPU_CTL, tmp | level); |
579 | I915_WRITE(BLC_PWM_CPU_CTL, tmp | level); |
590 | } |
- | |
591 | 580 | } |
|
592 | static void i9xx_set_backlight(struct intel_connector *connector, u32 level) |
581 | |
593 | { |
582 | static void i9xx_set_backlight(struct intel_connector *connector, u32 level) |
Line 594... | Line 583... | ||
594 | struct drm_device *dev = connector->base.dev; |
583 | { |
Line 595... | Line 584... | ||
595 | struct drm_i915_private *dev_priv = dev->dev_private; |
584 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
596 | struct intel_panel *panel = &connector->panel; |
585 | struct intel_panel *panel = &connector->panel; |
Line 597... | Line 586... | ||
597 | u32 tmp, mask; |
586 | u32 tmp, mask; |
598 | 587 | ||
599 | WARN_ON(panel->backlight.max == 0); |
588 | WARN_ON(panel->backlight.max == 0); |
600 | 589 | ||
Line 601... | Line 590... | ||
601 | if (panel->backlight.combination_mode) { |
590 | if (panel->backlight.combination_mode) { |
602 | u8 lbpc; |
591 | u8 lbpc; |
603 | 592 | ||
604 | lbpc = level * 0xfe / panel->backlight.max + 1; |
593 | lbpc = level * 0xfe / panel->backlight.max + 1; |
605 | level /= lbpc; |
594 | level /= lbpc; |
606 | pci_write_config_byte(dev->pdev, PCI_LBPC, lbpc); |
595 | pci_write_config_byte(dev_priv->dev->pdev, PCI_LBPC, lbpc); |
Line 617... | Line 606... | ||
617 | I915_WRITE(BLC_PWM_CTL, tmp | level); |
606 | I915_WRITE(BLC_PWM_CTL, tmp | level); |
618 | } |
607 | } |
Line 619... | Line 608... | ||
619 | 608 | ||
620 | static void vlv_set_backlight(struct intel_connector *connector, u32 level) |
609 | static void vlv_set_backlight(struct intel_connector *connector, u32 level) |
621 | { |
- | |
622 | struct drm_device *dev = connector->base.dev; |
610 | { |
623 | struct drm_i915_private *dev_priv = dev->dev_private; |
611 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
624 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
612 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
Line 625... | Line 613... | ||
625 | u32 tmp; |
613 | u32 tmp; |
626 | 614 | ||
Line 631... | Line 619... | ||
631 | I915_WRITE(VLV_BLC_PWM_CTL(pipe), tmp | level); |
619 | I915_WRITE(VLV_BLC_PWM_CTL(pipe), tmp | level); |
632 | } |
620 | } |
Line 633... | Line 621... | ||
633 | 621 | ||
634 | static void bxt_set_backlight(struct intel_connector *connector, u32 level) |
622 | static void bxt_set_backlight(struct intel_connector *connector, u32 level) |
635 | { |
- | |
636 | struct drm_device *dev = connector->base.dev; |
623 | { |
637 | struct drm_i915_private *dev_priv = dev->dev_private; |
624 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 638... | Line 625... | ||
638 | struct intel_panel *panel = &connector->panel; |
625 | struct intel_panel *panel = &connector->panel; |
639 | 626 | ||
Line 661... | Line 648... | ||
661 | 648 | ||
662 | /* set backlight brightness to level in range [0..max], scaling wrt hw min */ |
649 | /* set backlight brightness to level in range [0..max], scaling wrt hw min */ |
663 | static void intel_panel_set_backlight(struct intel_connector *connector, |
650 | static void intel_panel_set_backlight(struct intel_connector *connector, |
664 | u32 user_level, u32 user_max) |
651 | u32 user_level, u32 user_max) |
665 | { |
- | |
666 | struct drm_device *dev = connector->base.dev; |
652 | { |
667 | struct drm_i915_private *dev_priv = dev->dev_private; |
653 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
668 | struct intel_panel *panel = &connector->panel; |
654 | struct intel_panel *panel = &connector->panel; |
Line 669... | Line 655... | ||
669 | u32 hw_level; |
655 | u32 hw_level; |
670 | 656 | ||
Line 688... | Line 674... | ||
688 | * respected. |
674 | * respected. |
689 | */ |
675 | */ |
690 | void intel_panel_set_backlight_acpi(struct intel_connector *connector, |
676 | void intel_panel_set_backlight_acpi(struct intel_connector *connector, |
691 | u32 user_level, u32 user_max) |
677 | u32 user_level, u32 user_max) |
692 | { |
678 | { |
693 | struct drm_device *dev = connector->base.dev; |
- | |
694 | struct drm_i915_private *dev_priv = dev->dev_private; |
679 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
695 | struct intel_panel *panel = &connector->panel; |
680 | struct intel_panel *panel = &connector->panel; |
696 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
681 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
697 | u32 hw_level; |
682 | u32 hw_level; |
Line 698... | Line 683... | ||
698 | 683 | ||
Line 719... | Line 704... | ||
719 | mutex_unlock(&dev_priv->backlight_lock); |
704 | mutex_unlock(&dev_priv->backlight_lock); |
720 | } |
705 | } |
Line 721... | Line 706... | ||
721 | 706 | ||
722 | static void lpt_disable_backlight(struct intel_connector *connector) |
707 | static void lpt_disable_backlight(struct intel_connector *connector) |
723 | { |
- | |
724 | struct drm_device *dev = connector->base.dev; |
708 | { |
725 | struct drm_i915_private *dev_priv = dev->dev_private; |
709 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 726... | Line 710... | ||
726 | u32 tmp; |
710 | u32 tmp; |
Line 727... | Line 711... | ||
727 | 711 | ||
Line 745... | Line 729... | ||
745 | I915_WRITE(BLC_PWM_PCH_CTL1, tmp & ~BLM_PCH_PWM_ENABLE); |
729 | I915_WRITE(BLC_PWM_PCH_CTL1, tmp & ~BLM_PCH_PWM_ENABLE); |
746 | } |
730 | } |
Line 747... | Line 731... | ||
747 | 731 | ||
748 | static void pch_disable_backlight(struct intel_connector *connector) |
732 | static void pch_disable_backlight(struct intel_connector *connector) |
749 | { |
- | |
750 | struct drm_device *dev = connector->base.dev; |
733 | { |
751 | struct drm_i915_private *dev_priv = dev->dev_private; |
734 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 752... | Line 735... | ||
752 | u32 tmp; |
735 | u32 tmp; |
Line 753... | Line 736... | ||
753 | 736 | ||
Line 765... | Line 748... | ||
765 | intel_panel_actually_set_backlight(connector, 0); |
748 | intel_panel_actually_set_backlight(connector, 0); |
766 | } |
749 | } |
Line 767... | Line 750... | ||
767 | 750 | ||
768 | static void i965_disable_backlight(struct intel_connector *connector) |
751 | static void i965_disable_backlight(struct intel_connector *connector) |
769 | { |
- | |
770 | struct drm_device *dev = connector->base.dev; |
752 | { |
771 | struct drm_i915_private *dev_priv = dev->dev_private; |
753 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 772... | Line 754... | ||
772 | u32 tmp; |
754 | u32 tmp; |
Line 773... | Line 755... | ||
773 | 755 | ||
774 | intel_panel_actually_set_backlight(connector, 0); |
756 | intel_panel_actually_set_backlight(connector, 0); |
775 | 757 | ||
Line 776... | Line 758... | ||
776 | tmp = I915_READ(BLC_PWM_CTL2); |
758 | tmp = I915_READ(BLC_PWM_CTL2); |
777 | I915_WRITE(BLC_PWM_CTL2, tmp & ~BLM_PWM_ENABLE); |
759 | I915_WRITE(BLC_PWM_CTL2, tmp & ~BLM_PWM_ENABLE); |
778 | } |
- | |
779 | 760 | } |
|
780 | static void vlv_disable_backlight(struct intel_connector *connector) |
761 | |
781 | { |
762 | static void vlv_disable_backlight(struct intel_connector *connector) |
Line 782... | Line 763... | ||
782 | struct drm_device *dev = connector->base.dev; |
763 | { |
783 | struct drm_i915_private *dev_priv = dev->dev_private; |
764 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 793... | Line 774... | ||
793 | I915_WRITE(VLV_BLC_PWM_CTL2(pipe), tmp & ~BLM_PWM_ENABLE); |
774 | I915_WRITE(VLV_BLC_PWM_CTL2(pipe), tmp & ~BLM_PWM_ENABLE); |
794 | } |
775 | } |
Line 795... | Line 776... | ||
795 | 776 | ||
796 | static void bxt_disable_backlight(struct intel_connector *connector) |
777 | static void bxt_disable_backlight(struct intel_connector *connector) |
797 | { |
- | |
798 | struct drm_device *dev = connector->base.dev; |
778 | { |
799 | struct drm_i915_private *dev_priv = dev->dev_private; |
779 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
800 | struct intel_panel *panel = &connector->panel; |
780 | struct intel_panel *panel = &connector->panel; |
Line 801... | Line 781... | ||
801 | u32 tmp, val; |
781 | u32 tmp, val; |
Line 823... | Line 803... | ||
823 | pwm_disable(panel->backlight.pwm); |
803 | pwm_disable(panel->backlight.pwm); |
824 | } |
804 | } |
Line 825... | Line 805... | ||
825 | 805 | ||
826 | void intel_panel_disable_backlight(struct intel_connector *connector) |
806 | void intel_panel_disable_backlight(struct intel_connector *connector) |
827 | { |
- | |
828 | struct drm_device *dev = connector->base.dev; |
807 | { |
829 | struct drm_i915_private *dev_priv = dev->dev_private; |
808 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 830... | Line 809... | ||
830 | struct intel_panel *panel = &connector->panel; |
809 | struct intel_panel *panel = &connector->panel; |
831 | 810 | ||
Line 836... | Line 815... | ||
836 | * Do not disable backlight on the vga_switcheroo path. When switching |
815 | * Do not disable backlight on the vga_switcheroo path. When switching |
837 | * away from i915, the other client may depend on i915 to handle the |
816 | * away from i915, the other client may depend on i915 to handle the |
838 | * backlight. This will leave the backlight on unnecessarily when |
817 | * backlight. This will leave the backlight on unnecessarily when |
839 | * another client is not activated. |
818 | * another client is not activated. |
840 | */ |
819 | */ |
841 | if (dev->switch_power_state == DRM_SWITCH_POWER_CHANGING) { |
820 | if (dev_priv->dev->switch_power_state == DRM_SWITCH_POWER_CHANGING) { |
842 | DRM_DEBUG_DRIVER("Skipping backlight disable on vga switch\n"); |
821 | DRM_DEBUG_DRIVER("Skipping backlight disable on vga switch\n"); |
843 | return; |
822 | return; |
844 | } |
823 | } |
Line 845... | Line 824... | ||
845 | 824 | ||
Line 851... | Line 830... | ||
851 | mutex_unlock(&dev_priv->backlight_lock); |
830 | mutex_unlock(&dev_priv->backlight_lock); |
852 | } |
831 | } |
Line 853... | Line 832... | ||
853 | 832 | ||
854 | static void lpt_enable_backlight(struct intel_connector *connector) |
833 | static void lpt_enable_backlight(struct intel_connector *connector) |
855 | { |
- | |
856 | struct drm_device *dev = connector->base.dev; |
834 | { |
857 | struct drm_i915_private *dev_priv = dev->dev_private; |
835 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
858 | struct intel_panel *panel = &connector->panel; |
836 | struct intel_panel *panel = &connector->panel; |
Line 859... | Line 837... | ||
859 | u32 pch_ctl1, pch_ctl2; |
837 | u32 pch_ctl1, pch_ctl2; |
860 | 838 | ||
Line 884... | Line 862... | ||
884 | intel_panel_actually_set_backlight(connector, panel->backlight.level); |
862 | intel_panel_actually_set_backlight(connector, panel->backlight.level); |
885 | } |
863 | } |
Line 886... | Line 864... | ||
886 | 864 | ||
887 | static void pch_enable_backlight(struct intel_connector *connector) |
865 | static void pch_enable_backlight(struct intel_connector *connector) |
888 | { |
- | |
889 | struct drm_device *dev = connector->base.dev; |
866 | { |
890 | struct drm_i915_private *dev_priv = dev->dev_private; |
867 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
891 | struct intel_panel *panel = &connector->panel; |
868 | struct intel_panel *panel = &connector->panel; |
892 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
869 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
893 | enum transcoder cpu_transcoder = |
870 | enum transcoder cpu_transcoder = |
894 | intel_pipe_to_cpu_transcoder(dev_priv, pipe); |
871 | intel_pipe_to_cpu_transcoder(dev_priv, pipe); |
Line 931... | Line 908... | ||
931 | I915_WRITE(BLC_PWM_PCH_CTL1, pch_ctl1 | BLM_PCH_PWM_ENABLE); |
908 | I915_WRITE(BLC_PWM_PCH_CTL1, pch_ctl1 | BLM_PCH_PWM_ENABLE); |
932 | } |
909 | } |
Line 933... | Line 910... | ||
933 | 910 | ||
934 | static void i9xx_enable_backlight(struct intel_connector *connector) |
911 | static void i9xx_enable_backlight(struct intel_connector *connector) |
935 | { |
- | |
936 | struct drm_device *dev = connector->base.dev; |
912 | { |
937 | struct drm_i915_private *dev_priv = dev->dev_private; |
913 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
938 | struct intel_panel *panel = &connector->panel; |
914 | struct intel_panel *panel = &connector->panel; |
Line 939... | Line 915... | ||
939 | u32 ctl, freq; |
915 | u32 ctl, freq; |
940 | 916 | ||
Line 949... | Line 925... | ||
949 | freq /= 0xff; |
925 | freq /= 0xff; |
Line 950... | Line 926... | ||
950 | 926 | ||
951 | ctl = freq << 17; |
927 | ctl = freq << 17; |
952 | if (panel->backlight.combination_mode) |
928 | if (panel->backlight.combination_mode) |
953 | ctl |= BLM_LEGACY_MODE; |
929 | ctl |= BLM_LEGACY_MODE; |
954 | if (IS_PINEVIEW(dev) && panel->backlight.active_low_pwm) |
930 | if (IS_PINEVIEW(dev_priv) && panel->backlight.active_low_pwm) |
Line 955... | Line 931... | ||
955 | ctl |= BLM_POLARITY_PNV; |
931 | ctl |= BLM_POLARITY_PNV; |
956 | 932 | ||
Line 963... | Line 939... | ||
963 | /* |
939 | /* |
964 | * Needed to enable backlight on some 855gm models. BLC_HIST_CTL is |
940 | * Needed to enable backlight on some 855gm models. BLC_HIST_CTL is |
965 | * 855gm only, but checking for gen2 is safe, as 855gm is the only gen2 |
941 | * 855gm only, but checking for gen2 is safe, as 855gm is the only gen2 |
966 | * that has backlight. |
942 | * that has backlight. |
967 | */ |
943 | */ |
968 | if (IS_GEN2(dev)) |
944 | if (IS_GEN2(dev_priv)) |
969 | I915_WRITE(BLC_HIST_CTL, BLM_HISTOGRAM_ENABLE); |
945 | I915_WRITE(BLC_HIST_CTL, BLM_HISTOGRAM_ENABLE); |
970 | } |
946 | } |
Line 971... | Line 947... | ||
971 | 947 | ||
972 | static void i965_enable_backlight(struct intel_connector *connector) |
948 | static void i965_enable_backlight(struct intel_connector *connector) |
973 | { |
- | |
974 | struct drm_device *dev = connector->base.dev; |
949 | { |
975 | struct drm_i915_private *dev_priv = dev->dev_private; |
950 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
976 | struct intel_panel *panel = &connector->panel; |
951 | struct intel_panel *panel = &connector->panel; |
977 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
952 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
Line 978... | Line 953... | ||
978 | u32 ctl, ctl2, freq; |
953 | u32 ctl, ctl2, freq; |
Line 1003... | Line 978... | ||
1003 | intel_panel_actually_set_backlight(connector, panel->backlight.level); |
978 | intel_panel_actually_set_backlight(connector, panel->backlight.level); |
1004 | } |
979 | } |
Line 1005... | Line 980... | ||
1005 | 980 | ||
1006 | static void vlv_enable_backlight(struct intel_connector *connector) |
981 | static void vlv_enable_backlight(struct intel_connector *connector) |
1007 | { |
- | |
1008 | struct drm_device *dev = connector->base.dev; |
982 | { |
1009 | struct drm_i915_private *dev_priv = dev->dev_private; |
983 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1010 | struct intel_panel *panel = &connector->panel; |
984 | struct intel_panel *panel = &connector->panel; |
1011 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
985 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
Line 1012... | Line 986... | ||
1012 | u32 ctl, ctl2; |
986 | u32 ctl, ctl2; |
Line 1035... | Line 1009... | ||
1035 | I915_WRITE(VLV_BLC_PWM_CTL2(pipe), ctl2 | BLM_PWM_ENABLE); |
1009 | I915_WRITE(VLV_BLC_PWM_CTL2(pipe), ctl2 | BLM_PWM_ENABLE); |
1036 | } |
1010 | } |
Line 1037... | Line 1011... | ||
1037 | 1011 | ||
1038 | static void bxt_enable_backlight(struct intel_connector *connector) |
1012 | static void bxt_enable_backlight(struct intel_connector *connector) |
1039 | { |
- | |
1040 | struct drm_device *dev = connector->base.dev; |
1013 | { |
1041 | struct drm_i915_private *dev_priv = dev->dev_private; |
1014 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1042 | struct intel_panel *panel = &connector->panel; |
1015 | struct intel_panel *panel = &connector->panel; |
1043 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
1016 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
Line 1044... | Line 1017... | ||
1044 | u32 pwm_ctl, val; |
1017 | u32 pwm_ctl, val; |
Line 1093... | Line 1066... | ||
1093 | intel_panel_actually_set_backlight(connector, panel->backlight.level); |
1066 | intel_panel_actually_set_backlight(connector, panel->backlight.level); |
1094 | } |
1067 | } |
Line 1095... | Line 1068... | ||
1095 | 1068 | ||
1096 | void intel_panel_enable_backlight(struct intel_connector *connector) |
1069 | void intel_panel_enable_backlight(struct intel_connector *connector) |
1097 | { |
- | |
1098 | struct drm_device *dev = connector->base.dev; |
1070 | { |
1099 | struct drm_i915_private *dev_priv = dev->dev_private; |
1071 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1100 | struct intel_panel *panel = &connector->panel; |
1072 | struct intel_panel *panel = &connector->panel; |
Line 1101... | Line 1073... | ||
1101 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
1073 | enum pipe pipe = intel_get_pipe_from_connector(connector); |
1102 | 1074 | ||
Line 1248... | Line 1220... | ||
1248 | { |
1220 | { |
1249 | } |
1221 | } |
1250 | #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */ |
1222 | #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */ |
Line 1251... | Line 1223... | ||
1251 | 1223 | ||
- | 1224 | /* |
|
- | 1225 | * BXT: PWM clock frequency = 19.2 MHz. |
|
- | 1226 | */ |
|
- | 1227 | static u32 bxt_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
|
- | 1228 | { |
|
- | 1229 | return KHz(19200) / pwm_freq_hz; |
|
- | 1230 | } |
|
- | 1231 | ||
1252 | /* |
1232 | /* |
1253 | * SPT: This value represents the period of the PWM stream in clock periods |
1233 | * SPT: This value represents the period of the PWM stream in clock periods |
1254 | * multiplied by 16 (default increment) or 128 (alternate increment selected in |
1234 | * multiplied by 16 (default increment) or 128 (alternate increment selected in |
1255 | * SCHICKEN_1 bit 0). PWM clock is 24 MHz. |
1235 | * SCHICKEN_1 bit 0). PWM clock is 24 MHz. |
1256 | */ |
1236 | */ |
1257 | static u32 spt_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
1237 | static u32 spt_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
1258 | { |
- | |
1259 | struct drm_device *dev = connector->base.dev; |
1238 | { |
1260 | struct drm_i915_private *dev_priv = dev->dev_private; |
1239 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
Line 1261... | Line 1240... | ||
1261 | u32 mul, clock; |
1240 | u32 mul, clock; |
1262 | 1241 | ||
1263 | if (I915_READ(SOUTH_CHICKEN1) & SPT_PWM_GRANULARITY) |
1242 | if (I915_READ(SOUTH_CHICKEN1) & SPT_PWM_GRANULARITY) |
Line 1275... | Line 1254... | ||
1275 | * multiplied by 128 (default increment) or 16 (alternate increment, selected in |
1254 | * multiplied by 128 (default increment) or 16 (alternate increment, selected in |
1276 | * LPT SOUTH_CHICKEN2 register bit 5). |
1255 | * LPT SOUTH_CHICKEN2 register bit 5). |
1277 | */ |
1256 | */ |
1278 | static u32 lpt_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
1257 | static u32 lpt_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
1279 | { |
1258 | { |
1280 | struct drm_device *dev = connector->base.dev; |
- | |
1281 | struct drm_i915_private *dev_priv = dev->dev_private; |
1259 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1282 | u32 mul, clock; |
1260 | u32 mul, clock; |
Line 1283... | Line 1261... | ||
1283 | 1261 | ||
1284 | if (I915_READ(SOUTH_CHICKEN2) & LPT_PWM_GRANULARITY) |
1262 | if (I915_READ(SOUTH_CHICKEN2) & LPT_PWM_GRANULARITY) |
1285 | mul = 16; |
1263 | mul = 16; |
1286 | else |
1264 | else |
Line 1287... | Line 1265... | ||
1287 | mul = 128; |
1265 | mul = 128; |
1288 | 1266 | ||
1289 | if (dev_priv->pch_id == INTEL_PCH_LPT_DEVICE_ID_TYPE) |
1267 | if (HAS_PCH_LPT_H(dev_priv)) |
1290 | clock = MHz(135); /* LPT:H */ |
1268 | clock = MHz(135); /* LPT:H */ |
Line 1291... | Line 1269... | ||
1291 | else |
1269 | else |
Line 1319... | Line 1297... | ||
1319 | struct drm_device *dev = connector->base.dev; |
1297 | struct drm_device *dev = connector->base.dev; |
1320 | struct drm_i915_private *dev_priv = dev->dev_private; |
1298 | struct drm_i915_private *dev_priv = dev->dev_private; |
1321 | int clock; |
1299 | int clock; |
Line 1322... | Line 1300... | ||
1322 | 1300 | ||
1323 | if (IS_PINEVIEW(dev)) |
1301 | if (IS_PINEVIEW(dev)) |
1324 | clock = intel_hrawclk(dev); |
1302 | clock = MHz(intel_hrawclk(dev)); |
1325 | else |
1303 | else |
Line 1326... | Line 1304... | ||
1326 | clock = 1000 * dev_priv->display.get_display_clock_speed(dev); |
1304 | clock = 1000 * dev_priv->cdclk_freq; |
1327 | 1305 | ||
Line 1328... | Line 1306... | ||
1328 | return clock / (pwm_freq_hz * 32); |
1306 | return clock / (pwm_freq_hz * 32); |
1329 | } |
1307 | } |
1330 | 1308 | ||
- | 1309 | /* |
|
1331 | /* |
1310 | * Gen4: This value represents the period of the PWM stream in display core |
1332 | * Gen4: This value represents the period of the PWM stream in display core |
1311 | * clocks ([DevCTG] HRAW clocks) multiplied by 128. |
1333 | * clocks multiplied by 128. |
1312 | * |
1334 | */ |
1313 | */ |
1335 | static u32 i965_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
1314 | static u32 i965_hz_to_pwm(struct intel_connector *connector, u32 pwm_freq_hz) |
- | 1315 | { |
|
- | 1316 | struct drm_device *dev = connector->base.dev; |
|
- | 1317 | struct drm_i915_private *dev_priv = dev->dev_private; |
|
- | 1318 | int clock; |
|
- | 1319 | ||
1336 | { |
1320 | if (IS_G4X(dev_priv)) |
Line 1337... | Line 1321... | ||
1337 | struct drm_device *dev = connector->base.dev; |
1321 | clock = MHz(intel_hrawclk(dev)); |
1338 | struct drm_i915_private *dev_priv = dev->dev_private; |
1322 | else |
Line 1339... | Line 1323... | ||
1339 | int clock = 1000 * dev_priv->display.get_display_clock_speed(dev); |
1323 | clock = 1000 * dev_priv->cdclk_freq; |
Line 1363... | Line 1347... | ||
1363 | } |
1347 | } |
1364 | } |
1348 | } |
Line 1365... | Line 1349... | ||
1365 | 1349 | ||
1366 | static u32 get_backlight_max_vbt(struct intel_connector *connector) |
1350 | static u32 get_backlight_max_vbt(struct intel_connector *connector) |
1367 | { |
- | |
1368 | struct drm_device *dev = connector->base.dev; |
1351 | { |
1369 | struct drm_i915_private *dev_priv = dev->dev_private; |
1352 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1370 | struct intel_panel *panel = &connector->panel; |
1353 | struct intel_panel *panel = &connector->panel; |
1371 | u16 pwm_freq_hz = dev_priv->vbt.backlight.pwm_freq_hz; |
1354 | u16 pwm_freq_hz = dev_priv->vbt.backlight.pwm_freq_hz; |
Line 1372... | Line 1355... | ||
1372 | u32 pwm; |
1355 | u32 pwm; |
1373 | 1356 | ||
1374 | if (!pwm_freq_hz) { |
1357 | if (!panel->backlight.hz_to_pwm) { |
1375 | DRM_DEBUG_KMS("backlight frequency not specified in VBT\n"); |
1358 | DRM_DEBUG_KMS("backlight frequency conversion not supported\n"); |
Line 1376... | Line 1359... | ||
1376 | return 0; |
1359 | return 0; |
1377 | } |
1360 | } |
- | 1361 | ||
1378 | 1362 | if (pwm_freq_hz) { |
|
- | 1363 | DRM_DEBUG_KMS("VBT defined backlight frequency %u Hz\n", |
|
- | 1364 | pwm_freq_hz); |
|
- | 1365 | } else { |
|
1379 | if (!panel->backlight.hz_to_pwm) { |
1366 | pwm_freq_hz = 200; |
Line 1380... | Line 1367... | ||
1380 | DRM_DEBUG_KMS("backlight frequency setting from VBT currently not supported on this platform\n"); |
1367 | DRM_DEBUG_KMS("default backlight frequency %u Hz\n", |
1381 | return 0; |
1368 | pwm_freq_hz); |
1382 | } |
1369 | } |
1383 | 1370 | ||
1384 | pwm = panel->backlight.hz_to_pwm(connector, pwm_freq_hz); |
1371 | pwm = panel->backlight.hz_to_pwm(connector, pwm_freq_hz); |
Line 1385... | Line -... | ||
1385 | if (!pwm) { |
- | |
1386 | DRM_DEBUG_KMS("backlight frequency conversion failed\n"); |
- | |
1387 | return 0; |
1372 | if (!pwm) { |
1388 | } |
1373 | DRM_DEBUG_KMS("backlight frequency conversion failed\n"); |
Line 1389... | Line 1374... | ||
1389 | 1374 | return 0; |
|
1390 | DRM_DEBUG_KMS("backlight frequency %u Hz from VBT\n", pwm_freq_hz); |
1375 | } |
1391 | 1376 | ||
1392 | return pwm; |
1377 | return pwm; |
1393 | } |
1378 | } |
1394 | - | ||
1395 | /* |
1379 | |
1396 | * Note: The setup hooks can't assume pipe is set! |
1380 | /* |
1397 | */ |
1381 | * Note: The setup hooks can't assume pipe is set! |
Line 1398... | Line 1382... | ||
1398 | static u32 get_backlight_min_vbt(struct intel_connector *connector) |
1382 | */ |
Line 1421... | Line 1405... | ||
1421 | return scale(min, 0, 255, 0, panel->backlight.max); |
1405 | return scale(min, 0, 255, 0, panel->backlight.max); |
1422 | } |
1406 | } |
Line 1423... | Line 1407... | ||
1423 | 1407 | ||
1424 | static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1408 | static int lpt_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1425 | { |
- | |
1426 | struct drm_device *dev = connector->base.dev; |
1409 | { |
1427 | struct drm_i915_private *dev_priv = dev->dev_private; |
1410 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1428 | struct intel_panel *panel = &connector->panel; |
1411 | struct intel_panel *panel = &connector->panel; |
Line 1429... | Line 1412... | ||
1429 | u32 pch_ctl1, pch_ctl2, val; |
1412 | u32 pch_ctl1, pch_ctl2, val; |
1430 | 1413 | ||
Line 1451... | Line 1434... | ||
1451 | return 0; |
1434 | return 0; |
1452 | } |
1435 | } |
Line 1453... | Line 1436... | ||
1453 | 1436 | ||
1454 | static int pch_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1437 | static int pch_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1455 | { |
- | |
1456 | struct drm_device *dev = connector->base.dev; |
1438 | { |
1457 | struct drm_i915_private *dev_priv = dev->dev_private; |
1439 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1458 | struct intel_panel *panel = &connector->panel; |
1440 | struct intel_panel *panel = &connector->panel; |
Line 1459... | Line 1441... | ||
1459 | u32 cpu_ctl2, pch_ctl1, pch_ctl2, val; |
1441 | u32 cpu_ctl2, pch_ctl1, pch_ctl2, val; |
1460 | 1442 | ||
Line 1482... | Line 1464... | ||
1482 | return 0; |
1464 | return 0; |
1483 | } |
1465 | } |
Line 1484... | Line 1466... | ||
1484 | 1466 | ||
1485 | static int i9xx_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1467 | static int i9xx_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1486 | { |
- | |
1487 | struct drm_device *dev = connector->base.dev; |
1468 | { |
1488 | struct drm_i915_private *dev_priv = dev->dev_private; |
1469 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1489 | struct intel_panel *panel = &connector->panel; |
1470 | struct intel_panel *panel = &connector->panel; |
Line 1490... | Line 1471... | ||
1490 | u32 ctl, val; |
1471 | u32 ctl, val; |
Line 1491... | Line 1472... | ||
1491 | 1472 | ||
1492 | ctl = I915_READ(BLC_PWM_CTL); |
1473 | ctl = I915_READ(BLC_PWM_CTL); |
Line 1493... | Line 1474... | ||
1493 | 1474 | ||
1494 | if (IS_GEN2(dev) || IS_I915GM(dev) || IS_I945GM(dev)) |
1475 | if (IS_GEN2(dev_priv) || IS_I915GM(dev_priv) || IS_I945GM(dev_priv)) |
Line 1495... | Line 1476... | ||
1495 | panel->backlight.combination_mode = ctl & BLM_LEGACY_MODE; |
1476 | panel->backlight.combination_mode = ctl & BLM_LEGACY_MODE; |
Line 1496... | Line 1477... | ||
1496 | 1477 | ||
Line 1520... | Line 1501... | ||
1520 | return 0; |
1501 | return 0; |
1521 | } |
1502 | } |
Line 1522... | Line 1503... | ||
1522 | 1503 | ||
1523 | static int i965_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1504 | static int i965_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1524 | { |
- | |
1525 | struct drm_device *dev = connector->base.dev; |
1505 | { |
1526 | struct drm_i915_private *dev_priv = dev->dev_private; |
1506 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1527 | struct intel_panel *panel = &connector->panel; |
1507 | struct intel_panel *panel = &connector->panel; |
Line 1528... | Line 1508... | ||
1528 | u32 ctl, ctl2, val; |
1508 | u32 ctl, ctl2, val; |
1529 | 1509 | ||
Line 1554... | Line 1534... | ||
1554 | return 0; |
1534 | return 0; |
1555 | } |
1535 | } |
Line 1556... | Line 1536... | ||
1556 | 1536 | ||
1557 | static int vlv_setup_backlight(struct intel_connector *connector, enum pipe pipe) |
1537 | static int vlv_setup_backlight(struct intel_connector *connector, enum pipe pipe) |
1558 | { |
- | |
1559 | struct drm_device *dev = connector->base.dev; |
1538 | { |
1560 | struct drm_i915_private *dev_priv = dev->dev_private; |
1539 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1561 | struct intel_panel *panel = &connector->panel; |
1540 | struct intel_panel *panel = &connector->panel; |
Line 1562... | Line 1541... | ||
1562 | u32 ctl, ctl2, val; |
1541 | u32 ctl, ctl2, val; |
1563 | 1542 | ||
Line 1576... | Line 1555... | ||
1576 | if (!panel->backlight.max) |
1555 | if (!panel->backlight.max) |
1577 | return -ENODEV; |
1556 | return -ENODEV; |
Line 1578... | Line 1557... | ||
1578 | 1557 | ||
Line 1579... | Line 1558... | ||
1579 | panel->backlight.min = get_backlight_min_vbt(connector); |
1558 | panel->backlight.min = get_backlight_min_vbt(connector); |
1580 | 1559 | ||
Line 1581... | Line 1560... | ||
1581 | val = _vlv_get_backlight(dev, pipe); |
1560 | val = _vlv_get_backlight(dev_priv, pipe); |
1582 | panel->backlight.level = intel_panel_compute_brightness(connector, val); |
1561 | panel->backlight.level = intel_panel_compute_brightness(connector, val); |
Line 1588... | Line 1567... | ||
1588 | } |
1567 | } |
Line 1589... | Line 1568... | ||
1589 | 1568 | ||
1590 | static int |
1569 | static int |
1591 | bxt_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1570 | bxt_setup_backlight(struct intel_connector *connector, enum pipe unused) |
1592 | { |
- | |
1593 | struct drm_device *dev = connector->base.dev; |
1571 | { |
1594 | struct drm_i915_private *dev_priv = dev->dev_private; |
1572 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1595 | struct intel_panel *panel = &connector->panel; |
1573 | struct intel_panel *panel = &connector->panel; |
Line 1596... | Line 1574... | ||
1596 | u32 pwm_ctl, val; |
1574 | u32 pwm_ctl, val; |
1597 | 1575 | ||
Line 1667... | Line 1645... | ||
1667 | return 0; |
1645 | return 0; |
1668 | } |
1646 | } |
Line 1669... | Line 1647... | ||
1669 | 1647 | ||
1670 | int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe) |
1648 | int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe) |
1671 | { |
- | |
1672 | struct drm_device *dev = connector->dev; |
1649 | { |
1673 | struct drm_i915_private *dev_priv = dev->dev_private; |
1650 | struct drm_i915_private *dev_priv = to_i915(connector->dev); |
1674 | struct intel_connector *intel_connector = to_intel_connector(connector); |
1651 | struct intel_connector *intel_connector = to_intel_connector(connector); |
1675 | struct intel_panel *panel = &intel_connector->panel; |
1652 | struct intel_panel *panel = &intel_connector->panel; |
Line 1676... | Line 1653... | ||
1676 | int ret; |
1653 | int ret; |
Line 1723... | Line 1700... | ||
1723 | 1700 | ||
1724 | /* Set up chip specific backlight functions */ |
1701 | /* Set up chip specific backlight functions */ |
1725 | static void |
1702 | static void |
1726 | intel_panel_init_backlight_funcs(struct intel_panel *panel) |
1703 | intel_panel_init_backlight_funcs(struct intel_panel *panel) |
1727 | { |
1704 | { |
1728 | struct intel_connector *intel_connector = |
1705 | struct intel_connector *connector = |
1729 | container_of(panel, struct intel_connector, panel); |
- | |
1730 | struct drm_device *dev = intel_connector->base.dev; |
1706 | container_of(panel, struct intel_connector, panel); |
Line 1731... | Line 1707... | ||
1731 | struct drm_i915_private *dev_priv = dev->dev_private; |
1707 | struct drm_i915_private *dev_priv = to_i915(connector->base.dev); |
1732 | 1708 | ||
1733 | if (IS_BROXTON(dev)) { |
1709 | if (IS_BROXTON(dev_priv)) { |
1734 | panel->backlight.setup = bxt_setup_backlight; |
1710 | panel->backlight.setup = bxt_setup_backlight; |
1735 | panel->backlight.enable = bxt_enable_backlight; |
1711 | panel->backlight.enable = bxt_enable_backlight; |
1736 | panel->backlight.disable = bxt_disable_backlight; |
1712 | panel->backlight.disable = bxt_disable_backlight; |
- | 1713 | panel->backlight.set = bxt_set_backlight; |
|
1737 | panel->backlight.set = bxt_set_backlight; |
1714 | panel->backlight.get = bxt_get_backlight; |
1738 | panel->backlight.get = bxt_get_backlight; |
1715 | panel->backlight.hz_to_pwm = bxt_hz_to_pwm; |
1739 | } else if (HAS_PCH_LPT(dev) || HAS_PCH_SPT(dev)) { |
1716 | } else if (HAS_PCH_LPT(dev_priv) || HAS_PCH_SPT(dev_priv)) { |
1740 | panel->backlight.setup = lpt_setup_backlight; |
1717 | panel->backlight.setup = lpt_setup_backlight; |
1741 | panel->backlight.enable = lpt_enable_backlight; |
1718 | panel->backlight.enable = lpt_enable_backlight; |
1742 | panel->backlight.disable = lpt_disable_backlight; |
1719 | panel->backlight.disable = lpt_disable_backlight; |
1743 | panel->backlight.set = lpt_set_backlight; |
1720 | panel->backlight.set = lpt_set_backlight; |
1744 | panel->backlight.get = lpt_get_backlight; |
1721 | panel->backlight.get = lpt_get_backlight; |
1745 | if (HAS_PCH_LPT(dev)) |
1722 | if (HAS_PCH_LPT(dev_priv)) |
1746 | panel->backlight.hz_to_pwm = lpt_hz_to_pwm; |
1723 | panel->backlight.hz_to_pwm = lpt_hz_to_pwm; |
1747 | else |
1724 | else |
1748 | panel->backlight.hz_to_pwm = spt_hz_to_pwm; |
1725 | panel->backlight.hz_to_pwm = spt_hz_to_pwm; |
1749 | } else if (HAS_PCH_SPLIT(dev)) { |
1726 | } else if (HAS_PCH_SPLIT(dev_priv)) { |
1750 | panel->backlight.setup = pch_setup_backlight; |
1727 | panel->backlight.setup = pch_setup_backlight; |
1751 | panel->backlight.enable = pch_enable_backlight; |
1728 | panel->backlight.enable = pch_enable_backlight; |
1752 | panel->backlight.disable = pch_disable_backlight; |
1729 | panel->backlight.disable = pch_disable_backlight; |
1753 | panel->backlight.set = pch_set_backlight; |
1730 | panel->backlight.set = pch_set_backlight; |
1754 | panel->backlight.get = pch_get_backlight; |
1731 | panel->backlight.get = pch_get_backlight; |
1755 | panel->backlight.hz_to_pwm = pch_hz_to_pwm; |
1732 | panel->backlight.hz_to_pwm = pch_hz_to_pwm; |
1756 | } else if (IS_VALLEYVIEW(dev)) { |
1733 | } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) { |
1757 | if (dev_priv->vbt.has_mipi) { |
1734 | if (dev_priv->vbt.has_mipi) { |
1758 | panel->backlight.setup = pwm_setup_backlight; |
1735 | panel->backlight.setup = pwm_setup_backlight; |
1759 | panel->backlight.enable = pwm_enable_backlight; |
1736 | panel->backlight.enable = pwm_enable_backlight; |
Line 1766... | Line 1743... | ||
1766 | panel->backlight.disable = vlv_disable_backlight; |
1743 | panel->backlight.disable = vlv_disable_backlight; |
1767 | panel->backlight.set = vlv_set_backlight; |
1744 | panel->backlight.set = vlv_set_backlight; |
1768 | panel->backlight.get = vlv_get_backlight; |
1745 | panel->backlight.get = vlv_get_backlight; |
1769 | panel->backlight.hz_to_pwm = vlv_hz_to_pwm; |
1746 | panel->backlight.hz_to_pwm = vlv_hz_to_pwm; |
1770 | } |
1747 | } |
1771 | } else if (IS_GEN4(dev)) { |
1748 | } else if (IS_GEN4(dev_priv)) { |
1772 | panel->backlight.setup = i965_setup_backlight; |
1749 | panel->backlight.setup = i965_setup_backlight; |
1773 | panel->backlight.enable = i965_enable_backlight; |
1750 | panel->backlight.enable = i965_enable_backlight; |
1774 | panel->backlight.disable = i965_disable_backlight; |
1751 | panel->backlight.disable = i965_disable_backlight; |
1775 | panel->backlight.set = i9xx_set_backlight; |
1752 | panel->backlight.set = i9xx_set_backlight; |
1776 | panel->backlight.get = i9xx_get_backlight; |
1753 | panel->backlight.get = i9xx_get_backlight; |
Line 1812... | Line 1789... | ||
1812 | 1789 | ||
1813 | void intel_backlight_register(struct drm_device *dev) |
1790 | void intel_backlight_register(struct drm_device *dev) |
1814 | { |
1791 | { |
Line 1815... | Line 1792... | ||
1815 | struct intel_connector *connector; |
1792 | struct intel_connector *connector; |
1816 | 1793 | ||
1817 | list_for_each_entry(connector, &dev->mode_config.connector_list, base.head) |
1794 | for_each_intel_connector(dev, connector) |
Line 1818... | Line 1795... | ||
1818 | intel_backlight_device_register(connector); |
1795 | intel_backlight_device_register(connector); |
1819 | } |
1796 | } |
1820 | 1797 | ||
Line 1821... | Line 1798... | ||
1821 | void intel_backlight_unregister(struct drm_device *dev) |
1798 | void intel_backlight_unregister(struct drm_device *dev) |
1822 | { |
1799 | { |
1823 | struct intel_connector *connector; |
1800 | struct intel_connector *connector; |