Rev 6660 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6660 | Rev 6937 | ||
---|---|---|---|
Line 42... | Line 42... | ||
42 | 42 | ||
43 | /* Private structure for the integrated LVDS support */ |
43 | /* Private structure for the integrated LVDS support */ |
44 | struct intel_lvds_connector { |
44 | struct intel_lvds_connector { |
Line 45... | Line 45... | ||
45 | struct intel_connector base; |
45 | struct intel_connector base; |
46 | 46 | ||
Line 47... | Line 47... | ||
47 | // struct notifier_block lid_notifier; |
47 | struct notifier_block lid_notifier; |
48 | }; |
48 | }; |
Line 49... | Line 49... | ||
49 | 49 | ||
50 | struct intel_lvds_encoder { |
50 | struct intel_lvds_encoder { |
51 | struct intel_encoder base; |
51 | struct intel_encoder base; |
Line 52... | Line 52... | ||
52 | 52 | ||
53 | bool is_dual_link; |
53 | bool is_dual_link; |
Line 73... | Line 73... | ||
73 | struct drm_device *dev = encoder->base.dev; |
73 | struct drm_device *dev = encoder->base.dev; |
74 | struct drm_i915_private *dev_priv = dev->dev_private; |
74 | struct drm_i915_private *dev_priv = dev->dev_private; |
75 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
75 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
76 | enum intel_display_power_domain power_domain; |
76 | enum intel_display_power_domain power_domain; |
77 | u32 tmp; |
77 | u32 tmp; |
- | 78 | bool ret; |
|
Line 78... | Line 79... | ||
78 | 79 | ||
79 | power_domain = intel_display_port_power_domain(encoder); |
80 | power_domain = intel_display_port_power_domain(encoder); |
80 | if (!intel_display_power_is_enabled(dev_priv, power_domain)) |
81 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) |
Line -... | Line 82... | ||
- | 82 | return false; |
|
- | 83 | ||
81 | return false; |
84 | ret = false; |
Line 82... | Line 85... | ||
82 | 85 | ||
83 | tmp = I915_READ(lvds_encoder->reg); |
86 | tmp = I915_READ(lvds_encoder->reg); |
Line 84... | Line 87... | ||
84 | 87 | ||
85 | if (!(tmp & LVDS_PORT_EN)) |
88 | if (!(tmp & LVDS_PORT_EN)) |
86 | return false; |
89 | goto out; |
87 | 90 | ||
Line 88... | Line 91... | ||
88 | if (HAS_PCH_CPT(dev)) |
91 | if (HAS_PCH_CPT(dev)) |
- | 92 | *pipe = PORT_TO_PIPE_CPT(tmp); |
|
- | 93 | else |
|
- | 94 | *pipe = PORT_TO_PIPE(tmp); |
|
- | 95 | ||
- | 96 | ret = true; |
|
89 | *pipe = PORT_TO_PIPE_CPT(tmp); |
97 | |
Line 90... | Line 98... | ||
90 | else |
98 | out: |
91 | *pipe = PORT_TO_PIPE(tmp); |
99 | intel_display_power_put(dev_priv, power_domain); |
92 | 100 | ||
Line 208... | Line 216... | ||
208 | struct drm_device *dev = encoder->base.dev; |
216 | struct drm_device *dev = encoder->base.dev; |
209 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
217 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
210 | struct intel_connector *intel_connector = |
218 | struct intel_connector *intel_connector = |
211 | &lvds_encoder->attached_connector->base; |
219 | &lvds_encoder->attached_connector->base; |
212 | struct drm_i915_private *dev_priv = dev->dev_private; |
220 | struct drm_i915_private *dev_priv = dev->dev_private; |
213 | u32 ctl_reg, stat_reg; |
221 | i915_reg_t ctl_reg, stat_reg; |
Line 214... | Line 222... | ||
214 | 222 | ||
215 | if (HAS_PCH_SPLIT(dev)) { |
223 | if (HAS_PCH_SPLIT(dev)) { |
216 | ctl_reg = PCH_PP_CONTROL; |
224 | ctl_reg = PCH_PP_CONTROL; |
217 | stat_reg = PCH_PP_STATUS; |
225 | stat_reg = PCH_PP_STATUS; |
Line 233... | Line 241... | ||
233 | static void intel_disable_lvds(struct intel_encoder *encoder) |
241 | static void intel_disable_lvds(struct intel_encoder *encoder) |
234 | { |
242 | { |
235 | struct drm_device *dev = encoder->base.dev; |
243 | struct drm_device *dev = encoder->base.dev; |
236 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
244 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
237 | struct drm_i915_private *dev_priv = dev->dev_private; |
245 | struct drm_i915_private *dev_priv = dev->dev_private; |
238 | u32 ctl_reg, stat_reg; |
246 | i915_reg_t ctl_reg, stat_reg; |
Line 239... | Line 247... | ||
239 | 247 | ||
240 | if (HAS_PCH_SPLIT(dev)) { |
248 | if (HAS_PCH_SPLIT(dev)) { |
241 | ctl_reg = PCH_PP_CONTROL; |
249 | ctl_reg = PCH_PP_CONTROL; |
242 | stat_reg = PCH_PP_STATUS; |
250 | stat_reg = PCH_PP_STATUS; |
Line 937... | Line 945... | ||
937 | struct drm_display_mode *scan; /* *modes, *bios_mode; */ |
945 | struct drm_display_mode *scan; /* *modes, *bios_mode; */ |
938 | struct drm_display_mode *fixed_mode = NULL; |
946 | struct drm_display_mode *fixed_mode = NULL; |
939 | struct drm_display_mode *downclock_mode = NULL; |
947 | struct drm_display_mode *downclock_mode = NULL; |
940 | struct edid *edid; |
948 | struct edid *edid; |
941 | struct drm_crtc *crtc; |
949 | struct drm_crtc *crtc; |
942 | u32 lvds_reg; |
950 | i915_reg_t lvds_reg; |
943 | u32 lvds; |
951 | u32 lvds; |
944 | int pipe; |
952 | int pipe; |
945 | u8 pin; |
953 | u8 pin; |
Line 946... | Line 954... | ||
946 | 954 | ||
Line 1023... | Line 1031... | ||
1023 | connector = &intel_connector->base; |
1031 | connector = &intel_connector->base; |
1024 | drm_connector_init(dev, &intel_connector->base, &intel_lvds_connector_funcs, |
1032 | drm_connector_init(dev, &intel_connector->base, &intel_lvds_connector_funcs, |
1025 | DRM_MODE_CONNECTOR_LVDS); |
1033 | DRM_MODE_CONNECTOR_LVDS); |
Line 1026... | Line 1034... | ||
1026 | 1034 | ||
1027 | drm_encoder_init(dev, &intel_encoder->base, &intel_lvds_enc_funcs, |
1035 | drm_encoder_init(dev, &intel_encoder->base, &intel_lvds_enc_funcs, |
Line 1028... | Line 1036... | ||
1028 | DRM_MODE_ENCODER_LVDS); |
1036 | DRM_MODE_ENCODER_LVDS, NULL); |
1029 | 1037 | ||
1030 | intel_encoder->enable = intel_enable_lvds; |
1038 | intel_encoder->enable = intel_enable_lvds; |
1031 | intel_encoder->pre_enable = intel_pre_enable_lvds; |
1039 | intel_encoder->pre_enable = intel_pre_enable_lvds; |
Line 1162... | Line 1170... | ||
1162 | 1170 | ||
1163 | lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder); |
1171 | lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder); |
1164 | DRM_DEBUG_KMS("detected %s-link lvds configuration\n", |
1172 | DRM_DEBUG_KMS("detected %s-link lvds configuration\n", |
Line 1165... | Line 1173... | ||
1165 | lvds_encoder->is_dual_link ? "dual" : "single"); |
1173 | lvds_encoder->is_dual_link ? "dual" : "single"); |
1166 | - | ||
Line 1167... | Line 1174... | ||
1167 | lvds_encoder->a3_power = I915_READ(lvds_encoder->reg) & |
1174 | |
Line 1168... | Line 1175... | ||
1168 | LVDS_A3_POWER_MASK; |
1175 | lvds_encoder->a3_power = lvds & LVDS_A3_POWER_MASK; |