diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-02-16 04:36:05 -0500 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-02-16 04:44:30 -0500 |
commit | 9035a97a32836d0e456ddafaaf249a844e6e4b5e (patch) | |
tree | 41ec3db083bdb46cd831f0d39db1fe294ae7d55f /drivers/gpu/drm/i915/intel_dp.c | |
parent | fe16d949b45036d9f80e20e07bde1ddacc930b10 (diff) | |
parent | 452858338aec31c1f4414bf07f31663690479869 (diff) |
Merge branch 'drm-intel-fixes' into drm-intel-next
Grab the latest stabilisation bits from -fixes and some suspend and
resume fixes from linus.
Conflicts:
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_irq.c
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 65959a29ab2b..7ffb324b6a7d 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -1657,6 +1657,24 @@ static int intel_dp_get_modes(struct drm_connector *connector) | |||
1657 | return 0; | 1657 | return 0; |
1658 | } | 1658 | } |
1659 | 1659 | ||
1660 | static bool | ||
1661 | intel_dp_detect_audio(struct drm_connector *connector) | ||
1662 | { | ||
1663 | struct intel_dp *intel_dp = intel_attached_dp(connector); | ||
1664 | struct edid *edid; | ||
1665 | bool has_audio = false; | ||
1666 | |||
1667 | edid = drm_get_edid(connector, &intel_dp->adapter); | ||
1668 | if (edid) { | ||
1669 | has_audio = drm_detect_monitor_audio(edid); | ||
1670 | |||
1671 | connector->display_info.raw_edid = NULL; | ||
1672 | kfree(edid); | ||
1673 | } | ||
1674 | |||
1675 | return has_audio; | ||
1676 | } | ||
1677 | |||
1660 | static int | 1678 | static int |
1661 | intel_dp_set_property(struct drm_connector *connector, | 1679 | intel_dp_set_property(struct drm_connector *connector, |
1662 | struct drm_property *property, | 1680 | struct drm_property *property, |
@@ -1670,17 +1688,23 @@ intel_dp_set_property(struct drm_connector *connector, | |||
1670 | return ret; | 1688 | return ret; |
1671 | 1689 | ||
1672 | if (property == intel_dp->force_audio_property) { | 1690 | if (property == intel_dp->force_audio_property) { |
1673 | if (val == intel_dp->force_audio) | 1691 | int i = val; |
1692 | bool has_audio; | ||
1693 | |||
1694 | if (i == intel_dp->force_audio) | ||
1674 | return 0; | 1695 | return 0; |
1675 | 1696 | ||
1676 | intel_dp->force_audio = val; | 1697 | intel_dp->force_audio = i; |
1677 | 1698 | ||
1678 | if (val > 0 && intel_dp->has_audio) | 1699 | if (i == 0) |
1679 | return 0; | 1700 | has_audio = intel_dp_detect_audio(connector); |
1680 | if (val < 0 && !intel_dp->has_audio) | 1701 | else |
1702 | has_audio = i > 0; | ||
1703 | |||
1704 | if (has_audio == intel_dp->has_audio) | ||
1681 | return 0; | 1705 | return 0; |
1682 | 1706 | ||
1683 | intel_dp->has_audio = val > 0; | 1707 | intel_dp->has_audio = has_audio; |
1684 | goto done; | 1708 | goto done; |
1685 | } | 1709 | } |
1686 | 1710 | ||