aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_modes.c
diff options
context:
space:
mode:
authorZhenyu Wang <zhenyuw@linux.intel.com>2010-03-30 02:39:31 -0400
committerEric Anholt <eric@anholt.net>2010-04-09 17:17:31 -0400
commit335af9a235a82842854b394507ab5e310d88be42 (patch)
treee4d05c21023b46e98082558cbb03db4968274348 /drivers/gpu/drm/i915/intel_modes.c
parentc1c43977e6fc789cbde094303fa9ace629a35aca (diff)
drm/i915: change intel_ddc_get_modes() function parameters
This one replaces original param for intel_ddc_get_modes() with DRM connector and i2c bus adapter instead. With explicit params, we won't require that a single driver structure must hold connector and DDC bus reference, which ease the conversion to splitted encoder/ connector model. It also clears up for some cases that we would steal other DDC bus for mode probe, like VGA analog DDC probe for DVI-I. Also it fixed a bug in old DVI-I probe handling, that failed to restore origin analog GPIO port. Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com> Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_modes.c')
-rw-r--r--drivers/gpu/drm/i915/intel_modes.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index 3111a1c2731f..9562176defc4 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
+++ b/drivers/gpu/drm/i915/intel_modes.c
@@ -53,9 +53,9 @@ bool intel_ddc_probe(struct intel_encoder *intel_encoder)
53 } 53 }
54 }; 54 };
55 55
56 intel_i2c_quirk_set(intel_encoder->base.dev, true); 56 intel_i2c_quirk_set(intel_encoder->enc.dev, true);
57 ret = i2c_transfer(intel_encoder->ddc_bus, msgs, 2); 57 ret = i2c_transfer(intel_encoder->ddc_bus, msgs, 2);
58 intel_i2c_quirk_set(intel_encoder->base.dev, false); 58 intel_i2c_quirk_set(intel_encoder->enc.dev, false);
59 if (ret == 2) 59 if (ret == 2)
60 return true; 60 return true;
61 61
@@ -65,22 +65,23 @@ bool intel_ddc_probe(struct intel_encoder *intel_encoder)
65/** 65/**
66 * intel_ddc_get_modes - get modelist from monitor 66 * intel_ddc_get_modes - get modelist from monitor
67 * @connector: DRM connector device to use 67 * @connector: DRM connector device to use
68 * @adapter: i2c adapter
68 * 69 *
69 * Fetch the EDID information from @connector using the DDC bus. 70 * Fetch the EDID information from @connector using the DDC bus.
70 */ 71 */
71int intel_ddc_get_modes(struct intel_encoder *intel_encoder) 72int intel_ddc_get_modes(struct drm_connector *connector,
73 struct i2c_adapter *adapter)
72{ 74{
73 struct edid *edid; 75 struct edid *edid;
74 int ret = 0; 76 int ret = 0;
75 77
76 intel_i2c_quirk_set(intel_encoder->base.dev, true); 78 intel_i2c_quirk_set(connector->dev, true);
77 edid = drm_get_edid(&intel_encoder->base, intel_encoder->ddc_bus); 79 edid = drm_get_edid(connector, adapter);
78 intel_i2c_quirk_set(intel_encoder->base.dev, false); 80 intel_i2c_quirk_set(connector->dev, false);
79 if (edid) { 81 if (edid) {
80 drm_mode_connector_update_edid_property(&intel_encoder->base, 82 drm_mode_connector_update_edid_property(connector, edid);
81 edid); 83 ret = drm_add_edid_modes(connector, edid);
82 ret = drm_add_edid_modes(&intel_encoder->base, edid); 84 connector->display_info.raw_edid = NULL;
83 intel_encoder->base.display_info.raw_edid = NULL;
84 kfree(edid); 85 kfree(edid);
85 } 86 }
86 87